こんにちは。
厳しい寒さが続いておりますが、いかがお過ごしでしょうか。
サービス開発チームのすずきです。
みなさんComposerは使っていますか?(何をいまさら)
弊社の英会話システムはPHPで作られており、パッケージの依存管理にはComposerを利用しています。
新しいパッケージを追加したいときは
$ composer require monolog/monolog
みたいな感じでPackagistから取得することが多いと思うのですが、
今回やりたいこととしてはS3バケットに上がっているパッケージを追加し利用できるようにする ことです。
元々は、弊社オンプレのGitlab上に配置されており、以下の様にcomposer.jsonに記載することで利用しておりました。
{ "repositories": [ { "type": "vcs", "url": "git@bitbucket.org:vendor/my-private-repo.git" } ], "require": { "vendor/my-private-repo": "dev-master" } }
上記のサンプルはこちらから拝借🙏
今回は、パッケージをZipしたものがS3にアップロードされている状態で、Composerを利用してパッケージ追加したいと思います。
そのためには自分でpackage
を定義する必要があり、私たちの場合はpackage
に対して、元々パッケージが定義していたcomposer.jsonの内容を記載することで対応しました。
パッケージが定義していたcomposer.json
{ "name": "vendor/my-private-repo", "description": "this is a private package", "type": "library", "require": { "php": "^7.2.0", "ext-json": "*", }, "require-dev": { "phpunit/phpunit": "< 7.2", }, "autoload": { "psr-4": { "Vendor\\Private\\": "src/private" } } }
パッケージを利用する側のcomposer.json
{ "repositories": [ { "type": "package", "package": { "name": "vendor/my-private-repo", "version": "3.1.7", "dist": { "url": "https://path-to-aws-s3-bucket/my-private-repo-v.3.1.7.zip", "type": "zip" }, "require": { "php": "^7.2.0", "ext-json": "*", }, "autoload": { "psr-4": { "Vendor\\Private\\": "src/private" } } } } ], "require": { "vendor/my-private-repo": "3.1.*" } }
パッケージが依存している他のパッケージをrequire
に記載することでComposerが依存関係を解決してくれます。
また、パッケージを利用する側で不要なrequire-dev
は削除しています。
参考
寒い日が続きますが、来週には春の暖かさがくるようです🤗