解決したい課題
larastanというコードの静的解析をしてくれるとても便利なライブラリがあり日常の開発で重宝している。
しかし、開発規模が大きくなるにつれてコマンド実行に時間がかかるようになってしまった。
必要な箇所を静的解析しつつも、コマンド実行時間を減らしたい!というアプローチをしてみた!
結論
この方法で課題を解決できた!
- git diffコマンドを使用し、mainブランチとの差分ファイルを取得。
- その中でphpファイルのみ抽出
- 対象のphpファイルのみ、静的解析
git diff --name-only --diff-filter=ACMRTUXB origin/main | grep -E '\.(php)$$' | xargs ./vendor/bin/phpstan analyse -c phpstan.neon
詳しい解説
gpt-4oに解説してもらった!
このコマンドは、Git リポジトリの origin/main ブランチと現在のブランチの間で変更された PHP ファイルに対して、PHPStan を使用して静的解析を行うものです。各部分の役割を詳しく解説します。
コマンドの詳細
-
git diff --name-only --diff-filter=ACMRTUXB origin/main:-
git diff: Git リポジトリ内の変更を表示するコマンド。 -
--name-only: 変更されたファイル名のみを表示するオプション。 -
--diff-filter=ACMRTUXB: 特定の種類の変更に限定するフィルター。-
A: 追加されたファイル。 -
C: コピーされたファイル。 -
M: 修正されたファイル。 -
R: リネームされたファイル。 -
T: タイプ変更されたファイル。 -
U: 未マージのファイル。 -
X: 不明なファイル。 -
B: ペアを壊したファイル。
-
-
origin/main: リモートブランチorigin/main。
この部分は、
origin/mainブランチと現在のブランチの間で追加、コピー、修正、リネーム、タイプ変更、未マージ、不明、ペアを壊した変更のあったファイル名を取得します。 -
-
| grep -E '\.(php)$$':-
|: パイプ。前のコマンドの出力を次のコマンドに渡す。 -
grep -E '\.(php)$$':grepコマンドを使用して、正規表現に一致するファイル名をフィルタリングします。-
-E: 拡張正規表現を使用するオプション。 -
'\.(php)$$':.php拡張子で終わるファイルをマッチさせる正規表現。
-
この部分は、変更されたファイルの中から PHP ファイルのみを抽出します。
-
-
| xargs ./vendor/bin/phpstan analyse -c phpstan.neon:-
xargs: 標準入力から引数を構築するコマンド。 -
./vendor/bin/phpstan analyse: PHPStan を使用して静的解析を行うコマンド。 -
-c phpstan.neon: PHPStan の設定ファイルとしてphpstan.neonを使用するオプション。
この部分は、抽出された PHP ファイルに対して PHPStan を実行し、静的解析を行います。
-
流れのまとめ
-
変更ファイルの取得:
-
git diff --name-only --diff-filter=ACMRTUXB origin/mainコマンドで、origin/mainブランチと現在のブランチの間で追加、コピー、修正、リネーム、タイプ変更、未マージ、不明、ペアを壊した変更のあったファイルを取得します。
-
-
PHPファイルのフィルタリング:
-
| grep -E '\.(php)$$'コマンドで、変更されたファイルの中から.php拡張子のファイルのみをフィルタリングします。
-
-
PHPStanによる静的解析:
| xargs ./vendor/bin/phpstan analyse -c phpstan.neon
まとめ
今後他コマンドでも応用が効きそうな解決方法なので記事を残しておく!
このコマンドのおかげで、ちょっとした業務中のストレスが緩和できたので嬉しみ!