2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

TDD三原則と実践フロー:最小限のコードで、最大限の保証を得る戦略

Posted at

概要

TDD(Test-Driven Development)には、明文化された三原則が存在する。
これらは単なる「テストの手順」ではなく、
**“設計の複雑性を制御し、進化に耐えるコードを書くための制約”**である。

本稿では、Ruby + RSpec による実践を通して、
TDD三原則の意味と威力を構造的に掘り下げる。


1. TDD三原則とは何か

Kent Beck によって定義された以下の三原則がTDDのコアにある:

原則①:失敗するテストを書くまで、プロダクションコードを書いてはならない

→ テストファースト。何を満たすべきかを先に書く

原則②:テストが失敗したら、それを通すためだけのコードを書く

最小限の実装。余計な処理を先回りしない

原則③:重複を除去しながらリファクタする

動作を保ちつつ、設計を洗練させる


2. 実践:TDDで文字列の回文判定関数を書く

ステップ1:Red – 仕様を書く

# palindrome_spec.rb
require './palindrome'

RSpec.describe '#palindrome?' do
  it 'returns true for "madam"' do
    expect(palindrome?('madam')).to eq true
  end
end

ステップ2:Green – テストを通すためだけの実装

# palindrome.rb
def palindrome?(str)
  true
end
  • ✅ 原則②に則り、最低限のコードでテストを通す

ステップ3:Red – もう1つの仕様を追加

it 'returns false for "hello"' do
  expect(palindrome?('hello')).to eq false
end

Green – 振る舞いを満たす実装

def palindrome?(str)
  str == str.reverse
end

ステップ4:Refactor – 冗長性を排除し構造を磨く

この例ではコードは既に簡潔だが、他のケースでは:

  • 条件の共通化
  • 変数抽出
  • メソッドの分割
    などを実施する。

3. 原則の力:なぜ「少しずつ」進めるのか

  • 実装前に期待(仕様)を明確化することで、責務がシンプルになる
  • 過剰設計を防ぎ、“使われるコード”のみを書く習慣がつく
  • 小さなテストサイクルが、信頼性と可読性を継続的に確保

👉 三原則とは、「余計なことをしない」ための思考のフレームワーク


4. 三原則 × 設計改善のフロー

ステップ 内容 設計効果
🔴 Red 仕様を書く 要求の明示
🟢 Green 必要最低限でテストを通す 実装の最小化
🔁 Refactor 動作を保ったまま改善する 構造の洗練・再利用性の向上

設計判断フロー

① この処理に対してテストが書けるか? → NO → 設計が不明確かもしれない

② テストのために多くの依存を作っていないか? → YES → 責務が大きすぎる

③ 「仕様 → 実装 →改善」の順序が保たれているか? → YES → 三原則通り

④ テストが書きやすい設計になっているか? → YES → 結合が適切に制御されている

よくあるミスと対策

❌ 先に実装を書き、後からテストを合わせる

→ ✅ テストは 設計そのものを定義する仕様書。後付けでは本末転倒


❌ テストを通すために「一発で完璧な実装」をしようとする

→ ✅ Greenは「動けばよい」。Refactorで設計する習慣をつける


❌ テストケースが冗長で読みづらい

→ ✅ 共通化や条件の分離をRefactorステップで整理


結語

TDD三原則は、コードを書くためのルールではない。
それは**“コードの意味と目的を明確にするための、思考と設計のリズム”**である。

  • 最初に仕様を書く
  • それを通す最小限の実装を書く
  • 継続的に構造を洗練する

TDDとは、
“機能するコードではなく、意味を持つ構造をつくるための設計原則である。”

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?