1. 導入:なぜ今、PHARなのか
PHPでアプリケーションを開発・配布する際、大量のファイル群を管理するのは手間がかかります。特にライブラリやCLIツールを配布する場合、依存関係やファイルパスの問題が頭痛の種になりがちです。そこで活用したいのが「PHAR (PHP Archive)」です。これは、JavaのJARファイルのように、複数のPHPファイルを1つのアーカイブにまとめ、実行可能な形式にする仕組みです。本記事では、PHARを使って配布のハードルを一気に下げる方法を解説します。
2. 基礎知識:PHARとは何か
PHARとは、PHP 5.3.0以降で導入されたアーカイブ形式です。PHPスクリプト、画像、設定ファイルなどを一つのファイルにパッケージ化できます。
メリットは以下の通りです。
・配布が容易:単一ファイルをコピーするだけでアプリを導入可能。
・依存関係の管理:オートローダーを同梱することで、読み込みエラーを防止。
・セキュリティ:デジタル署名が可能で、改ざんを検知できる。
PHPの実行環境さえあれば、WebサーバーでもCLI(コマンドライン)でも同じように動作します。
3. 実装/解決策
PHARを作成するには、PHPの設定ファイル(php.ini)で「phar.readonly = Off」に設定する必要があります。作成の基本手順は以下の通りです。
1. プロジェクトのディレクトリ構成を決定する。
2. Pharオブジェクトをインスタンス化する。
3. buildFromDirectoryメソッドでファイルを読み込む。
4. スタブ(Stub)と呼ばれる、PHARが実行された時に最初に読み込まれるPHPコードを指定する。
4. サンプルプログラム
以下のコードを「build.php」という名前で保存し、実行することでプロジェクト全体を「app.phar」にパッケージングできます。
buildFromDirectory(dirname(__FILE__) . ‘/src’);
// スタブ(エントリポイント)の設定
// このファイルが実行された時に最初に呼び出される処理を記述
$defaultStub = $phar->createDefaultStub(‘index.php’);
$phar->setStub(“#!/usr/bin/env php\n” . $defaultStub);
echo “PHARファイルを作成しました: ” . $pharFile . PHP_EOL;
?>
5. 応用・注意点
現場でPHARを利用する際の注意点は、「書き込み権限」です。PHARは基本的に読み取り専用として扱うのが定石です。設定ファイルなどを外部から変更したい場合は、PHAR内部ではなく、OSの環境変数や外部のディレクトリから設定を読み込む設計にしてください。
また、Composerを使用しているプロジェクトであれば、`box`というツールを使用すると、依存パッケージも含めて自動的にPHAR化してくれるため、実務ではこちらを採用することをお勧めします。小さなツールを配布する際、PHAR化しておくことで、利用者は複雑な環境構築なしにコマンド一つであなたのプログラムを実行できるようになります。