様々な開発を行っていく上で、自社用/自分用のライブラリが出来上がっていくことなどもあるかと思います。1、2のPHPスクリプトファイルで済む量であればとりあえず普通にコピーすればいいかな、などと考えられますが、ライブラリの量が肥大化してくると使用するにもパッケージングしたり、バージョン管理を行ってやる必要が出始めます。

 さらに、別途PEARライブラリを利用していたりすると、これらの依存関係も絡んで管理や新規環境の構築が非常に面倒になってきます。

 そのような場合に非常に便利なのが、PEARのパッケージ管理システムです。自分用ライブラリをPEARパッケージとして管理してやれば、バージョン情報や依存関係も記述でき、インストールもアップデートも、pearコマンド一発で可能になります。

 今回は、そんなPHPスクリプトの管理にうってつけなPEARパッケージを手軽に作成できるライブラリ、PEAR_PackageProjectorをご紹介します。

 PEAR_PackageProjectorは、ブログ「過去と他人はかえられないが、未来と自分はかえられる」の管理人magiwo氏が開発を行っているライブラリで、現在のバージョンは0.1.3のベータ版です。

 なお、このパッケージはWindows / Linuxの両方で動作しますが、ここではLinux上の場合に話を限って説明していきます。Windows上でも基本的には同じなので、細かい部分を読み替えていっていただければ同様に扱えると思います。

 PEARパッケージを作成するライブラリだけあって、インストールは当然PEARコマンドを利用できます。

 ですが、このライブラリは

  • PHP_CodeSniffer
  • Console_Getargs
  • PEAR_PackageFileManager

という3つのライブラリを要求します。

 このうちのConsole_GetargsとPEAR_PackageFileManagerは既にstableリリースになっているため自動的にまとめてインストールされるのですが、PHP_CodeSnifferはbeta扱いなので、PEAR_PackageProjectorよりも先に、別途手動でインストールする必要があります。

pear install PHP_CodeSniffer-beta
pear install http://servlet.sakura.ne.jp/download/
PEAR_PackageProjector-0.1.3.tgz

とすれば、インストール完了です。

 PEAR_PackageProjectorをインストールすると、pearprojというスクリプトが/usr/local/binに配置され、これを用いて各種処理を行っていきます。

 それでは、パッケージの作成手順に入りましょう。

 まず最初に、パッケージのプロジェクトを作成します。

 プロジェクトを作成する任意のディレクトリで、以下のコマンドを実行します。

pearproj --create -p TestProject

すると、実行したディレクトリ以下にTestProject/ディレクトリが作成され、パッケージ生成に用いられる各種ファイルが生成されます。

 なお、PHPのバージョンや環境によってはこのコマンドを実行する際に

PHP Notice:  Undefined index:  PWD in /usr/local/lib/php/PEAR
/PackageProjector/Derictory.php on line 310
PHP Warning: mkdir(): Permission denied in
/usr/local/lib/php/PEAR/PackageProjector/Derictory.php on line 299

などのエラーが発生することがあります(rootユーザーだと2行目のエラーは出力されず、ルートディレクトリ直下にプロジェクトディレクトリが生成されてしまいます)。

 これは、PHPのスーパーグローバル変数である$_ENV が正しくカレントディレクトリを取得できていないために起こる問題なので、このようなエラーが出る場合は、/usr/local/lib/php/PEAR/PackageProjector/Derictory.php の310行目を

$tmp = (OS_WINDOWS) ? getcwd() :$_ENV['PWD'];
↓
$tmp = (OS_WINDOWS) ? getcwd() :getenv("PWD");

と変更すれば、問題なくプロジェクトが生成できるようになるかと思います。

 生成されたTestProjectの中身は

TestProject/
  build               buildスクリプト
  build.bat           buildスクリプト(win用)
  build.conf          パッケージ情報設定ファイル
  desc.txt            パッケージの説明を記述するテキストファイル
  notes.txt           パッケージの更新履歴を記述するファイル
  sample.php          パッケージの動作サンプル/テスト記述用スケルトン
  release/            パッケージ生成先ディレクトリ
  src/                ソースコード配置ディレクトリ
    TestProject.php   TestProjectクラスのスケルトン
    TestProject/

という構成になっています。

 この段階ではPEARパッケージを作成するためのスケルトンが用意されていますが、これに従う必要はありません。
src/ディレクトリの中をパッケージ化したいファイル群に置き換えてしまいましょう。

 さて、次にすべきことはbuild.confの書き換えです。

 このbuild.confは特に書き換えずともパッケージ化可能ですが、これを適切に変更することでバージョンの管理や依存関係などを設定できます。

 例えば、HTTP_RequestというPEARパッケージを内部で使用しているライブラリの場合は、build.conf内に

[dep://HTTP_Request]
type = required

と記述しておけば、仮にHTTP_Requestパッケージがインストールされていない環境でも、TestProjectパッケージのインストールの際に、自動的にHTTP_Requestパッケージもインストールしてくれます。

 最後に、プロジェクトディレクトリ上で

./build

とすれば、release/ディレクトリ内にTestProject-0.1.0.tgzというファイルが作成されます。

 これで、パッケージ化が完了です。

 あとは、このパッケージをインストールしたい環境上で、

pear install TestProject-0.1.0.tgz

とすれば、PEARパッケージとして展開することができ、依存ライブラリもまとめてインストールできます。

 またバージョンを挙げた際のアップグレードも同様にpearコマンドから可能になります。

 パッケージのアンインストールも、デフォルトのbuild.confで作成したパッケージであれば

pear uninstall __uri/TestProject

とするだけです。

 煩雑になりやすいライブラリの管理ですが、PEAR_PackageProjectorを使えば手軽にPEARパッケージとして管理できるので、非常に便利です。

 ライブラリの管理に困っていたら、ぜひ一度使ってみてはいかがでしょうか。

PEAR_PackageProjector



(アシアル 亀本大地)


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