LoginSignup
0
0

More than 1 year has passed since last update.

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

Posted at

実現したいこと

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
を参考に少し記述を変更しましたら正しく色付きのメッセージが表示されました!(マジ感謝!!)

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