Composerで管理するライブラリ名から、プロジェクト内で依存しているファイルを一覧表示する
概要
PHPのプロジェクトで、Composerで管理しているライブラリをアップデートする際に影響するファイルを確認するためのスクリプトを作りました。
ライブラリアップデート時の動作確認などで、どこを確認したら良いのかなどがパッと把握しやすいので便利です。
Script
- 以下のスクリプトをプロジェクト直下に作成します。
composer.json
が同じディレクトリに存在している事を前提にしているので、構成によっては微調整が必要です。 - 以下に依存しています
git
jq
search_dependenty.sh
#!/bin/sh
if [ "$1" = "" ] ; then
MESSAGE="No package name."
echo "\033[31m$MESSAGE\033[m" && exit 1
fi
# ライブラリのnamespaceを取得。composer.jsonが同じディレクトリにない場合は--working-dirで指定する
KEY=`composer show -f json $1 | jq -r '.autoload[]|keys[0]'`
MESSAGE="List of files that depend on '$1'.\n"
# カラー表示
echo "\033[32m$MESSAGE\033[m"
# ファイル名のみ。特殊な文字列をエスケープしないで検索。
FILES=`git grep -lF $KEY -- ':!*Test.php'`
echo "$FILES\n"
COUNT=`echo "$FILES" | wc -l`
echo "Total Dependent Files:\033[32m${COUNT# }\033[m"
exit 0
使い方
サンプルプロジェクトの構成
以下のような構成で、先ほどのスクリプトを実行してみます。
$ tree
.
├── composer.json
├── composer.lock
├── search_dependenty.sh
├── src
│ └── SampleService
│ └── SampleService.php // guzzlehttp/guzzleに依存するクラス
└── vendor
composer.json
{
"type": "project",
"autoload": {
"psr-4": {
"Sample\\": "src/"
}
},
"require": {
"guzzlehttp/guzzle": "^7.4"
}
}
実行結果
$ ./search_dependenty.sh guzzlehttp/guzzle
List of files that depend on 'guzzlehttp/guzzle'.
src/SampleService/SampleService.php
Total Dependent Files: 1
Author And Source
この問題について(Composerで管理するライブラリ名から、プロジェクト内で依存しているファイルを一覧表示する), 我々は、より多くの情報をここで見つけました https://zenn.dev/tasteck/articles/3a982bb484121c著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Collection and Share based on the CC protocol