PHPのパッケージ管理システムであるComposerを使うと、公開されているパッケージを利用できます。収集したパッケージはvenderディレクトリへ保存します。
通常はPackagistから取得しますが、自作したパッケージをPackagistへ公開することなく別プロジェクトに取り込みたいので方法を考えました。
全体の流れ
今回は、fuga_parentプロジェクトへfuga_childプロジェクトをライブラリとして取り込むことにします。
開発用マシンにfuga_parentプロジェクトとfuga_childプロジェクトを作成します。
fuga_childプロジェクトはサーバに設けるリモートリポジトリと連携できるようにし、使用するブランチはdevelopとします。リポジトリの作成方法は、本サイトのGitのページなどを参考にしてください。
fuga_parentプロジェクトへfuga_childの内容を取り込みには、composerを利用します。
サーバへの接続はsshとし、接続先は以下とします。
hoge@192.168.1.202:/home/hoge/git/bare/php/fuga_child.git
composerの初期化
fuga_parentプロジェクトとfuga_childプロジェクトに、それぞれcomposerの初期化を行います。
初期化するプロジェクトをカレントディレクトリにして、以下のコマンドを実行します。
コマンドを実行すると、対話的に設定値を聞いてきます。
名前は「提供者/パッケージ名」の書式で書きます。文字には小文字とハイフン(-)、ドット(.)、アンダーバー(_)を使用することが決まりのようです。
パッケージ名は、リポジトリ名と同じでなくてもうまくいきました。
typeは、親は”project”、子は”library”としました。libraryとすることで、呼び込んだ際にvendorに配置されます。
“library”がデフォルトですが、明記しておくと見たときに分かりやすいので書いておきます。
composer init
今回は、以下の内容で作成しました。
{
"name": "hoge/fuga-parent",
"type": "project",
"autoload": {
"psr-4": {
"Hoge\\FugaParent\\": "src/"
}
},
"authors": [
{
"name": "hoge",
"email": "hoge@example.test"
}
],
"require": {}
}
{
"name": "hoge/fuga-child",
"type": "library",
"autoload": {
"psr-4": {
"Hoge\\FugaChild\\": "src/"
}
},
"authors": [
{
"name": "hoge",
"email": "hoge@example.test"
}
],
"require": {}
}
子のcomposer.jsonをリモートリポジトリへプッシュします。このとき、親に取り込ませるファイルもコミットします。今回は、src/File.phpを対象にします。
gitのタグ付け
composerは、バージョン判定をgitのタグで行うようです。タグを付けないと「dev-ブランチ名」を探すようです(今回であれば、dev-develop
)。
ここでは、コミットした履歴に「1.0.0」とタグを付けます。コマンドは、以下の書式です。
git tag -a タグ -m 'コメント' コミット
ここでは、以下の様に付けました。コミット部分は、タグ付けしたいコミットのハッシュ値です。下のように短く書くか、長いf139c6da53cacb02cb72a10141f5e9ab162c7f0cのどちらでも良いようです。
git tag -a 1.0.0 -m 'コメント' f139c6d
取り込み設定
子のパッケージを取り込むように、親のcomposer.jsonにnameと同レベルで以下を追加します。
"repositories": [
{
"type": "vcs",
"url": "hoge@192.168.1.202:/home/hoge/git/bare/php/fuga_child.git",
"options": {
"symlink": true
}
}
],
"require": {
"hoge/fuga-child": "^1.0.0"
},
ssh用公開鍵作成
上記の記述では、sshを公開鍵認証で接続するようなので、サーバとの通信用に公開鍵を作成します。
-tには、公開鍵作成で使用する暗号を指定します。今回は、エドワーズ曲線デジタル署名アルゴリズムを指定しました。
-Cには、コメントを指定します。今回のケースではしなくても良いのですが、付けておくと誰がどのマシンを使用しているかわかりやすくなります。(付けないと自動で何か付くようです。)
ssh-keygen -t ed25519 -C "hoge@example.test"
上記のコマンドを実行すると、~/.sshにid_ed25519(秘密鍵)、id_ed25519.pub(公開鍵)が生成されます。公開鍵の内容をサーバのauthorized_keysの中に追加します。
以下のコマンドを実行して、接続できれば成功です。
ssh hoge@192.168.1.202
composer update
親のcomposerを更新します。コマンドは、以下の通りです。
composer update
親のプロジェクトのvendorにhogeが、その中にfuga-childが追加されていれば成功です。
コメント