今回は、LXCで用意したコンテナにHHVMをインストールし、PHP(言語)とHack言語を体験するレシピです。
HHVMとは
HHVM(HipHop Virtual Machine)とは、Facebook社によって開発されたOSSです。PHP(言語)のコードの実行を、現在標準的に使われているPHP(実行環境)よりも高速化することを目的としています。特徴は、PHPのコードを専用の中間表現のバイトコード(HHBC)に変換し、このバイトコードを専用の中間表現(HHIR)に変換して最適化を施した後、x86-64あるいはARM64のマシンコードにJust-In-Timeコンパイルする点です。
先日、このHHVMのバージョン3.0.0が公開され、合わせてHackという新しい言語も公開されました。HHVMはPHPに加え、このHackの実行環境にもなります。
Ubuntu用にHHVMのパッケージを提供するリポジトリがhhvm.comにありますので、今回はそれを利用します。12.04と13.10用のパッケージが用意されています。
コンテナの準備
今回はテスト環境にLXCを使います。詳細は本連載の第226回を参考にしてください。
まずLXCパッケージをインストールします。
次にコンテナを作成します。名前はsaucyとします。環境変数MIRRORで日本のミラーサイトを使うように指定します。
これで、ubuntuというユーザー名、ubuntuというパスワードでログイン可能な「saucy」コンテナが作成されました。以下のコマンドを使ってコンテナを起動します。
HHVMパッケージのインストール
コンテナにログインしてHHVMパッケージをインストールする作業を行います。まずwgetパッケージをインストールします。
次にリポジトリのGPG鍵をインポートします。
リポジトリをパッケージ管理システムに追加します。
最後にhhvmパッケージをインストールします。
さて、hhvmをコマンドラインから実行してみます。
hhvmはphpのalternativeとして登録されています。そのため、phpコマンドでも呼び出せます。
PHPのコードを実行してみます。
PHP(言語)のインタープリターとしての役割を持つことがわかります。
HTTPサーバーの準備
HTTPサーバーをインストールして、Webブラウザ越しにアクセスしてみます。
まず、Webブラウザからのアクセスを簡便にするため、RFC 6762のMulticast DNSを使い、ローカルエリアネットワークで名前解決できるようにします。avahi-daemonパッケージをインストールします。
hhvmは今のところ、ApacheとNginx上でFastCGIインターフェース越しにアクセスすることができます。今回はapache2パッケージを使います。以下のようにインストールします。
hhvmをインストールしたときの出力を参考に、以下のスクリプトを実行します。
最後に、hhvmサーバーを再起動します。
これでHTTPサーバーの準備完了です。ドキュメントルートに以下のPHPスクリプトを置きます。
ホストでWebブラウザを起動し、「http://saucy.local/hello.php」にアクセスします。HTTPレスポンスが出力されていることがわかります。
Hack言語の使用
Hack言語はPHPとシームレスに相互運用可能な言語として開発されました。そのため、PHP(言語)と非常によく似ています。Hackのリファレンスには、現在のPHPコードベースとの互換性レベルを維持しつつ、PHPよりも読みやすく、安全で、リファクタリング可能なコードを提供することがHackのゴールだということです。
Hack Language ReferenceのType AnnotationsからAnnotating Arraysのサンプルを試します。今回のレシピの目的は試すことにあるので言語の詳細については割愛します。
以上を適当なファイルに保存して、hhvmで実行します。
コンテナの終了と削除
コンテナを終了するには別な端末を開き、以下のコマンドを実行します。
コンテナを削除するには以下のコマンドを実行します。