Skip to content

イテレーション 4 完了報告書

プロジェクト概要

項目 内容
プロジェクト名 テスト駆動開発から始めるXX入門
イテレーション 4
対象言語 Ruby
開始日 2026-03-02
終了日 2026-03-02
作業日数 1 日(AI + Codex 自動化)

要員

項目 予定 実績
作業日数 10 日 1 日
開発者 1 名 + AI 1 名 + AI + Codex

指標

ビルド結果

項目 結果
テスト(Minitest) ✅ 39 passed, 72 assertions
ベンチマーク(Minitest::Benchmark) ✅ 3 passed
RuboCop ✅ 25 files inspected, no offenses
カバレッジ(SimpleCov) ✅ Line 95.95%, Branch 100%

リリースバーンダウン

リリースバーンダウン(計画 vs 実績)

時点 計画残 SP 実績残 SP
開始 149 149
IT1 139 139
IT2 129 129
IT3 116 116
IT4 103 103
IT5 93 -
IT6 83 -
IT7 73 -
IT8 60 -
IT9 47 -
IT10 34 -
IT11 21 -
IT12 0 -

イテレーションバーンダウン

IT4 バーンダウン

時点 計画残 SP 実績残 SP
開始 13 13
環境構築 12 12
第1部 9 9
第2部 6 6
第3部 3 3
第4部 0 0

ベロシティ

ベロシティ推移

イテレーション 実績 SP 平均 SP
IT1 10 10
IT2 10 10
IT3 13 11
IT4 13 11.5
イテレーション 計画 SP 実績 SP 累計 SP
IT1(Java) 10 10 10
IT2(Python) 10 10 20
IT3(Node/TS) 13 13 33
IT4(Ruby) 13 13 46
平均 11.5 11.5

実施内容と評価

完了ストーリー一覧

ID ストーリー 結果 予定 SP 完了 SP
US-004 Ruby の TDD 入門記事の執筆と実装 ✅ 完了 13 13

達成率

項目 計画 実績 達成率
ストーリーポイント 13 SP 13 SP 100%
ストーリー数 1 1 100%
記事数 12 章 12 章 100%
テスト数 - 39 -

成果物詳細

US-004: Ruby の TDD 入門記事の執筆と実装

記事

ファイル 章タイトル 行数
01-todo-list-and-first-test.md TODO リストと最初のテスト 231
02-fake-it-and-triangulation.md 仮実装と三角測量 238
03-obvious-implementation-and-refactoring.md 明白な実装とリファクタリング 228
04-version-control-and-conventional-commits.md バージョン管理と Conventional Commits 112
05-package-management-and-static-analysis.md パッケージ管理と静的解析 287
06-task-runner-and-ci-cd.md タスクランナーと CI/CD 248
07-encapsulation-and-polymorphism.md カプセル化とポリモーフィズム 279
08-design-patterns.md デザインパターンの適用 329
09-solid-principles-and-module-design.md SOLID 原則とモジュール設計 196
10-higher-order-functions-and-composition.md 高階関数と関数合成 175
11-immutable-data-and-pipeline.md 不変データとパイプライン処理 233
12-error-handling-and-type-safety.md エラーハンドリングと型安全性 398
合計 2,954

実装

apps/ruby/lib/
├── fizz_buzz/
│   ├── fizz_buzz.rb                      (バレルファイル)
│   ├── domain/
│   │   ├── model/
│   │   │   ├── fizz_buzz_value.rb        (値オブジェクト + パターンマッチング)
│   │   │   └── fizz_buzz_list.rb         (コレクション + FP メソッド)
│   │   └── type/
│   │       ├── fizz_buzz_type.rb         (基底 + ファクトリ + FizzBuzzTypeName)
│   │       ├── fizz_buzz_type_01.rb      (タイプ 1: 通常)
│   │       ├── fizz_buzz_type_02.rb      (タイプ 2: 数値のみ)
│   │       └── fizz_buzz_type_03.rb      (タイプ 3: FizzBuzz のみ)
│   └── application/
│       ├── fizz_buzz_command.rb           (コマンドインターフェース)
│       ├── fizz_buzz_value_command.rb     (単一値コマンド)
│       └── fizz_buzz_list_command.rb      (リストコマンド + then パイプライン)
└── fibonacci/
    ├── fibonacci.rb                       (バレルファイル)
    ├── command.rb                         (Strategy パターン)
    ├── recursive.rb                       (再帰 + メモ化)
    ├── loop.rb                            (ループ)
    └── general_term.rb                    (一般項: 数学公式)

コード規模

対象 ファイル数 行数
ソースコード 15 290
テストコード 7 723
合計 22 1,013

主要な設計パターン

パターン 適用箇所
Strategy FizzBuzzType + 具体タイプ、Fibonacci::Command
Factory Method FizzBuzzType.create() / try_create()
Value Object FizzBuzzValue(==, eql?, hash, deconstruct_keys
First-Class Collection FizzBuzzList(Enumerable Mix-in + FP メソッド)
Command FizzBuzzCommand + 実装クラス

Java/Python/Node との対比

概念 Java Python TypeScript Ruby
抽象クラス abstract class abc.ABC abstract class 基底クラス + NotImplementedError
テストフレームワーク JUnit 5 pytest Vitest Minitest
パッケージ管理 Maven/Gradle uv/poetry npm Bundler
静的解析 Checkstyle + PMD Ruff + mypy ESLint + tsc RuboCop
不変性 final @dataclass(frozen=True) readonly + Object.freeze() freeze + dup.freeze
Null 安全 Optional<T> T \| None T \| undefined nil + &.
列挙型 enum enum.Enum enum Module 定数
関数合成 Function.andThen() functools.reduce compose() / pipe() >> / << 演算子
ベンチマーク JMH timeit カスタム Minitest::Benchmark

品質メトリクス

テストカバレッジ

メトリクス 目標 実績 判定
Line Coverage 80%+ 95.95% (142/148)
Branch Coverage 80%+ 100.0% (20/20)

テスト数

テストファイル テスト数 アサーション数
fizz_buzz_type_test.rb 13 18
fizz_buzz_list_test.rb 13 17
fizz_buzz_value_test.rb 6 7
fizz_buzz_command_test.rb 3 5
fibonacci_test.rb 4 25
合計 39 72

コード品質

ツール 結果
RuboCop 25 files inspected, no offenses
SimpleCov Line 95.95%
SimpleCov Branch 100.0%

コミット統計

種別
feat 4
docs 4
ci 1
chore 1
合計 10

コード変更量

対象 追加行数
ソース + テスト 1,013 行
記事 2,954 行
CI 設定 45 行

イテレーションレビュー

成功した点

  • Codex 分業の完全定着: 4 イテレーション通して Claude + Codex の分業が安定稼働。受入時の手戻りゼロ
  • 4 エピソード言語の完走: Ruby のエピソード 4(Fibonacci + ベンチマーク)を含む全 12 章を完了
  • Ruby 固有機能の活用: Enumerable Mix-in、ブロック/Proc/Lambda、パターンマッチング(case/in)、then パイプライン
  • Branch Coverage 100%: 条件分岐の全パスをテストでカバー
  • CI 早期導入: ruby-ci.yml を開発初期に追加し品質ゲートを確立

技術的課題と解決策

課題 状態 解決策
RuboCop Style/OneClassPerFile ✅ 解決 rubocop:disable コメントで対応
Enumerable の戻り値が Array ✅ 解決 select_type 等の独自メソッドで FizzBuzzList を返す
基底クラスの未カバー行 ⚠️ 許容 NotImplementedError は意図的に未テスト

アクションアイテム

# アクション 担当 期限 状態
1 Release 1.0 クロスレビュー AI IT4 バッファ 未着手
2 MkDocs 全体プレビュー確認 AI IT4 バッファ 未着手
3 Release 1.0 タグ付けとリリースノート作成 AI IT4 バッファ 未着手

リリース状況

Release 1.0 達成条件

条件 状態
Java 全 12 章の記事・実装完了
Python 全 12 章の記事・実装完了
Node(JS/TS)全 12 章の記事・実装完了
Ruby 全 12 章の記事・実装完了
全記事のレビュー完了 未着手
MkDocs プレビュー確認 ✅(各言語ごと)

全体リリース進捗

Phase 1 進捗

言語 計画 SP 実績 SP
IT1 Java 10 10
IT2 Python 10 10
IT3 Node 13 13
IT4 Ruby 13 13
フェーズ 計画 SP 完了 SP 残 SP 進捗率
Phase 1 46 46 0 100%
Phase 2 43 0 43 0%
Phase 3 60 0 60 0%
全体 149 46 103 31%

IT1-IT4 比較

メトリクス IT1(Java) IT2(Python) IT3(Node/TS) IT4(Ruby)
言語 Java Python TypeScript Ruby
SP 10 10 13 13
達成率 100% 100% 100% 100%
テスト数 27 23 53 39
カバレッジ 97%+ 98%+ 97.27% 95.95%
ソース行数 約 300 約 280 312 290
テスト行数 約 250 約 220 416 723
記事行数 約 2,500 約 2,700 2,971 2,954
コミット数 8 7 8 10
テスト/ソース比 0.83 0.79 1.33 2.49

総括

IT4(Ruby)では、13 SP の計画を 100% 達成し、Phase 1(Java、Python、Node/TS、Ruby)の全 4 言語 × 12 章 = 48 章の記事執筆と実装を完了した。

Ruby は 4 エピソード言語として、Fibonacci 3 アルゴリズム(再帰/ループ/一般項)のベンチマーク比較を含む充実した第 4 部を実現できた。Enumerable Mix-in、ブロック/Proc/Lambda、パターンマッチング(Ruby 3.x case/in)など、Ruby 固有の機能も十分に活用した。

4 イテレーション(IT1-IT4)の実績ベロシティは平均 11.5 SP/イテレーションとなり、Phase 1 の全 46 SP を計画通り消化した。Release 1.0 のリリース準備(クロスレビュー、MkDocs 確認、タグ付け)を残すのみである。


更新履歴

日付 更新内容 更新者
2026-03-02 初版作成 AI

関連ドキュメント