LoginSignup
0

posted at

PHPのコード整形と静的解析をpre-commitでコミット時に自動で実行したい

実現したいこと

Gitのpre-commitフックを使って、コミット時にPHPファイルのコード整形と静的解析が実行されるようにしたい。

問題点

commit時にpre-commitに登録したスクリプトは動き、コード整形はされるがコミットができない。
途中でエラーが発生している。

参考にしたサイト

必要なパッケージ

修正したpre-commitのスクリプト

#!/bin/bash                  
                             
if git rev-parse --verify HEAD >/dev/null 2>&1
then                         
    against=HEAD             
else                         
    # Initial commit: diff against an empty tree object
    against=4b825dc642cb6eb9a060e54bf8d69288fbee4904
fi                           
# Redirect output to stderr.
exec 1>&2                    
SYNTAX_CHECK=0               
## 静的解析、及びフォーマッターの実行
# コミットされるファイルのうち、.phpで終わるもの
for FILE in `git diff-index --name-status $against -- | grep -E '^[AUM].*\.php$'| cut -c3-`; do
    # シンタックスのチェック
    if php -l $FILE; then 
        # PSR準拠でコード書き換え
        ./vendor/bin/php-cs-fixer fix $FILE
        git add $FILE        
        # PHPMDで未使用変数などのチェック
        if ! ./vendor/bin/phpmd $FILE text ruleset.xml; then
            SYNTAX_CHECK=1
        fi                   
    else                     
        SYNTAX_CHECK=1       
    fi                       
done                         
                             
                             
## 最後の確認                
if [ $SYNTAX_CHECK -eq 0 ]; then                                                                      
    exit 0                   
else                         
    echo -e $'\e[31;43m 修正を行った上で再度コミットしてください \e[m'
    exit 1                   
fi

参考にしたサイト↓のままではエラーが発生していたので、後述の2行について修正を加えました。
https://zenn.dev/takuyanagai0213/articles/2685fe51f7afe5

32行目のif [ $SYNTAX_CHECK -eq 0 ]; then
35行目のecho -e $'\e[31;43m 修正を行った上で再度コミットしてください \e[m'

32行目はもともとはif [ $SYNTAX_CHECK -eq 0 -a $IS_ERROR -eq 0 ]; thenとなっていました。IS_ERRORも参照しているが、スクリプト中では設定されていない変数なので、そこで落ちていたようです。(違っていたら教えてください!)

35行目については色をつけてメッセージを表示する箇所ですが、なぜか色がつかなかったので、
https://qiita.com/Sho2010@github/items/eae44da09aa279e7e598
を参考に少し記述を変更しましたら正しく色付きのメッセージが表示されました!(マジ感謝!!)

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
What you can do with signing up
0