Composer で PHPUnit のインストール

ちまたで人気の Composer を試してみた。

http://getcomposer.org/

だが、pear 経由では PHPUnit がインストールに失敗する。もしかしたら Composer の不具合かもしれないが、どうやら PHPUnitpear の管理情報 (packages.json) に問題(?)があるらしい。

https://gist.github.com/2433139 を参考にして、インストールしてみた。

composer.json: リポジトリをローカル指定し、url の先に PHPUnit 用の packages.json を配置する。

{
    "repositories" : [
        {
            "type" : "composer",
            "url" : "file:///path/to/repositories/phpunit"
        }
    ],
    "require" : {
        "pear-phpunit/PHPUnit" : "3.6.10"
    }
}

packages.json を修正:

wget http://pear.phpunit.de/packages.json
sed -i 's/"pear-symfony\\\/YAML"/"symfony\/yaml"/g' packages.json
sed -i 's/"http:\\\/\\\/pear.phpunit.de\\\/get\\\/pear-phpunit\\\//"http:\\\/\\\/pear.phpunit.de\\\/get\\\//g' packages.json

phpunit コマンドスクリプトを作成

#!/usr/bin/env php
<?php

require_once __DIR__.'/vendor/autoload.php';

$paths = get_include_path();

foreach (glob(__DIR__.'/vendor/pear-phpunit/*') as $path) {
    $paths .= PATH_SEPARATOR . $path;
}

set_include_path($paths);

require_once 'PHPUnit/Autoload.php';

PHPUnit_TextUI_Command::main();

composer 実行:

php composer.phar install

phpunit 実行:

php phpunit

問題点としては、最新の状態に保つためにはローカルの packages.json を自分で更新する必要があること。
また、Composer の仕様変更がある可能性はある。