序文

あれは 2006 年のことでした。私は Ruby に挑戦してみることにしました (PHP の本なのにこんな書き出しでいいんでしょうか……。 でも、すべての始まりはここだったのです!)。 その当時、xUnit によるテスト駆動開発 (TDD) とは別の考え方が注目を集め始めていました。 RSpec フレームワークをインストールした私は、そこで振舞駆動開発 (BDD) の概念を知ったのです。これは TDD を進化させた (あるいは再構成した) ものです。その主な目的は、新たな言語を作成することによって、 伝統的な TDD の語彙をよりテストに適したものに置き換えることです。

驚いたことに、BDD はかなり魅力的なものでした。 BDD は、TDD がやろうとしていることを よりわかりやすく行うことができます。 そのおかげで、TDD による開発よりもかなり生産性があがりました。 うまく説明できないのですが、BDD は TDD より簡単で、より楽しいものなのです。 私の場合、コーディングをするのは業務時間外のことなので、 できることならより楽しく行いたいものです。

さて、時は進んで 2007 年。なんだかんだ言ってもやっぱり PHP は捨てられません。 Ruby もすばらしい言語ではあるのですが、 やっぱり長年親しんだ言語のほうがやりたいことを簡単に行えるものです。 私にとっては PHP のほうが生産性が高いし、PHP コミュニティも大好きだし、 Java っぽい構文にも愛着があったのです。 そこでふと気づきました。PHP には RSpec のようなフレームワークがないじゃないか! Ruby コミュニティには少々困った習性があります。 やつらは、新たなやり方やツールなどをすばやく取り込んでしまうのです。 PHP のコミュニティは、残念ながらそのスピードにはかないません。

結局 PHP に戻ってきた私ですが、PHP には BDD をサポートする仕組みがありません。 SimpleTest を駆使してそれっぽいことをやろうとしてみたのですが、 求める水準の半分くらいにしか達しませんでした。 私は RSpec みたいなツールがほしかったのです。 ZenTest Autotest と Snarl や KDE Notify ポップアップを組み合わせた環境なんか、最高でした。 xUnit フレームワークに迎合してしまうのは気に入りません。 ……などと文句を言っているだけでは何も始まらないので、 Travis Swicegood らと相談して自分たちで PHP 用のツールを作り始めることにしたのです。 それが 2007 年 10 月のことでした。

PHPSpec はその成果として生まれたものです。 これは、PHP5 で振舞駆動開発 (BDD) を行うためのフレームワークです。