ハウテレビジョン開発者ブログ

『外資就活ドットコム』を日夜開発している技術陣がプログラミングネタ・業務改善ネタ・よしなしごとについて記していきます。

ちょっとしたPHPスクリプトで PEAR ライブラリを管理するのに composer を使ってみよう

f:id:soyana:20141201150128p:plain

はじめに

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