
執筆者
M.N.
駆動開発(Behaviour-Driven Development)

PHPカンファレンス2025の振り返り、第4回です。
今回は「PHPで始める振る舞い駆動開発(Behaviour-Driven Development)」というセッションについてです。
テスト駆動開発(TDD)の名前は聞いたことがある、という方は多いと思いますが、振る舞い駆動開発(BDD)はそのさらに上位概念にあたります。
自分も聞いたことはあったものの、ちゃんと理解できていなかったので、整理するいい機会になりました。
【テスト駆動開発(TDD)おさらい】
まず前提として、テスト駆動開発(TDD)の話がありました。
TDDはざっくり言うと「最初にテストを書いてから実装する」という開発サイクルです。
01 テストを書く
02 テストが通る実装をする
03 リファクタリングする
このサイクルを繰り返すことで、テストで担保されたコードを積み上げていく、という考え方ですね。
【振る舞い駆動開発(BDD)とは】
BDDはTDDの拡張で、「要求仕様に合わせてシステムの振る舞いを組む」という考え方です。
TDDとの大きな違いは、テストコードを「自然言語で記述する」という点です。開発者だけでなく、ビジネス側の人間も読んで理解できるテストを書くことで、開発関係者全員がビジネス要件について議論できる状態を目指します。
セッションで紹介されていたライブラリ構成はこんな感じでした。
・Behat
ビジネス要件をテストするPHP用BDDフレームワーク
・PHPUnit
テストコードを書く
・Selenium
ブラウザ操作の自動化
【BDDにおける「振る舞い」とは何か】
セッションの中で「BDDにおける振る舞いとは何か」という話がありました。
BDDにおける振る舞い=顧客に提供する価値、と定義されていました。
顧客が期待する具体的な価値を、明確でわかりやすいシナリオとして定義する。
そのシナリオをビジネスの観点からテスト(ビジネス志向テスト)することで、システムがその価値を確実に提供していることを保証する、という考え方です。
「ダメな例」として紹介されていたのが、「データベースに接続する」のようなシステム内部の動作に寄ったテストでした。
これだと開発者以外には何をテストしているのかわかりません。
BDDでは、あくまで「ユーザーにとって何が起きるか」という観点でシナリオを書くことが重要なようです。
改めて振り返ってみる

【セッションの締め:大切なのは「振る舞いを考え、共有し、テストに落とし込む」こと】
セッションのまとめとして、「大切なのは、振る舞いを考え、共有し、テストに落とし込むこと」という言葉がありました。
ツールやフレームワークの話ではなく、開発者とビジネス側の人間が同じ言葉で話せる状態を作ることが本質だ、というメッセージとして受け取りました。
【振り返ってみての所感】
当時のメモに「このセッションの登壇者が一番早口で大変だった」と書いてあって笑いました。
内容が盛りだくさんだったのかもしれません。
それはさておき、
BDDの導入難度については当時も今も、率直に「高い」と感じています。
その理由が2つあって、
ひとつは、
弊社がそもそもテストコードを書く習慣があまりないこと。TDDすら定着していない状態でBDDに踏み込むのは、ちょっとハードルが高いです。
もうひとつは、
弊社のシステムの業務ロジックが複雑なこと。BDDのシナリオは「自然言語で端的に表す」必要がありますが、「死ぬほどややこしいロジック」を自然言語で簡潔に書けるかというと、正直なところかなり難しいと感じました。
とはいえ、
「開発者以外にも読めるテスト」という発想は、仕様の認識齟齬を防ぐという意味でとても理にかなっています。
いきなりBDDを全面導入するのは難しくても、「テストシナリオをビジネス観点で書いてみる」という意識だけでも持てると、設計の考え方が少し変わるかもしれないな、と思っています。
次回は、「PHP開発者のためのSOLID原則再入門」についてレポートしたいと思います。
今回もお読みいただきありがとうございました。













