これは弁護士ドットコム Advent Calendar 2022 の 18 日目の記事です。
はじめに
筆者は普段の業務では主に PHP でウェブアプリケーションの開発をしていますが、近年は ALPS-ASD を中心に Composer パッケージなどのウェブアプリケーション以外の開発にも取り組む機会が増えました。
パッケージ開発とウェブアプリケーション開発で大きく異なる点として、ブラウザが必要という点が挙げられます。
フレームワークとユーザコードの境界になるコントローラやハンドラに実装されたコードを実行するには、テストがない場合は HTTP リクエストが必要です。
この場合、ブラウザと IDE の操作を切り替える必要があり、非常に効率が悪いです。
本記事では、筆者が実践しているPhpStormとテストコードを中心としたブラウザ不要なウェブアプリケーション開発スタイルについて紹介します。
前提
以下のツールを前提とします。
- PhpStorm
- PHPUnit
- Xdebug
PhpStormでテストを実行・デバッグする
開発スタイルとは言ってもやることはシンプルで、 PhpStorm でテストを実行・デバッグするだけです。
PhpStorm を使うことでテストの実行とデバッグをスムーズに行えます。
テストのデバッグ実行は非常に便利です。
Laravel や Symfony といったフレームワークは HTTP リクエストを再現するようなテストをサポートしているので、
コントローラにブレークポイントを設定してステップ実行すれば特定のリクエストに対しての処理を追うことができます。
これができると、ウェブアプリケーションの開発においてもブラウザを利用する機会を減らすことができるので、開発効率が上がります。
フレームワークが HTTP リクエストを再現するようなテストをサポートしていない場合も Codeception の FunctionalTests を使うか、コントローラのインスタンス生成ができれば、同様のことが可能です。
フレームワークでコントローラのテストを書かない(書けない)ケースはそれなりにあると思いますが、ユニットテストを書かないからといって、コンストラクタでデータベースにアクセスするような副作用を実行しないように注意しましょう。
PhpStorm で Xdebug を利用するにあたって便利な機能
ここからは PhpStorm で Xdebug を利用するにあたって便利な機能を紹介します。
オンデマンドでXdebugを有効にする
この設定によってデバッグ実行時のみ Xdebug を有効にできるので、通常のテスト実行も高速になります。
Interpreter の Configuration options を活用する
PhpStorm の Interpreter の Configuration options
には様々な設定を追加できます。
筆者は Xdebug の設定や assert の有効化などをここで設定しています。 php.ini
はグローバルな設定でプロジェクト毎に制御するのが難しいのでここで設定できるのが非常に便利です。
普段業務で使っている Docker 環境の例のものが以下です。
おわりに
本記事では、筆者が実践している PhpStorm とテストコードを中心としたブラウザ不要なウェブアプリケーション開発スタイルとして、 PhpStorm でテストを実行・デバッグする方法を紹介しました。
このスタイルを身につけてからは、以前と比較してアウトプットのスピードも向上したことに加え、初見のコードを理解するスピードやバグに対応するスピードも向上しました。
TDD との親和性も高く、Red テストを Green にする過程でテストのデバッグ実行は有効です。
VSCode などの他の IDE や他の言語でも同様のことが可能であると思うので是非試してみてください。