
はじめに
こんにちは、エンジニアの@soyanaです。
PHP のライブラリ依存性管理といえば、composer ですね。
CakePHP や Laravel など、最近のフレームワークではサポートされていますし、GitHub などにあがっている単体のライブラリなども composer でインストールすることができるものもあります。
一方、これまで PHP で外部ライブラリを管理するための PEAR が使われてきました。
PEAR では、例えば、
$ pear install MDB2
のように、コマンドを実行し、パッケージをインストールしていたかと思います。
composer では、インストールしたパッケージごとにコマンドを実行せずに、ファイルにインストールしたいパッケージを記述することで管理することが可能になります。
ハウテレビジョンでも、cron で定期実行しデータベースに接続してゴニョゴニョするようなPHPスクリプトがあり、PEAR ライブラリを使っているのですが、先日、そのPEAR ライブラリの管理に composer を使うようにしてみました。
そこで今回は、100行程度のPHPスクリプトで、PEAR ライブラリに依存するようなものを作ってみた場合を例に、どのように composer を使ってライブラリを管理していけばよいのかをご紹介します。
前提
- MySQL サーバーに接続し、データを参照、更新するようなスクリプトを実装する
- データベース接続には、MDB2 を利用
- php5-cli パッケージがインストール済み
まずはじめに
myapp ディレクトリの中で作業をすすめていくことにします。
$ mkdir -p /path/to/myapp $ cd /path/to/myapp
composer のインストール
以下のコマンドを実行します。
$ curl -sS https://getcomposer.org/installer | php
カレントディレクトリに、composer.phar が生成されます。
次に composer.json を作成しましょう
ここでは、データベース接続に MDB2 を使うことにします。
MDB2 は pear.php.net サーバから取得するため、
composer.json を新規作成し、以下の内容を記述しましょう。
{
"repositories": [
{
"type": "pear",
"url": "http://pear.php.net/"
}
],
"require": {
"pear-pear.php.net/MDB2": "*",
"pear-pear.php.net/MDB2_Driver_mysqli": "*"
}
}
pear ライブラリを composer でインストールするときには、
"repositories": [
{
"type": "pear",
"url": "http://pear.php.net/"
}
],
のようにリポジトリを指定します。
パッケージをインストール
$ php composer.phar install
これを実行するだけで、カレントディレクトリに、vendor ディレクトリが生成されます。 vendor ディレクトリの中には、composer.json の中で指定したライブラリやその他依存しているパッケージなどが配置されます。
myapp
├── composer.lock
├── composer.json
├── composer.phar
└── vendor/
├── autoload.php
├── bin/
├── composer/
└── pear-pear.php.net/
スクリプトの書き方
通常、
<?php require 'MDB2.php';
のように MDB2 をロードしていましたが、
composer install により、vendor/autoload.php が自動生成されます。
<?php require 'vendor/autoload.php';
のように、これを読み込むだけで、composer.json で指定したパッケージがオートロードされます。 各ライブラリを直接指定する必要はありません。
まとめ
ここまで見てきた管理法をまとめてみます。
composer.json に入れたいパッケージを記述する。
composer install を実行し、アプリのディレクトリ配下がパッケージをインストールされる。
PEAR でパッケージとして提供されているライブラリも扱える。
スクリプト側では、vendor/autoload.php を require で読み込む。各ライブラリは直接指定しない。
パッケージを追加/削除する場合には、composer.json を書き換えて、composer update を実行。
最初、composer の導入に敷居が高いと感じがちですが、1つ1つ順にやってみると意外に簡単ですし、アプリケーションが依存しているライブラリが composer.json にコードとして記述されるようになり、可視化され、また変更を Git などで追跡できるようになりますので、おすすめです。