どうも。どっことです。今回はGitHub Packagesを使って自作ライブラリを簡単に公開する方法を解説したいと思います。
プライベートで資格試験などに向けた問題集アプリを不定期に作るのですが、毎回データクラスや画面を一から作っているので「そろそろ標準化しよう。。。」と思いました。ただ標準化したはいいものの、いい感じに使い回すためにはどうしたらいいか、というところで調べた結果、GitHub Packagesのサービスに行き着いたので今回はこちらを紹介し、実際に公開する方法を解説したいと思います。
GitHubPackagesとは
GitHubPackagesはGitHubのサービスの一つで、まさに今回のようなライブラリや、パッケージなどを共有するためのものだそうです。mavenやnpm、NuGetなどの形式で公開することができます。しかも嬉しいことに公開範囲も指定できるようで、一般公開からプライベートやTeam限定など、制御することができるとのこと。とても便利。
今回はJava向けのライブラリを公開するために、Gradleプラグインを使った手順を紹介したいと思います。
GitHubPackagesにライブラリを公開する設定手順
以下の手順で進めます。
- app/build.gradleに設定を追加する。
- Gradleタスクを実行する。
- (任意)GitHub Actionで自動的に更新する。
順番に解説していきます。
app/build.gradleに設定を追加する
app/build.gradle
に以下を追加します。
plugins {
...
id 'maven-publish'
}
publishing {
...
repositories {
maven {
name = "GitHubPackages"
url = "https://maven.pkg.github.com/mkt120/sample_repository"
credentials {
username = System.getenv("USER_NAME")
password = System.getenv("ACCESS_TOKEN")
}
}
}
}
plugin
にmaven-publish
を追加。ライブラリ公開を簡単に実行してくれるプラグインを組み込む。url
はGitHubのリポジトリURL。- GitHubのリポジトリに対応したURLを設定。
username
、password
はログイン情報。-
特にpasswordはログインパスワードだと警告orエラーが発生するので、Githubからアクセストークンを取得しそれを設定する。直書きだとセキュリティ観点でリスクがあるので、Githubの
secret and variables
に設定しておいて、それを参照するようにしておくのが無難。
Gradleタスクを実行する
前項の設定を追加し、sync gradle
を実行すると以下のタスクが追加されます。
publishGprPublicationToGitHubPackagesRepository
これをコマンドラインやGradleペインから実行することで、 GithubPackagesへの登録が行われます。
./gradlew publishGprPublicationToGitHubPackagesRepository
(GithubPackageによると)以下のタスクはGithubPackagesへの登録だけでなく、その前段階のライブラリのビルドなども一緒に実行してくれるようなので、こちらを利用するのが良さそうです。
./gradlew publish
(任意)GitHub Actionで自動的に更新する
ここまでだけでGitHubPackagesにパッケージを登録することができますが、GitHubにコミットをプッシュしたことを契機に、GitHubPackagesに更新を入れるようGitHub Actionで自動登録できるようにしておきます。
#masterブランチにプッシュされたら実行
on:
push:
branches: [ "master" ]
...
jobs:
build:
...
# name. githubAction のコンソール上で実行内容がわかりやすいように名前付けしておく
- name: publish library
run: ./gradlew publish
env:
USER_NAME: ${{ secrets.USER_NAME }}
ACCESS_TOKEN: ${{ secrets.ACCESS_TOKEN }}
まとめ
今回はGitHubPackagesにライブラリを公開する方法を解説しました。似たようなデータ形式・UIのアプリケーションをたくさん開発している方は、こういった機能を活用することで開発作業の効率化を図りたいですね。また、ライブラリ化したはいいけど、maven repository に登録するほどのものではないんだよなぁ...という方にも、GitHubPackagesという公開範囲を管理できる領域に登録することで適切にスケーリングすることもできるのではないかと思います。