- 2013-12-14 (土) 18:40
- Advent Calendar 2013 | PHP
Shin x blog Advent Calendar 2013 の 14 日目です。
PHP の高速な実行環境として知られる HHVM の新しいバージョン 2.3.0 がリリースされました。
今回のリリースでは、オープンソースプロジェクトの CI サービスとして人気の Travis CI へのサポートが発表されました。以前から Travis CI では、PHP 5.2 から PHP 5.5 の実行環境がサポートされていたのですが、ここに HHVM 環境が新たに加わることになります。
さっそく、Travis CI の HHVM 環境を試してみました。
Travis CI の設定
Travis CI 上で HHVM 環境でのテストを行う設定は簡単です。.travis.yml の php:
に hhvm
を追加するだけです。
php: - hhvm
これで、次回のテストから hhvm 環境で実行されます。
Travis CI の HHVM 環境でテスト
簡単な PHP プロジェクトをテストしてみます。ソースコードは下記になります。
ここでは足し算を行う TravisCISample\Calculator
クラスを作り、そのテストを PHPUnit で書きました。ローカルで phpunit を実行するとテストが通ります。
$ ./vendor/bin/phpunit --colors test PHPUnit 3.7.28 by Sebastian Bergmann. . Time: 23 ms, Memory: 2.25Mb OK (1 test, 1 assertion)
Travis CI の設定を .travis.yml に書きました。PHP 5.3 から 5.5、そして HHVM を実行環境として設定しています。
language: php php: - 5.3 - 5.4 - 5.5 - hhvm before_install: - composer install script: - phpunit --colors --coverage-text test
このコードを GitHub に push します。あらかじめ Travis CI では、このプロジェクトを CI の対象として設定しているので、push するとテストが実行されます。
テスト結果が下記です。PHP のバージョンとして、HHVM 環境で実行されています。今回のテストに関しては、HHVM 上でも動作することが分かりました。
https://travis-ci.org/shin1x1/travis-ci-sample/builds/15438927
つまづいた点
HHVM 環境を試してみて、つまづいた点を。
Composer インストール
.travis.yml の before_install
に curl -sS https://getcomposer.org/installer | php
を入れていたのですが、下記のエラーが出てビルドが停止しました。HHVM では、標準入力による PHP スクリプト実行はサポートされていないのかもしれません。
そもそも Travis CI の環境では、composer コマンドが用意されており composer.phar をインストールする必要が無かったので、この処理は省きました。
HipHop Notice: Nothing to do. Either pass a .php file to run, or use -m server The command "php" failed and exited with 1 during before_install.
https://travis-ci.org/shin1x1/travis-ci-sample/jobs/15438538
php -q オプション
これは CakePHP のコードを HHVM で動かした時に発生したのですが、内部で php コマンドに -q
オプションを付けて実行している箇所があり、このオプションを HHVM が対応していないためにエラーとなりました。
ためしに -q
オプションを削除して実行してみると、その箇所は動作するようになりました。(また別のエラーが出ていますが。)
Error in command line: unknown option -q
https://travis-ci.org/shin1x1/cakephp/jobs/15436509
2.3 のリリースを見ると、HHVM 環境では HHVM_VERSION
という定数が定義されるようなので、これ使えば、HHVM 固有の処理を記述ことができそうです。
if (defined('HHVM_VERSION')) { // HHVM 環境のみの処理 }
さいごに
Travis CI で簡単に HHVM 環境を使えることが分かりました。
本番環境として HHVM を使うようになるかどうかは分かりませんが、Travis CI なら自分で環境を作ること無く試すことができるのが良いです。
今回は簡単なスクリプトでしたが、PHP の実行速度を問われるようなコードであれば、HHVM の性能を測る手段としても使えそうですね。
HHVM 2.3.0 and Travis CI « HipHop Virtual Machine