はじめに
PHPプロジェクトで導入すると便利そうなツールをまとめてみました。
自動テスト
PHPUnit
PHPでの単体テストと言えばPHPUnitが最も有名かと思います。
やり方についてはググればいくらでもでてきますので、ここでは個人的所感を書いていきます。
手動テストが不要になるわけではない
自動テストを頑張って書いていればある程度の動作保証にはなると思いますが、それによって手動テストが完全に必要なくなるかと言われればそうはならないと思っています。
ただ凡ミスは防げる
リファクタリング時にテストを実施した際に「あ、やべここ壊れれてた。危ない危ない。」というのは何回かありました。
複雑なパターンの検証には便利
少しずつ条件を変えてテストしなければならない箇所には、自動テストがかなり力を発揮してくれるかと思います。
テスタビリティの高いコードはいいコード
これが大きいメリットかなと個人的には思っています。
魔のメソッドを生み出してしまった際これどうやってテストコードに落とし込むの?と自問自答してしまうことがありました。
単一責任の原則から乖離したメソッドは、テストがしづらいです。逆に言うとテスタビリティの高いコードというのは責務が明確になっています。これは仕様変更などの際に影響範囲が明確になり、対応が行いやすくなります。
自動テストは手動テストの代替手段とだけ考えていましたが、実際には設計にも役立ちました。
また、カバレッジレポートの出力を行えばデッドコードや不要な引数などもひと目でわかるようになりますので、コードの品質維持にもつながっていきます。
デバッグ手法
XDebug
「XDebug」は、PHPのデバッグ用の拡張モジュールになります。
プロファイリングツールとして処理が遅い部分を突き止めてくれたりもするらしいですが、私はバグ調査時などに重宝しています。
ステップ実行は神です。延々と変数をログに吐き出していた頃が懐かしいです。教えてくれたチームメンバーありがとう。
PHPで開発する際は必須なツールかと思います。私はもう手放せません。
ボトルネック調査(プロファイリング)
Blackfire
実効効率を改善する場合に用いられるプロファイリングツールです。
私自身まだ使ったことはないのですが、PHPでのプロファイリングツールで調べるとXDebugとBlackfireの記事がよくでてきたので、機会があれば使ってみたいと思います。
バグの事前検知
phpmd
PHPの静的解析ツールになります。
潜在的なバグになりそうな部分や実装上の問題を検出してくれるツールです。
マニュアルの自動生成
PHPDocumentor
PHPDocやタイプヒンティングが書いてあるコードであればそれを元に自動でドキュメントを生成してくれるツールです。
生成されたドキュメントよりも、これがあることにより、PHPDocなどが適切に書かれることになりチーム開発での品質維持に繋がりそうだなと思いました。個人でやるというよりは、チームとして取り決めて使っていく方がよさそうです。
まとめ
エンジニアなりたての頃(まだペーペーですが)はとりあえず動けばよしという感じだったのですが、運用や保守を経験していくうちに過去の自分に苦しめられることが何度もありました。そして今の自分も未来の誰かを苦しめる可能性が常に存在しています。その可能性を少しでも減らすために、ツールの力も借りつつテスタビリティが高いコードを書いたり、ドキュメントを残したりとできることはやっていかなければならないなと思っています。
また、バグ調査時などもツールを駆使して早期解決に役立てたいなと思いました。