Vagrant を使って PHP 開発する場合、synced_folder でフォルダを共有して、ソースコードの編集はホスト PC 、実行は仮想サーバで行っている方が多いと思います。
このスタイルで開発する場合、PHPUnit によるテストの実行は、ターミナルで仮想サーバにログインしてコマンドラインから行うことになります。開発中は頻繁にテストを実行するので、できればエディタからテストを実行したいですよね。
PhpStorm によい機能がないか調べたところ、PHPUnit on Server というズバリの機能がありました。この機能を使うと、ホスト PC の PhpStorm からリモートサーバの PHPUnit を実行できます。
Symfony2 のテストをリモート実行する例を紹介していますが、他のフレームワークにも応用可能かと思います。
2014年9月26日追記
PhpStorm8 からは、SSH 経由での PHPUnit 実行ができるようになりました。本記事より、以下の記事をご覧になったほうが幸せになれます。
Vagrantユーザに朗報!PhpStorm8ではPHPUnitをSSH経由で実行できる
動作確認環境
- Mac OSX Mountain Lion
- PhpStorm7
目次
PHPUnit on Server とは
PHPUnit on Server とは、PhpStorm からリモートサーバ上の PHPUnit を実行する機能です。
以下は、PHPUnit on Server の全体イメージです。
- リモートサーバに _intellij_phpunit_launcher.php をデプロイ
- デプロイしたファイルに http リクエスト
- テスト実行
- PhpStorm で結果表示
テストの実行に http を利用しているので、テストファイルをドキュメントルート上に公開しておくと、いろいろ都合がいいです。
Deployment を設定
Deployment では、仮想サーバに各種ファイルをデプロイする方法を設定します。PHPUnit のランチャや、テストの設定ファイル、テストケースのファイルなどをドキュメントルートにデプロイするために設定が必要です。
デプロイ方法は「FTP」「SFTP」「local or mounted folder」などが選択できます。Vagrant の synced_folder を使っている場合は、「local or mounted folder」を選択すると良いでしょう。
Deployment 新規追加
設定ウィンドウを開き、左メニューから Project Setting > Deployment を選択します。「+」ボタンをクリックして新規追加します。
Add Server を入力します。
- Name は管理しやすい名前を入力
- Type は Local or mounted folder を選択
Connection タブ
Connection タブで、サーバに接続する方法を設定します。
- Folder は ローカル PC の synced_folder のルートを入力
- Web server root URL は Vagrant 仮想マシンの Web アプリケーションの URL を設定
Mappings タブ
Mappings タブで、ローカルフォルダとリモートのフォルダを関連付けます。
- Local path はローカル PC の synced_folder のルートを入力
- Deployment path on server は / を入力(syned_folder 直下にデプロイ)
- Web path on server は / を入力
上記の設定は、synced_folder を Web サーバのドキュメントルートにしている場合の設定となっています。ご自身の環境に応じて調整してください。
PHPUnit on Server を設定
PHPUnit on Server では、デプロイ先と実行するテストケースを設定します。
ここでは例として、Symfony2 Standard Edition に同梱されている AcmeDemoControllerTest.php を実行する設定を紹介します。
PHPUnit on Server 追加
上部メニュー > Run > Edit Configurations を選択します。
左上メニューの「+」ボタンをクリックして、PHPUnit on Server を選択します。
Configurations タブ
Configurations タブでテスト対象を設定します。
- Name は管理しやすい名前を入力
- Server は先ほど追加したデプロイ先サーバを選択
- Test は実行したいテストを設定
- Test Runner options は phpunit コマンドのオプションを設定
Remote タブ
Upload test files before run のチェックをはずします。テストファイルのアップロードを行わなくなるので、テスト実行が少しだけ早くなります。
実は、Upload test files before run にチェックをいれておくと、テストファイルをドキュメントルートに公開していなくてもテストを実行することができます。テストファイルのアップロード分だけテスト実行が遅くなるのと、ドキュメントルートにテスト用のディレクトリが作成されてしまうのであまりおすすめしませんが、テストファイルをドキュメントルートに公開できない場合に検討してみてください。
Symfony2 の場合は phpunit.xml の KERNEL_DIR を設定
Symfony2 の場合は phpunit.xml の KERNEL_DIR を適切に設定する必要があります。
<php>
<server name="KERNEL_DIR" value="/var/www/vagrant/symfony/app/" />
</php>
PHPUnit on Server を実行
ツールバーの三角のボタンを押してテストを実行します。キーボードショートカットからの実行がおすすめです。
テストの実行結果。グリーンが表示されました。
まとめ
PhpStorm からリモートサーバの PHPUnit を実行する方法を紹介しました。エディタからテストを実行できるようにすると、開発リズムが格段にあがります。ぜひお試しください。