💡
pre-commit時にDockerのPHPCS, PHPMDでクォリティチェック
PHPのインストールはもういやや
PHPの各種クォリティツールを使おうとすると、
どうしてもPHPの実行環境が必要になる。
その度にPHPをインストールするのがちょっと面倒なので、
Docker環境で完結させたい。
更にできればPHPCSとかPHPMDとか単体で用意するのではなく、
まとめて一つのモジュールで使えるようにしたい。
それにあったモジュールが
PHPQA
ヾ(・ω<)ノ" 三三三● ⅱⅲ コロコロ♪
------------------- ↓ 本題はここから ↓-------------------
事前準備
当然DockerやPodmanのような仮想実行環境は用意しておいてほしい。
テストコマンド
docker_on_php7.2
docker run --rm -it ghcr.io/edgedesigncz/phpqa:v1.26.2-php7.2 sh -c "php --version && composer --version && composer outdated --direct --all && phpqa tools"
podman_on_php8.1
podman run --rm -it ghcr.io/edgedesigncz/phpqa:v1.26.2-php8.1 sh -c "php --version && composer --version && composer outdated --direct --all && phpqa tools"
実行コマンド
現在のディレクトリを /app
にマウントしてWORKDIRを/appに。
ユーザーを自身にして各種ツールを実行という流れで
PHPCS
コード標準ファイルを phpcs.xml
とすると
phpcs
podman run --rm -it -u $(id -u) -v $(pwd):/app -w /app ghcr.io/edgedesigncz/phpqa:v1.26.2-php8.1 phpcs --standard=phpcs.xml path/to/abcTest.php
PHPMD
設定ファイルを phpmd.xml
とすると
phpmd
podman run --rm -it -u $(id -u) -v $(pwd):/app -w /app ghcr.io/edgedesigncz/phpqa:v1.26.2-php8.1 phpmd path/to/abcTest.php text phpmd.xml
git pre-commit連動
コードをチェックするコマンドができたので、
gitのpre-commitに登録してコミット直前に実行する形にする。
.git/hook/pre-commit
.git/hook/pre-commit
#!/bin/bash
CURRENT_PWD=$(pwd)
FILES=`git diff-index --cached --name-status HEAD | grep -E '^[AUM].*\.php$' | cut -c3-`
COMMAFILES=`echo $FILES | tr ' ' ,`
echo "phpcs start"
podman run --rm -it -v $CURRENT_PWD:/app -w /app ghcr.io/edgedesigncz/phpqa:v1.26.2-php8.1 phpcs --standard=phpcs.xml $FILES
ret=$?
if [ $ret -ne 0 ]; then
status=$ret
fi
echo "phpmd start"
podman run --rm -it -v $CURRENT_PWD:/app -w /app ghcr.io/edgedesigncz/phpqa:v1.26.2-php8.1 phpmd $COMMAFILES ansi phpmd.xml
ret=$?
if [ $ret -ne 0 ]; then
status=$ret
fi
exit $status
コミットを実行してみると
git commit -m "commit test"
FILE: ...path/to/abcTest.php
----------------------------------------------------------------------
FOUND 1 ERROR AFFECTING 1 LINE
----------------------------------------------------------------------
12 | ERROR | [x] String "aaaa" does not require double quotes; use
| | single quotes instead
| | (Squiz.Strings.DoubleQuoteUsage.NotRequired)
----------------------------------------------------------------------
PHPCBF CAN FIX THE 1 MARKED SNIFF VIOLATIONS AUTOMATICALLY
----------------------------------------------------------------------
FILE: ...path/to/abcTest.php
----------------------------------------------------------------------------------------
17 | VIOLATION | Avoid using short method names like ShortMethod::a(). The configured minimum method name length is 2.
Discussion