はじめに
こんにちは、エンジニアの@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 などで追跡できるようになりますので、おすすめです。