GitHubのプライベートリポジトリに自作パッケージ上げてComposerでインストールする
GitHubのプライベートリポジトリに自作パッケージ上げて、それを他のアプリからComposerでインストールして、本番環境へのデプロイまで一応やったのでメモ。
この記事の前提
- GitHubのユーザー名は napoporitataso とする。
- 自作パッケージ (以下『ライブラリ』) の名前は
napoporitataso/mylib
とする。 - ライブラリをインストールする側のパッケージ (以下『アプリ』) の名前は
napoporitataso/myapp
とする。
GitHubのユーザー名とライブラリのベンダー名を違うものにできるかどうかは、試してないので分からない。
ライブラリをローカルに置かないでGitHubに上げる理由は、ローカルだとアプリのリリース時にライブラリまで上げなきゃいけなくて面倒くさそうだから。
手順1. ライブラリを作成
ここではこういう雰囲気↓のライブラリを作り、GitHubのプライベートリポジトリにPushしたことにする。
先に注意点を書いておくと、以後このライブラリを更新してアプリにインストールし直すには、毎度 GitHubに上げる → GitHubでリリースを作成する → Composerでインストールする という手順を踏む必要がある。
なので、「まだパッケージ開発中だけどちょっとインストールして動作確認してみたい」程度のノリで上げるとGitHubのReleasesがすごい勢いで汚くなる。プライベートリポジトリだから気にする必要は無いだろうけど、ちゃんとライブラリ単体でユニットテストできるようにするべき。
手順2. GitHubにリリースを作成
GitHubにライブラリをPushしたら、リリースを作成する。リリースの作り方はGitHub公式にヘルプがある。
ここでは『Tag version』は 1.0.0 を入力した。これがそのまま、Composerでインストールする時のバージョン番号になる。また、リリースを作成すると、リリース対象として選択したブランチの先頭に『Tag version』と同名のタグが作成される。
なお、『Tag version』の先頭には v を付けてもいいらしい。バージョンごとに 1.0.0 とか v1.1.0 とかちぐはぐでも普通に使えたし、バージョンアップも正常に行えた。
手順3. アプリにリポジトリを追加
ここではこういう雰囲気↓のアプリがあるとして……。
このアプリの開発環境にて、以下コマンドを使って composer.json
に repositories
を追加する。
これをすると、このアプリは追加したリポジトリからもパッケージをダウンロードできるようになる。
piyopiyo
は別になんでもいい。無難に ベンダー名/パッケージ名 でいいと思うけど、なんでもいいみたいなのでここでは piyopiyo
って書いた。
また、この作業はコマンド使わないで composer.json
に手動で repositories
を書き加えても大丈夫。Composer公式のマニュアルは以下。
手順4. ComposerにGitHubのアクセストークンを設定
ComposerでGitHubのプライベートリポジトリにアクセスするには、GitHubのアクセストークンが必要になる。
GitHubのアクセストークンの発行方法はGitHub公式のヘルプに書いてあるので、以下の通りに発行してくる。スコープは『repo』をONにすること。
コマンドライン用の個人アクセストークンを作成する - GitHub ヘルプ
アクセストークンを用意したら、アプリの開発環境で以下コマンドを実行する。
するとアプリ内に auth.json
というファイルが作成され、ここにアクセストークンが記録される。auth.json
の中身は以下のようになっている。
これで、このアプリが使用するComposerからプライベートリポジトリにアクセスできるようになった。
補足しておくと…
もしアクセストークンを設定せずに composer require napoporitataso/mylib
した場合、例えば開発環境がWindows10なら、以下のようなメッセージが表示される。
ここで訊かれたとおりにアクセストークンを入力しても、ライブラリをインストールすることはできる。また、この時自動で auth.json
も作成される。
ただしこの時自動で作成してくれる auth.json
の場所は、アプリ内じゃなくて『ユーザーのComposer設定置き場 (※)』の下になる。 つまりアプリのローカル設定じゃなくて、グローバル設定扱いになってしまう。
※ユーザーのComposer設定置き場は、Windows10なら %APPDATA%\Roaming\Composer
、Ubuntu18なら ~/.composer
以下。
よってグローバル設定を汚したくない場合は、上記のコマンドまたは手動で auth.json
ファイルをアプリ以下に作成するのがいいので、ここではそちらを採用した。
とはいえアプリごとに設定するの面倒だし、アプリ内に auth.json
が作成される方がよっぽど汚いし、グローバルに設定したいよという場合は、以下コマンドでグローバルに auth.json
を作成することもできる。(というか普通に調べたら、こっちの方が先に出てきた。)
手順5. アプリにライブラリをインストール
アクセストークンを設定したら、開発環境のアプリで以下コマンド実行して、napoporitataso/mylib
の最新バージョン (1.0.0) をインストールする。
ライブラリをインストールすると、composer.lock
ファイルにインストール時の情報が追記されたり、オートローダーが更新されたりする。
以後、アプリ内で napoporitataso/mylib
のコードを使用できるようになるので、それを使ってアプリを開発する。
手順6. アプリを本番環境にデプロイ
アプリが完成してテストも終わったら、本番環境にデプロイする。
本番環境に composer.json
composer.lock
auth.json
を含むアプリのソースコードをアップロードして、アプリのディレクトリで composer install
するだけでOK。本番環境にも napoporitataso/mylib
がインストールされる。
ライブラリをバージョンアップした場合
ライブラリの方で新しくリリース (1.0.1とか) を作成した場合は、開発環境のアプリで以下コマンド実行し、ライブラリをバージョンアップする。
完了すると、composer.json
composer.lock
が新しいバージョンで更新される。この状態でテストし、大丈夫だったらまた同じように本番環境にデプロイする。