導入: なぜ今、Pharなのか
PHPのバックエンド開発において、ライブラリ管理はComposerが主流ですが、配布やデプロイの現場で「単一のファイルでアプリケーションを配布したい」というニーズが発生することがあります。そんな時に役立つのが Phar (PHP Archive) です。
PharはJavaのJARファイルに近い概念で、複数のPHPファイルやアセットを一つのアーカイブファイルにまとめ、実行可能にすることができます。本記事では、Pharの基本概念と、実務で役立つ作成方法を解説します。
基礎知識: Pharとは何か
Pharは「PHP Archive」の略称です。PHPのプロジェクトを一つのファイルとしてパッケージ化し、PHPインタプリタがあればそのファイル単体で実行できるようにする仕組みです。
メリットは主に以下の2点です。
1. 配布の簡素化: 大量のファイル群を一つのファイルで提供できるため、デプロイや配布が極めて容易になります。
2. オートロードの統合: Pharファイル内にオートローダーを含めることで、外部ライブラリとの競合を避けつつ、読み込みを高速化できます。
実装/解決策: Pharファイルの作成手順
Pharを作成するには、PHPの Pharクラス を使用します。注意点として、PHP設定(php.ini)で phar.readonly が「Off」になっている必要があります。
1. Pharオブジェクトを作成する
2. 内部に含めるファイルを追加する
3. 実行時のエントリポイント(起動スクリプト)を設定する
サンプルプログラム: シンプルなPharアーカイブの作成
以下は、特定のディレクトリ内のファイルを一つのPharファイルにまとめるスクリプトです。
buildFromDirectory(dirname(__FILE__) . ‘/src’);
// Pharの起動時に実行されるエントリポイントを設定
$defaultStub = $phar->createDefaultStub(‘index.php’);
$phar->setStub(“#!/usr/bin/env php\n” . $defaultStub);
echo “Pharファイルが作成されました: ” . $pharFile;
?>
実行後、作成されたpharファイルは php myapp.phar コマンドで実行可能になります。
応用・注意点: 現場で陥りやすい罠
1. phar.readonlyの設定: 多くの共有サーバーや本番環境では、セキュリティ上の理由からPharの作成(書き込み)が禁止されています。開発環境で作成し、作成済みのファイルを配布するのが一般的です。
2. パスの指定: Phar内部のファイルを参照する場合、__DIR__ はPhar内部のパスを指します。外部のログファイルや設定ファイルを読み込む際は、Pharの外側の絶対パスを適切に処理するロジックが必要です。
3. 署名の活用: Pharは OpenSSL 等を用いた署名をサポートしています。配布するライブラリの改ざんを防ぐために、実務では署名機能を有効化することを推奨します。
Pharは小規模なツールや、依存関係を完全に隔離したいCLIアプリケーションを作成する際に非常に強力な武器となります。ぜひ、プロジェクトの配布フローに取り入れてみてください。