なぜツールを使うのか
- 三大美徳が1つ、怠慢
-
再現可能性
- 人間は、昨日の自分のコードが他人の物に見えたりする生き物
-
チームのベースを作る
- 自動で同じことを出来るので、開発フローに組み込むことが容易になる
-
しょうもない悩みに時間を費やさない
- 4スペか8スペかタブか、とか
-
「ルールがあるだけ」は煩わしい
- 人間が自発的に守らないといけないから
-
ルールを遵守することが自動化されると導入しやすくなる
- CIでLintして怒ってくれる、とか
PHP_CodeSniffer: コーディング規約チェックツール
- コード規約チェッカのデファクトスタンダード
-
ルールセットをいろいろカスタムできる
- PSR-2
- Zend
- etc.
-
【補】Dockerが便利
-
環境を汚さない
- PHPSnifferの動作にはPHPが必要
- プロジェクトごとに異なるPHPのバージョンでPHPSnifferを動かせる
-
unix sh
docker container run -i -v $(pwd):/project --rm herloct/phpcs $@
windows bat
docker container run -i -v %CD%:/project --rm herloct/phpcs %*
使い方
- 略
実践的なPHP CSの利用
-
CLIでPHPCSを意識的に実行せずとも、
当たり前にコーディング規約に従ったコードを書けるようにする-
CIに組み込む
- CircleCIとか
- 本書的にはTravisCI
-
IDEやエディタと連携する
- Vim
-
Emacs
- やってます
-
PHPStan: コード解析ツール
-
静的解析(Linter)
- 未定義変数・クラスメンバ
- 引数・戻り値型の不一致
- PHPStanは動的な要素もある程度解析できる
-
【補】これもDockerが使えたりする
- 公式
- authloadが絡むので、プロジェクトルートをbind mountする必要あり
使い方
略
実践的なPHPStanの利用
- やはりCI上で回すのがよい
-
ignoreErrors
-
どうしても対応できない部分が発生してくる
- フレームワークのコードとか
- 放置するとオオカミ少年になる
-
柔軟な警告握りつぶし機能がある
- 「握りつぶすものがなかったよ」というレポートも出してくれるので、適宜外すのに役立つ
-
-
extension
- 文脈依存の解析ができる
-
例: PHPUnit
assertSame(true, $actual)
を見つけて
「assertTrue($actual)
のほうがいいよ」と教えてくれる