Edited at

フレームワーク内にちりばめられた composer を実行して回るワンライナー【Linux, composer, php】


TL;DR


カレントディレクトリ以下のcomposer.jsonを探してcomposerを実行するワンライナー

find . -name composer.json -exec cd `dirname {}` \; -exec composer install \;



検証環境

ホストOS: Windows10

ゲストOS: CentOS Linux releaase 7.6 1810 (Core)

VituralBox: 5.2.28

Vagrant: 2.2.0

apache2(httpd): 2.4.6 (CentOS)

PHP: 5.6.38

Composer: 1.9.0

bash: 4.2.46(2)


解説



  1. find . -name composer.json で、カレントディレクトリ(.)以下からファイル名composert.jsonを探します。


  2. find コマンドのオプション -exec によって、検索結果のパスが入った変数(?) {} が1行ずつ展開され、dirnameコマンドで composer.json ファイルが入っているディレクトリへのパスが取得されます。


  3. dirnameコマンドの結果で得られたディレクトリへ cd します。


  4. find コマンドの -exec オプションは、\; をつけることで、次の -exec オプションに継続させることができるので、cd した先のディレクトリで composer install を実行します。


  5. find で発見したファイルのあるディレクトリすべてで composer install が実行されます。

composer installcomposer i と略記できるので、可読性が気にならない場合は略記することが可能です。


おわりに

fuelPHP を使っているプロジェクトに参加しているのですが、仮想環境にプログラムを展開したとき、ソースの各地に散らばる composer.json を蹴って回るのがめんどくさいので全力で手を抜くために頑張りました。

Laravel などでも同じことが利用できるかもしれません。お役に立てれば幸甚です。