bamcompileは、PHPで記述したスクリプトで、スタンドアロンのEXEアプリケーション作成を実現するWindows用ソフトウェアです。
スタンドアロンEXEの形式を取ることで、作成したアプリを実行するのにPHPエン ジンを別途インストールする必要はありません。 PHP4.4.4と同等の実行エンジンをEXEに内包させてしまうからです。

今回は、このbamcompileの使用方法をご紹介します。

bamcompileは、こちらから入手できます。: http://www.bambalam.se/bamcompile/download/bamcompile1.21.zip

まずは、基本的な使用法を紹介します。 以下のような、Hello World スクリプト[hello.php]

<?php
 
echo "Hello ,World! ";
?>

を用意し、あとはコマンドライン上から、

> bamcompile hello.php hello.exe

とたたけばOK。bamcompileのあるディレクトリにhello.exeが出来上がり、これ をコマンドライン上から実行すると、「Hello ,World! 」と表示されます。 基本的には

> bamcompile source.php result.exe

という書式でsource.phpからresult.exeが生成されます。

EXE化するスクリプトが単体ではなく、includeなどで別のファイルも読み込んで いる場合は、メインの実行スクリプト(main.php)と、includeされるファイルを1つの ディレクトリ内(例えば「project」ディレクトリ)にまとめて、以下のように 指定します。

> bamcompile project main.php result.exe

第1引数として、必要なファイルを格納したディレクトリを指定し、第2引数にメ インとなるスクリプトファイルを指定します。第3引数は出力されるEXEファイル 名です。(なお、include等を使用する場合は、相対パスによる指定を行わなけれ ばならないので、注意してください。)
また、php.iniの設定を反映させたい場合は、projectディレクトリの直下にphp.iniを 配置するようにしてください。(ただし、php.ini内のextension指定は反映さ れません)

bamcompileの前バージョンでは、任意のextensionが利用できない、という非常 に大きな欠点を持っていました。しかし、バージョン1.2からは、外部extension を取り込むことが可能になりました。
コマンドラインオプション -e:を使用してextensionのdllファイルを指定しま す。例えば、mbstringを使用したい場合は

> bamcompile -e:c:\php\extensions\php_mbstring.dll project main.php result.exe

のように指定すればよいのです。この-e:オプションは以下のようにして複数指 定可能です。

> bamcompile -e:php_mbstring.dll -e:php_gd2.dll ・・・

また、EXEアプリに使用するアイコンも、-i:オプションを用いて指定可能になり ました。

bamcompileのコマンドラインの引数オプションは、以下のとおりです。

-w              WinBinderなどを使用したウィンドウアプリケーションを作成
した場合に、実行時のDOS窓を表示しない。
-c              UPXを使用してファイルを圧縮する。
-d              PHPファイルをエンコードしない。
-e:[ext.dll]    EXEファイルに埋め込むPHPのextension.dllを指定する。
-i:[icon.ico]   EXEファイルのアイコンに使用する.icoファイルを指定する。

しかし、上記のような指定法だと、ソフトウェアの規模が大きくなるに従って、 1行のコマンドがどんどん肥大化していってしまいます。

そこでbamcompileは、バージョン1.2から.bcpというプロジェクトファイルを使 用する方式が採用されています。
.bcpファイルの設定項目は、コマンドラインの引数及びオプションに対応する キーワードを指定していきます。 プロジェクトファイルのほうが、より細やかな指定が可能です。

以下に、その設定項目を紹介します。

・MAINFILE mainfile.php
(必須。)コンパイルする際のメインの実行スクリプト名。1ファイルの場合は、
そのファイル名。

・OUTFILE outfile.exe
生成されるEXEファイルにつけるファイル名。

・ICON icon.ico
EXEファイルに使用されるアイコン画像。

・COMPRESS
引数なし。このオプションを指定すると、コンパイル時にUPXを用いた圧縮を行
う。生成後のEXEファイルのサイズをおよそ半分以下に抑えることができる。

・DONTENCODE
引数なし。PHPファイルをエンコードしない。

・WINDOWED
引数なし。スクリプトがWinBinderなどでWindowアプリケーション化されている
際、実行時にDOS窓を隠す。

・EMBED directory/file.php
・EMBED whole_directory
・EMBED directory/*.png
EXEファイルに埋め込むファイルやディレクトリ名。ディレクトリを指定した場
合、それ以下のサブディレクトリまで再帰的に含まれる。
(ただし、extensionやiconはここで指定するわけではない。)

・DESTINATION destination_path/
埋め込み先ディレクトリのパス。EMBEDよりも前に指定しなければならない。
EMBEDで指定したファイル及びディレクトリが配置されるパスを指定する。
また、EMBEDの後ろで再度指定することにより、それ以下のDESTINATIONを再定義
可能。デフォルトはルート('/')。

・EXTENSION path_to/extension.dll
内部で使用するPHPのextension.dllを指定する。

例として、以前紹介したWinBinderのスクリプトをEXEアプリケーションにコンパ イルしてみましょう。 WinBinderに関しては、vol11( http://www.phppro.jp/phptips/archives/vol11/ )の記事をご覧ください。
bamcompileは、WinBinderのようなWindowアプリケーションを作成するライブラ リと組み合わせるとGUIのEXEアプリを作成できるので、非常に強力です。

example.phpwを、bamcompile.exeがあるディレクトリの下に「exam」というサブ ディレクトリを作成し、その中に配置します。

このときのプロジェクトファイルの設定は、以下のようになります。
(なお、以前のバージョンを使用したことのある方は、バージョン1.2から php_winbinder.dllがbamcompileに標準で含まれなくなったことに注意してください)

MAINFILE example.phpw
OUTFILE example.exe
WINDOWED
COMPRESS
DESTINATION /
EMBED exam
DESTINATION include
EMBED C:\WinBinder\phpcode\include\winbinder.php
EMBED C:\WinBinder\phpcode\include\wb_generic.inc.php
EMBED C:\WinBinder\phpcode\include\wb_resources.inc.php
EMBED C:\WinBinder\phpcode\include\wb_windows.inc.php
EXTENSION C:\WinBinder\binaries\php4\ext\php_winbinder.dll

おそらく、理解しがたいとすればDESTINATIONの設定かと思います。 これは、イメージとして実際のディレクトリ構造とは別に、EXEファイル内に別 空間のディレクトリツリーが展開され、その内部での作業ディレクトリを DESTINATIONで指定する、と考えるとわかりやすいかと思います。

まず、5行目のDESTINATIONと6行目のEMBEDで、EXE内のディレクトリツリーの ルートを指定して、そこにexamディレクトリ以下の内容を展開します。 さらに7行目でincludeディレクトリに移り、その下に続くEMBEDで指定した4つの ファイルを配置しています。 includeディレクトリは実際には存在しませんが、このように指定することでEXE ファイル内のルート下にincludeディレクトリが作成されているわけです。

この設定によって、EXE内には以下のようなツリー構造でファイルが配置された ことになります。

/ -
  + example.phpw
  + include/
       + winbinder.php
       + wb_generic.inc.php
       + wb_resources.inc.php
       + wb_windows.inc.php

これを基に、example.phpwにあるincludeの引数を、"include/winbinder.php"と 相対パスに変更したうえで、このプロジェクトファイルをexample.bcpとして bamcompile.exeと同じディレクトリに配置して以下を実行してください。

> bamcompile example.bcp

これで、同ディレクトリ内にexample.exeが作成されていると思います。 実際にこれを起動してみると、Windowアプリケーションが起動し、GUIのスタン ドアロンEXEになっていることが確認できるかと思います。

このように、bamcompileを使うと非常に簡単に、PHPからスタンドアロンのEXEア プリケーションが作成できます。 WinBinderと組み合わせることで、GUIアプリも可能、となってくれば、PHPerと しては夢が広がりますね。

bamcompile: http://www.bambalam.se/bamcompile/


(アシアル 亀本大地)

この記事は、アシアルが運営するPHP開発者のためのポータル&コミュニティサイト「PHPプロ!」で毎週配信しているPHP・TIPSメーリングリストを再録したものです。
同サイトでは、他にもPHP最新ニュースや、困ったときのQ&A掲示板、初心者向けのPHP講座など、PHP開発者をサポートする情報を掲載しています。