出発点:コード汚すぎ問題を解決したい
したい(したい)。ツールに頼れるとこは頼りたい。
解決策
- PHPのコーディング規約を強制的にPSR-2基準にしたい。
- PHP-CS-Fixerを使ってコード整形をしよう!
- 複雑すぎるコードを事前に見つけたい。
- PHPMDを使って循環的複雑度が高すぎないかとか検査しよう!
phpmdやphp-cs-fixerなどのツールをcomposerでグローバルにインストールしてやって、手動で毎回コードチェックのコマンドを叩けば問題をクリアできます。
composer global require "fabpot/php-cs-fixer"
composer global require "phpmd/phpmd"
コミット前にphp-cs-fixer
とか打つのめんどいし忘れる
ツールを手動でかけるだけだと↑のような問題が起きます。自動化したい。する。
具体的にはGitのpre-commitというコミット時のフックを利用します。
自動化の手順
以下のmanatenさんの記事を参考に導入します。
GitHub Desktopとかつかいたくない?
ここまでで殆どの人は満足できる結果になるかもしれません。manatenさんありがとうございます。
わたしの運用だと以下の問題がおきたので、これを解決していきます。
-
git add -p
が意味を成さない - GitHub Desktopが使えなくなる
これらの点を反映したスクリプトはGistで公開しています。PHPMDのルールは公式ページのリファレンスを見ながら適宜変更してください。
1を解決:git add -p
を使えるようにpre-commitを改変する
上のエントリで紹介されているpre-commitのスクリプトは、php-cs-fixerをかけた後に自動的にgit add
されるので便利です。しかし、git add -p
でコミットを切り分けることができなくなるのでこのコマンドを使う場合には不便です。なので、以下の要件を満たすように一部変更します。
- php-cs-fixerで修正が必要だった場合、コードの修正を自動で行うが
git add
を自動的には行わずにコミットを中断する
副作用(利用上の注意)
- コミットにフックしたphp-cs-fixerでコードが修正されてコミットが中断された場合、手動で
git add
しないと、当該コミットにphp-cs-fixerで修正されたものが入らない。 - 後述のGitHub Desktopを使うと自動でaddされるので不便さはありません。
2を解決: GitHub Desktop1を使えるようにする
ここまで設定した状態でGitHub Desktopを使うと、phpmd
やらのコマンドが見つからないというエラーになります。Stack Overflowに同じ問題を解決している方がいました2。
デフォルトでは~/.composer/vendor/bin
に配置されているので、このpathをpre-commitの先頭に書き込みます。これでGitHub Desktopがそのコマンドを利用することができます。
PATH=$PATH:/Users/YOUR_NAME/.composer/vendor/bin/
-
GitHub DesktopはGUI上で
git add -p
ができたりする便利ソフト。GitHub謹製。 ↩ -
Git pre-commit hook failing in GitHub for mac (works on command line) - Stack Overflow ↩