勉強日記

毎日投稿

はじめてのPHPプロフェッショナル開発 ch13 開発に役立つツール

なぜツールを使うのか

  • 三大美徳が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やエディタと連携する

PHPStan: コード解析ツール

  • 静的解析(Linter)
    • 未定義変数・クラスメンバ
    • 引数・戻り値型の不一致
  • PHPStanは動的な要素もある程度解析できる
  • 【補】これもDockerが使えたりする
    • 公式
    • authloadが絡むので、プロジェクトルートをbind mountする必要あり

使い方

実践的なPHPStanの利用

  • やはりCI上で回すのがよい
  • ignoreErrors
    • どうしても対応できない部分が発生してくる
    • 放置するとオオカミ少年になる
    • 柔軟な警告握りつぶし機能がある
      • 「握りつぶすものがなかったよ」というレポートも出してくれるので、適宜外すのに役立つ
  • extension
    • 文脈依存の解析ができる
    • 例: PHPUnit
      • assertSame(true, $actual)を見つけて
        assertTrue($actual)のほうがいいよ」と教えてくれる