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)
解説
-
find . -name composer.json
で、カレントディレクトリ(.
)以下からファイル名composert.json
を探します。 -
find
コマンドのオプション-exec
によって、検索結果のパスが入った変数(?){}
が1行ずつ展開され、dirname
コマンドで composer.json ファイルが入っているディレクトリへのパスが取得されます。 -
dirname
コマンドの結果で得られたディレクトリへcd
します。 -
find
コマンドの-exec
オプションは、\;
をつけることで、次の-exec
オプションに継続させることができるので、cd
した先のディレクトリでcomposer install
を実行します。 -
find
で発見したファイルのあるディレクトリすべてでcomposer install
が実行されます。
※composer install
は composer i
と略記できるので、可読性が気にならない場合は略記することが可能です。
おわりに
fuelPHP を使っているプロジェクトに参加しているのですが、仮想環境にプログラムを展開したとき、ソースの各地に散らばる composer.json を蹴って回るのがめんどくさいので全力で手を抜くために頑張りました。
Laravel などでも同じことが利用できるかもしれません。お役に立てれば幸甚です。