"Test_mysqld", ported from cpan's Test::mysqld

 とまあ、表題の通りですが。
 → GitHub - taiyoh/Test_mysqld-php: from cpan's Test::mysqld
 本家のTest::mysqldを見たときに「これは革命や」と感動していたのですが、ちょくちょくあるPHP仕事でも使いたと思っておりまして。しばらくは誰かやってくれないかなぁ、と思っていたのですが、ちょくちょくググッてもなかなか見つからなかったので、作ってしまいました。
 使い方は、本家と特に変わりありません。

$my_cnf = array(); // my.cnfに記述する内容を配列でまとめておく
$opts   = array(); // その他Test_mysqldの設定内容を配列でまとめておく

// インスタンス作成
// 本家との一番の違いはコンストラクタの引数で、
// 本家ではmy.cnfに書く内容はmy_cnf => {}にまとめてましたが、
// PHP版ではmy.cnfに記述するためのリストとその他設定のリストを分けてます
$mysqld = new Test_mysqld($my_cnf, $opts);

// DSN取得
$dsn = $mysqld->dsn();

// DSNを使ってDBに接続
$db = new PDO($dsn);

// do something(あとはお好きに)

 実装の流れは、ほとんどPerlのものをそのまま使わせていただいております。一部、Perl特有の表記や、PHPだとこう書くと見やすくなるかな、という部分については調整しています。テストについても、TAPで書かれてるものをPHPUnitで書くとこうなるかな、という感じで書いてます。あ、テストについては、最後のマルチプロセスでの試験は省いてしまってます><
 symfonyなんかでDB使ったテストを書くとき、よくやる(というかsymfony的にはそれしかサポートしてない)のがenvironment=testで設定しているデータベースにつなぎにいく、というものだと思います。が、それだと万が一オペレーションミスで本番環境で実行してしまったとか、テスト環境だけどDBは共有していて。。。みたいなときに一大事が起こりかねないので、MySQLインスタンスそのものを別で作ってしまうTest::mysqldの考え方は本当に素晴らしいと思います。