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

DockerPHP勉強メモ開発環境

なぜツールを使うのか

  • 三大美徳が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)のほうがいいよ」と教えてくれる