More Related Content
Similar to Composer bin plugin / ツールの依存管理から解放される (20)
Composer bin plugin / ツールの依存管理から解放される
- 2. Composer bin pluginとは?
• composerでインストール
するツールを独立して管
理するプラグイン
• 実行ファイルは引き続き
vendor/bin/に設置される
• php-5.5.9より利用可能
https://github.com/bamarni/composer-bin-plugin
- 4. 依存関係競合とは
1. phpunit-watcherをインストール
2. php-cs-fixerをインストール
インストール成功
1. php-cs-fixerをインストール
2. phpunit-watcherをインストール
インストール失敗
「spatie/phpunit-watcher version Xはyosymfony/resource-watcher version Yを必要と
している。 yosymfony/resource-watcher version Yはsymfony/finder version Zを必要と
している。しかしsymfony/finderは既にVersion Aがインストールされているため依存を
解決できずインストール失敗」
…と、全バージョンの組み合わせで書いてある。
解決方法
• エラーメッセージや既存パッケージの依存関係を調べる。
• インストールしようとしているパッケージと競合しない既存パッケージのバージョン
を特定する。
• 既存パッケージのバージョンを変更した後、目的のパッケージをインストール
※2022年6月時点の実行結果
- 8. 従来の解決策
• グローバルインストール
composer global require awesome/tool
• ✕ バージョン管理不可(メンバー間のバージョン差異)
• ✕ Docker環境としての配布が困難
• △ 環境構築がひと手間増える
• 専用フォルダにローカルインストール
composer --working-dir=path/to/tool awesome/tool
※php-cs-fixerはこの方法を推奨している
• ○ バージョン管理可能
• ○ Docker環境としての配布が可能
• △ 環境構築がひと手間増える
• △ 標準外フォルダよりツール起動(プロジェクト固有知識)
- 9. Composer bin plugin
• ○ 本体とツールとを分離して管理
• ○ バージョン管理可能
• ○ Docker環境としての配布が可能
• ○ 環境構築の手間は変わらない
• ○ 標準フォルダよりツール起動可能
- 14. まとめ
課題
1. Composerは依存関係の競合が発生することがある。
2. 単体で動作するツールは独立して管理すべき。
3. Composer標準の方法にはデメリットある。
解決
• Composer bin pluginの導入
• 依存関係の競合は発生しない
• ツールの起動は従来と変わらない
• 環境構築は自動化可能
• 利用者はプラグインの存在を意識しなくて良い
参考資料
• このPHPがテンプレートエンジンのくせに慎重すぎる
(前篇) / @tadsan
• Composer bin plugin — Isolate your bin dependencies
• Vendor binaries and the vendor/bin directory -
Composer
• Scripts - Composer