導入
PHPで開発したツールやライブラリを配布する際、複数のファイルに散らばったソースコードを管理するのは手間がかかります。また、利用者に依存関係をインストールさせるのもハードルが高い場合があります。そんな時、JavaのJARファイルのようにPHPのプログラムを単一のアーカイブファイルにまとめられる「Phar (PHP Archive)」が非常に有用です。この記事では、Pharの仕組みと、実務で使える作成・実行方法を解説します。
基礎知識
Pharとは、PHPで作成されたアプリケーションを1つのファイルにアーカイブするための形式です。PHP 5.3.0以降で標準サポートされており、拡張子「.phar」を持つファイルとして配布されます。
最大の特徴は、PHPエンジンが直接このアーカイブを読み込んで実行できる点です。これにより、ライブラリの配布だけでなく、コマンドラインツールの作成において、環境設定の手間を最小限に抑えることが可能です。
実装/解決策
Pharを作成するには、PHPの設定(php.ini)で「phar.readonly」が「Off」になっている必要があります。開発環境で作成し、完了後にセキュリティのために「On」に戻す運用が一般的です。
作成の手順は、Pharクラスをインスタンス化し、ソースコードが含まれるディレクトリを「buildFromDirectory」メソッドで追加し、最後に実行時のエントリポイント(スタブ)を設定するだけです。
サンプルプログラム
以下のコードは、指定したディレクトリ内のファイルを1つの「app.phar」にまとめるスクリプトです。
buildFromDirectory(__DIR__ . ‘/src’);
// 5. スタブ(実行時に最初に呼び出される設定)の作成
// ここではsrc/index.phpをエントリーポイントとして指定
$defaultStub = $phar->createDefaultStub(‘index.php’);
$phar->setStub(“#!/usr/bin/env php\n” . $defaultStub);
echo “Pharファイルが正常に作成されました。\n”;
?>
実行時はコマンドラインから「php app.phar」とするだけで、アーカイブ内のindex.phpが実行されます。
応用・注意点
実務でPharを活用する際の注意点をいくつか挙げます。
1. パス指定の罠
Phar内部のファイルにアクセスする際、相対パスで記述すると実行場所(カレントディレクトリ)に依存してしまいます。「Phar::mapPhar()」を利用するか、「__DIR__」などの定数を適切に使うことで、アーカイブ内のパスを正しく解決してください。
2. セキュリティ設定
Pharは実行時に署名(OpenSSLなど)を付与して改ざんを検知することも可能です。配布用として公開する場合は、必ず署名を行うことを推奨します。
3. 依存関係の解決
もしComposerを使っている場合は、Composerのプラグインである「box」というツールを使うのが現代的なベストプラクティスです。手動での作成に慣れたら、ぜひ検討してみてください。
Pharを使いこなすことで、配布の簡略化やツール運用の効率化が格段に向上します。ぜひ自身のプロジェクトで試してみてください。