はじめに
自作していたライブラリを
”GitHubとComposerを使ってダウンロードできるようにしておけばカッコいいし便利そう”
と思って
”Composerって依存関係をJSONで書いておけば簡単にダウンロードできるんだったよねー”
ってくらいの気持ちでComposerの初心者がやろうとした結果かなりハマってしまったので(色んな意味で)メモを残しておきます。
また、ハマりポイント(自分の場合ですが)を補足として入れておいたので参考になればと思います。
以下では ”ライブラリ公開側の設定” と ”ライブラリ利用側の設定” に分けて話を進めます。
本記事ではPackagistへの登録をしなくても可能な方法をご紹介しています。
環境
- プラットフォーム
- Windows10
- Composer
- v2.6.5
- Git
- v2.31.1
下準備
Composerを使う前にPHP環境を入れておく必要があります。
自分の場合はXamppを使っているので下記サイトを参考にしました。
Composerのインストール方法も掲載されています。
クライアントサイドで使用するためのGitもインストールしておく必要があります。
個人的にはコマンド派なので下記のサイトを参考にしました。
Gitが使えるようになったらGitHubにアカウント登録しておく必要があります。
ライブラリ公開側の設定
composer.jsonを作る
ライブラリを置きたいフォルダdev-test(例)
に移動してからコマンドラインで初期設定を行います。
composer init
を使えばjsonファイルをよしなに作ってくれます。
> composer init
[jsonファイルの作成開始]
実行するとLinuxアプリをインストールする時のように対話形式で聞いてきてくれます。
> Package name (<vendor>/<name>) [vendor-example/dev-test]:
[パッケージ名の設定]
[]内のデフォルトのままでいいのでそのままリターン。
ハマりポイント①
composerはパッケージ名を元に検索しているので、ここを間違えるとそもそも認識してくれません。使う側の事を意識してわかり易い名前にしておきましょう。
パッケージ名はベンダー名(=GitHubユーザー名)/リポジトリ名
の構成になります。
例えばGitHubユーザー名がuser
でリポジトリ名がdev-repo
の場合はuser/dev-repo
と書き替えてください。
> Description []:vendor-example sample
[パッケージ説明文の設定]
今回はvendor-example sample
と入力。
> Author [vendor-example <vendor-example@example.com>, n to skip]:
[著者の情報設定]
デフォルトのままでいいのでリターン。
> Minimum Stability []:dev
[安定性の設定]
dev
やstable
等
開発中のライブラリなのでdev
と入力。
> Package Type (e.g. library, project, metapackage, composer-plugin) []:library
[パッケージタイプの設定]
ライブラリなのでlibrary
と入力。
> License []:MIT
[ライセンスタイプの設定]
一番規制が緩そうなMIT
を入力。
MIT
ライセンスについて詳しく知りたい方は下記ブログが参考になると思います。
> Would you like to define your dependencies (require) interactively [yes]?no
[依存モジュールの設定]
必要ないのでno
を入力。
> Would you like to define your dev dependencies (require-dev) interactively [yes]? no
[開発用の依存モジュールの設定]
こちらも必要ないのでno
を入力。
> Add PSR-4 autoload mapping? Maps namespace "VendorExample\DevTest" to the entered relative path. [src/, n to skip]:
[ソース配置の相対位置の設定](今回は
VendorExample\DevTest
からの相対位置)
デフォルトのままでいいのでそのままリターン。
{
"name": "vendor-example/dev-test",
"description": "vendor-example sample",
"type": "library",
"license": "MIT",
"autoload": {
"psr-4": {
"VendorExample\\DevTest\\": "src/"
}
},
"authors": [
{
"name": "author-example",
"email": "author-example@example.jp"
}
],
"minimum-stability": "dev",
"require": {}
}
> Do you confirm generation [yes]?
[最終確認]
そのままで問題ないのでリターン。
同フォルダに上記で入力した内容がcomposer.json
に生成されているはずです。
そして下記のsrc
フォルダとvendor
フォルダも同時に生成されます。
以上で初回のcomposer.json
の作成は完了です。
GitHubのリポジトリを初期化する
下記日本語サイトでリポジトリを作成する手順が書かれています。
リポジトリ作成時にオプションを選択すればREADMEやLICENSEのファイルも作成してくれるので作っておいた方がいいでしょう。
READMEの内容は何でも構いませんがLICENSEファイルは選択したライセンスの種類によって内容を書き替えてくれるので便利です。
リポジトリの作成が終わったら下記コマンドを実行してGitを使えるようにします。
> git init
gitを初期化してコマンドが使えるようにします。
> git config --local user.name vendor-example
gitのユーザー名を設定する。
> git config --local user.email vendor-example@example.com
ユーザーのEMailを設定する。
git config
系のコマンドは設定しなくても動作しますが、大人数による開発ではコミット時の履歴に設定したユーザー名がちゃんと残るので、後になって修正した内容を誰に聞けばいいのかわからないといった状況は防げるでしょう。
> git branch -M main
メインブランチを
main
にします。
> git remote add origin https://github.com/vendor-example/dev-test.git
リモートリポジトリを設定します。
(URLはGitHubのリポジトリのページからコピーできます)
> git pull origin main
リモートリポジトリから最新のソースをプルします。
> git add composer.json
先ほど作成したcomposer.jsonをcommitエントリに加えます。
> git commit -m "first commit"
first commit
というコメントで最初のコミットを実行します。
> git push -u origin main
リモートリポジトリへコミットをプッシュします。
これで ”ライブラリ公開側の設定” は完了です。
ライブラリ利用側の設定
composer.jsonを作る
ライブラリを利用したいフォルダuse-test(例)
に移動してからコマンドラインで初期設定を行います。
> composer init
”ライブラリ公開側の設定” で行った操作と同じ要領で進めます。
> Package name (<vendor>/<name>) [use-example/use-test]:
> Description []:use library
> Author [use-example <use-example@example.com>, n to skip]:
> Minimum Stability []:dev
> Package Type (e.g. library, project, metapackage, composer-plugin) []:project
> License []:MIT
> Would you like to define your dependencies (require) interactively [yes]?no
> Would you like to define your dev dependencies (require-dev) interactively [yes]? no
> Add PSR-4 autoload mapping? Maps namespace "UseExample\UseTest" to the entered relative path. [src/, n to skip]:
対話形式の設問に全て答えてcomposer.jsonを作成します。
> composer config repositories.vendor-example/dev-test vcs https://github.com/vendor-example/dev-test.git
ダウンロードしたいパッケージのリポジトリを設定します。
repositories
の後ろのvendor-example/dev-test
はパッケージ名になります。
ハマりポイント②
この時パッケージ名vendor-example/dev-test
の部分を間違えないようにしないと認識してくれませんので注意が必要です。
> composer require vendor-example/dev-test:dev-main
パッケージをダウンロード(
composer install
でも可能です)。
vendor-example/dev-test
の部分はcomposer.json内repositories
項目のパッケージ名になります。
dev-main
はmainブランチの事を表していて同ブランチ内の最新をとってきてくれます。
ここまで実行すると下記のようなファイルが出来上がります。
{
"name": "use-example/use-test",
"description": "use library",
"type": "project",
"license": "MIT",
"autoload": {
"psr-4": {
"UseExample\\UseTest\\": "src/"
}
},
"authors": [
{
"name": "use-example",
"email": "use-example@example.com"
}
],
"minimum-stability": "dev",
"require": {
"vendor-example/dev-test": "dev-main"
},
"repositories": {
"vendor-example/dev-test": {
"type": "vcs",
"url": "https://github.com/vendor-example/dev-test.git"
}
}
}
composer config
を実行するためにはあらかじめcomposer.jsonを作っておく必要があるので、今回はcomposer init
でファイルを1から作りましたが他のファイルを複製して持ってきても構いません。
極端に言えば必要な部分はrepositories
の項目だけなので他の項目はなくても動作します。
ダウンロードが完了すれば下記のようにvendor/vendor-example/dev-test/src
配下(vendor/パッケージ名/src
の形式)にライブラリが設置されます。
あとはライブラリ修正⇒コミット⇒プッシュするたびに、使う側で
> composer require vendor-example/dev-test:dev-main
を実行すると最新のソースがダウンロードされます。
バージョンを発行する
v1.0.0
などの形式でバージョンを指定してダウンロードする方法です。
ライブラリ公開側で最新のソースをプッシュした後はGitHub上でバージョンをつけましょう。
Create a new release
というリンクをクリック
リリース内容の編集画面が開きます
Choose a tag
というプルダウンをクリックしてバージョンを入力してから+ Create new tag
をクリック
タイトルと説明文を入力してから
Publish release
ボタンをクリック
あとは下記のようにv0.0.0
というバージョンを指定してコマンドを実行するとバージョンに対応した内容がダウンロードできます。
> composer require vendor-example/dev-test:v0.0.0
下記のようにgitコマンドでタグを付けてからバージョン名でプッシュする方法もあります。
> git tag v0.0.0
> git push origin v0.0.0
この場合は別のブランチ名でプッシュする事になるのでdev-main
でダウンロードしようとしても最新のソースは取得できなくなるので注意が必要です。
まとめ
素人考えですがComposerの存在は知っていたけど公開側にもcomposer.jsonが必要だという事を知らなかったので最初はかなり苦労しました。
調べていくうちにGitHubにも多くの機能やサービスの提供がある事にも改めて驚かされました。
というわけで今回のまとめは次の通り。
・composer.jsonはソースの公開者側にも利用者側にも必要だよ
・バージョン管理(v1.0.0などの指定でダウンロード可能)も容易にできるよ
・Packagistへ登録しなくても使えるよ