トップ » 技術記事 » クライアント(ブラウザ)もサーバも同一言語で書ける haXe を使ってみる(8) - haXe を PHP に変換する haXe/PHP を使ってみる

クライアント(ブラウザ)もサーバも同一言語で書ける haXe を使ってみる(8) - haXe を PHP に変換する haXe/PHP を使ってみる

タグ: haXe PHP

どうも、あかさたです。最近私のブログ情報提供があったのですが、haXe を PHP に変換するツール「haXe/PHP」があるとのことです。興味深いツールなので本記事で紹介します。

はじめに

連載「クライアント(ブラウザ)もサーバも同一言語で書ける haXe を使ってみる」では、繰り返し同一言語による開発のしやすさを紹介してきました。

haXe は特にクライアントに魅力のある言語です。haXe は定番として安定している JavaScript か Flash 向けにコードを出力します。haXe の言語としての特徴を挙げてみましょう。JavaScript に対しては、コンパイラによる型チェックがあるので効率的に開発を進めることができます。Flash に対しては型推論などによって、より少ない手間でコードを記述できるという優位性をもっています。

また、haXe の魅力の一つとして、処理をクライアントに置くべきかサーバに置くべきか悩ましいケースに、クライアントとサーバの間で自由に配置を動かせるというものがあります。

しかし、haXe はサーバサイド向けに NekoVM で動作するバイトコードを出力しますが、NekoVM の運用は日本ではそれほど実績もなく、ドキュメントもありません。仕事で開発するシステムで採用するにはやや不安なところもあります。

そうした中、まだベータ版ですが、haXe を PHP に変換する「haXe/PHP」というものがあるという情報提供を受けました。もしサーバサイドに PHP を使うことができるのなら、haXe におけるサーバサイド開発で非常に安定した環境を選択できることになります。

本記事では、haXe/PHP の簡単な使い方を紹介します。

haXe/PHP で「Hello World!」

まずは、「Hello World!」をやってみましょう。haXe/PHP のインストールは簡単です。Windows XP/Vista の場合、公式サイトから Windows version(執筆時点では haxephp-1.19.beta.1.zip)をダウンロード・解凍して、haxesetup.exe を実行するだけです。

インストールが完了したらソースコードを作成します。初回の記事で書いたソースコードと同じです。

ソースコード「HelloWorld.hx」

class HelloWorld {
    static function main() {
        trace("Hello World !");
    }
}

次に以下のような定義ファイルを作成して、「haxe compile_php.hxml」を実行してください。「helloworld.php」というフォルダが生成されて、その中に PHP のソースコードが展開されます。

コンパイル用の定義ファイル「compile_php.hxml」

-php helloworld.php
-main HelloWorld

生成されたソースコードをウェブサーバ上に配置すればそのまま実行することができます。JavaScript や Flash を生成するときと同じ手順で行えることがわかります。

haXe/PHP の仕組み

haXe が OCaml(関数型言語)で書かれていて私にはあまりなじみがないこともあり、内部のソースコードはそれほど追えていません。想像も交えながら中の仕組みを簡単に紹介しましょう。

普通に考えると、haXe のような単一の言語から複数の言語へ変換する種類のツールは、生成する言語を自由に追加できるような作りになっているものです。実際、Flash に対応するだけでも、バージョンごとにジェネレータが必要です。また、haXe にはクロスプラットフォームで動作する標準ライブラリもあります。

つまり、haXe に新しい言語を載せるには、OCaml で書いたその言語用のジェネレータ(genXX.mlというソースファイルがある)と、その言語向けに実装した haXe の標準ライブラリおよび生成されたコードを動作させるためのフレームワークが必要と言うことになります。

haXe/PHP もその仕組みに乗っかって開発されているようで、それらしきソースファイルを目にすることができます。haXe/PHP が安定して使えるようになるには、このジェネレータがどれくらいこなれてくるかにかかっています。

既存の PHP コードを呼び出す

さて、haXe/PHP を実用的に使うには、既存の PHP コードを呼び出す方法が必要です。既存資産を活用できなければ、haXe/PHP を採用する意味は半減してしまいます。

まず、JavaScript で使用した untyped を使ったテクニックを試してみましたが、コンパイルエラーになって使うことができないようです。JavaScript/Flash 生成ではコンパイルエラーは出ないので、haXe/PHP のバグと思われるのですが、ソースコードを読む限りでは、ActionScript3 のジェネレータ(swf ではなくas3 コードを出力するジェネレータ)では haXe/PHP と同様に動作するようです。haXe でまだ仕様が定まっていない部分なのかもしれません。

実は、haXe/PHP の標準ライブラリは haXe で記述されているため、そのコードを読むとどうやって既存のライブラリと連携しているのか把握することができます。コードを見ると、「untyped __call__(”関数名”, 引数1, 引数2,,,)」という記述をすることにより、関数を呼び出すことができるようです。

PHP の関数(phpinfo)を呼び出す

trace(untyped __call__("phpinfo"));

phpinfo を呼び出すという少し乱暴な例ですが、PHP の関数を呼び出すことに成功していることがわかります。

まとめ

私は、haXe/PHP は必要な機能は揃っていると考えています。haXe/PHP が使えるかどうかは、コードジェネレータがどれくらいこなれてくるかにかかっていると言えるでしょう。haXe/PHP はまだベータ版ですから、しばらくは適用可能性を検討しつつも様子見するのが良いでしょう。

以上、haXe/PHP の紹介でした。それでは!

Series Navigation«haXe の開発環境

執筆者紹介

あかさた

あかさた

未踏(2006年度下期)でWeb上で動作するモデリング環境 Kodougu の開発をしてました。こちらでもブログを書いています。

TrackBack URL :