0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

mainブランチとの差分のみを対象にlarastanを実行できるようにする

Last updated at Posted at 2024-11-18

解決したい課題

larastanというコードの静的解析をしてくれるとても便利なライブラリがあり日常の開発で重宝している。

しかし、開発規模が大きくなるにつれてコマンド実行に時間がかかるようになってしまった。
必要な箇所を静的解析しつつも、コマンド実行時間を減らしたい!というアプローチをしてみた!

結論

この方法で課題を解決できた!

  1. git diffコマンドを使用し、mainブランチとの差分ファイルを取得。
  2. その中でphpファイルのみ抽出
  3. 対象の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 を使用して静的解析を行うものです。各部分の役割を詳しく解説します。

コマンドの詳細

  1. 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 ブランチと現在のブランチの間で追加、コピー、修正、リネーム、タイプ変更、未マージ、不明、ペアを壊した変更のあったファイル名を取得します。

  2. | grep -E '\.(php)$$':

    • |: パイプ。前のコマンドの出力を次のコマンドに渡す。
    • grep -E '\.(php)$$': grep コマンドを使用して、正規表現に一致するファイル名をフィルタリングします。
      • -E: 拡張正規表現を使用するオプション。
      • '\.(php)$$': .php 拡張子で終わるファイルをマッチさせる正規表現。

    この部分は、変更されたファイルの中から PHP ファイルのみを抽出します。

  3. | xargs ./vendor/bin/phpstan analyse -c phpstan.neon:

    • xargs: 標準入力から引数を構築するコマンド。
    • ./vendor/bin/phpstan analyse: PHPStan を使用して静的解析を行うコマンド。
    • -c phpstan.neon: PHPStan の設定ファイルとして phpstan.neon を使用するオプション。

    この部分は、抽出された PHP ファイルに対して PHPStan を実行し、静的解析を行います。

流れのまとめ

  1. 変更ファイルの取得:

    • git diff --name-only --diff-filter=ACMRTUXB origin/main コマンドで、origin/main ブランチと現在のブランチの間で追加、コピー、修正、リネーム、タイプ変更、未マージ、不明、ペアを壊した変更のあったファイルを取得します。
  2. PHPファイルのフィルタリング:

    • | grep -E '\.(php)$$' コマンドで、変更されたファイルの中から .php 拡張子のファイルのみをフィルタリングします。
  3. PHPStanによる静的解析:

    • | xargs ./vendor/bin/phpstan analyse -c phpstan.neon

まとめ

今後他コマンドでも応用が効きそうな解決方法なので記事を残しておく!
このコマンドのおかげで、ちょっとした業務中のストレスが緩和できたので嬉しみ!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?