イテレーション 8 計画
概要
| 項目 |
内容 |
| イテレーション |
8 |
| 期間 |
Week 15-16(2 週間) |
| ゴール |
C# と F# それぞれ全 12 章の記事執筆と実装を完了し、Phase 2 を完了する |
| 目標 SP |
13 |
ゴール
イテレーション終了時の達成状態
- 記事(C#): C# の 12 章すべてが
docs/article/csharp/ に執筆完了
- 記事(F#): F# の 12 章すべてが
docs/article/fsharp/ に執筆完了
- 実装:
apps/dotnet/ に C# と F# の TDD 実装が動作する状態
- 品質: テスト全パス、dotnet-format 違反ゼロ
- Phase 2 完了: IT5-IT8 の全言語が完了し、Release 2.0 準備完了
成功基準
ベロシティトレンド分析(7 イテレーション実績)
実績データ
| イテレーション |
言語 |
計画 SP |
実績 SP |
達成率 |
| IT1 |
Java |
10 |
10 |
100% |
| IT2 |
Python |
10 |
10 |
100% |
| IT3 |
Node(JS/TS) |
13 |
13 |
100% |
| IT4 |
Ruby |
13 |
13 |
100% |
| IT5 |
Go |
10 |
10 |
100% |
| IT6 |
PHP |
10 |
10 |
100% |
| IT7 |
Rust |
10 |
10 |
100% |
| 平均 |
|
10.9 |
10.9 |
100% |
IT8 見通し
- C# は 3 エピソード言語(Wiki エピソード 1-3)、第 4 部は C# の LINQ / デリゲート / ラムダで構成
- F# は 4 エピソード言語(Wiki エピソード 1-4)
- 両言語とも .NET 共通基盤でテスティングフレームワーク(xUnit)を共有
- Wiki に C# 3,082 行 + F# 2,863 行の参照資料が揃っている
- Nix 環境で .NET SDK 8.0.416 が利用可能(
nix develop .#dotnet)
ユーザーストーリー
対象ストーリー
| ID |
ユーザーストーリー |
SP |
優先度 |
| US-008 |
C#/F#(dotnet)の TDD 入門記事の執筆と実装 |
13 |
中 |
| 合計 |
|
13 |
|
ストーリー詳細
US-008: C#/F#(dotnet)の TDD 入門記事の執筆と実装
ストーリー:
プログラミング学習者として、C# と F# それぞれで TDD を体験する記事を読みたい。なぜなら、C# の OOP 機能と F# の関数型プログラミング機能を独立した記事として学べるからだ。
受入条件:
- C# と F# それぞれ独立した 12 章構成の記事が存在する
- FizzBuzz 問題を題材に TDD サイクル(Red-Green-Refactor)が体験できる
- 開発環境の構築手順(.NET SDK、NuGet、dotnet-format)が記載されている
- C# の OOP 設計(カプセル化、interface/abstract class、LINQ)が段階的に解説されている
- F# の関数型プログラミング(パイプライン演算子、判別共用体、パターンマッチ)が段階的に解説されている
- 記事内のコード例と apps/dotnet/ の実装が一致している
タスク
0. 環境構築(1 SP)
| # |
タスク |
見積もり |
担当 |
状態 |
| 0.1 |
apps/dotnet/ に .NET ソリューション + C# xUnit + F# xUnit プロジェクトを作成 |
0.5h |
AI |
[ ] |
| 0.2 |
.gitignore 先行設定(bin/, obj/, .vs/ 除外) |
0.5h |
AI |
[ ] |
| 0.3 |
テスト構成の確認(dotnet test) |
0.5h |
AI |
[ ] |
| 0.4 |
Makefile 作成(check タスク統合) |
0.5h |
AI |
[ ] |
| 0.5 |
CI ワークフロー(.github/workflows/dotnet-ci.yml)の作成 |
0.5h |
AI |
[ ] |
| 0.6 |
docs/article/csharp/index.md と docs/article/fsharp/index.md を作成 |
0.5h |
AI |
[ ] |
小計: 3h(理想時間)
C# 記事(docs/article/csharp/)
1. C# 第 1 部: TDD の基本サイクル(3 SP)
| # |
タスク |
見積もり |
担当 |
状態 |
| 1.1 |
章 1: TODO リストと最初のテスト - 執筆 |
2h |
AI |
[ ] |
| 1.2 |
章 1: TODO リストと最初のテスト - 実装 |
1h |
Codex |
[ ] |
| 1.3 |
章 2: 仮実装と三角測量 - 執筆 |
2h |
AI |
[ ] |
| 1.4 |
章 2: 仮実装と三角測量 - 実装 |
1h |
Codex |
[ ] |
| 1.5 |
章 3: 明白な実装とリファクタリング - 執筆 |
2h |
AI |
[ ] |
| 1.6 |
章 3: 明白な実装とリファクタリング - 実装 |
1h |
Codex |
[ ] |
参照: tmp/k2works-wiki/記事/開発/テスト駆動開発から始めるXX入門/テスト駆動開発から始めるCSharp入門1.md
2. C# 第 2 部: 開発環境と自動化(3 SP)
| # |
タスク |
見積もり |
担当 |
状態 |
| 2.1 |
章 4: バージョン管理と Conventional Commits - 執筆 |
2h |
AI |
[ ] |
| 2.2 |
章 5: パッケージ管理と静的解析(NuGet、dotnet-format)- 執筆 |
2h |
AI |
[ ] |
| 2.3 |
章 6: タスクランナーと CI/CD(Makefile、GitHub Actions)- 執筆 |
2h |
AI |
[ ] |
参照: tmp/k2works-wiki/記事/開発/テスト駆動開発から始めるXX入門/テスト駆動開発から始めるCSharp入門2.md
3. C# 第 3 部: オブジェクト指向設計(3 SP)
| # |
タスク |
見積もり |
担当 |
状態 |
| 3.1 |
章 7: カプセル化とポリモーフィズム - 執筆・実装 |
3h |
AI |
[ ] |
| 3.2 |
章 8: デザインパターンの適用 - 執筆・実装 |
3h |
AI |
[ ] |
| 3.3 |
章 9: SOLID 原則とモジュール設計 - 執筆・実装 |
3h |
AI |
[ ] |
参照: tmp/k2works-wiki/記事/開発/テスト駆動開発から始めるXX入門/テスト駆動開発から始めるCSharp入門3.md
4. C# 第 4 部: 関数型プログラミング(0 SP — バッファ内)
C# は 3 エピソード言語のため、第 4 部は C# で利用可能な FP 機能の範囲で執筆する。
| # |
タスク |
見積もり |
担当 |
状態 |
| 4.1 |
章 10: 高階関数と関数合成(LINQ、デリゲート、ラムダ)- 執筆・実装 |
2h |
AI |
[ ] |
| 4.2 |
章 11: 不変データとパイプライン処理(LINQ チェーン、Immutable Collections)- 執筆・実装 |
2h |
AI |
[ ] |
| 4.3 |
章 12: エラーハンドリングと型安全性(Nullable 参照型、例外処理)- 執筆・実装 |
2h |
AI |
[ ] |
F# 記事(docs/article/fsharp/)
5. F# 第 1 部: TDD の基本サイクル(3 SP)
| # |
タスク |
見積もり |
担当 |
状態 |
| 5.1 |
章 1: TODO リストと最初のテスト - 執筆 |
2h |
AI |
[ ] |
| 5.2 |
章 1: TODO リストと最初のテスト - 実装 |
1h |
Codex |
[ ] |
| 5.3 |
章 2: 仮実装と三角測量 - 執筆 |
2h |
AI |
[ ] |
| 5.4 |
章 2: 仮実装と三角測量 - 実装 |
1h |
Codex |
[ ] |
| 5.5 |
章 3: 明白な実装とリファクタリング - 執筆 |
2h |
AI |
[ ] |
| 5.6 |
章 3: 明白な実装とリファクタリング - 実装 |
1h |
Codex |
[ ] |
参照: tmp/k2works-wiki/WIP/テスト駆動開発から始めるXX入門/テスト駆動開発から始めるFSharp入門1.md
6. F# 第 2 部: 開発環境と自動化(3 SP)
| # |
タスク |
見積もり |
担当 |
状態 |
| 6.1 |
章 4: バージョン管理と Conventional Commits - 執筆 |
2h |
AI |
[ ] |
| 6.2 |
章 5: パッケージ管理と静的解析 - 執筆 |
2h |
AI |
[ ] |
| 6.3 |
章 6: タスクランナーと CI/CD - 執筆 |
2h |
AI |
[ ] |
参照: tmp/k2works-wiki/WIP/テスト駆動開発から始めるXX入門/テスト駆動開発から始めるFSharp入門2.md
7. F# 第 3 部: オブジェクト指向プログラミングの関数型アプローチ(3 SP)
| # |
タスク |
見積もり |
担当 |
状態 |
| 7.1 |
章 7: レコード型とモジュールによるカプセル化 - 執筆・実装 |
3h |
AI |
[ ] |
| 7.2 |
章 8: 判別共用体とパターンマッチ - 執筆・実装 |
3h |
AI |
[ ] |
| 7.3 |
章 9: モジュール設計と型による設計 - 執筆・実装 |
3h |
AI |
[ ] |
参照: tmp/k2works-wiki/WIP/テスト駆動開発から始めるXX入門/テスト駆動開発から始めるFSharp入門3.md
8. F# 第 4 部: 関数型プログラミング(3 SP)
| # |
タスク |
見積もり |
担当 |
状態 |
| 8.1 |
章 10: 高階関数と関数合成(パイプライン演算子、部分適用)- 執筆・実装 |
2h |
AI |
[ ] |
| 8.2 |
章 11: 不変データとコレクション処理(List / Seq モジュール、fold / map)- 執筆・実装 |
2h |
AI |
[ ] |
| 8.3 |
章 12: エラーハンドリングと型安全性(Result / Option、計算式)- 執筆・実装 |
2h |
AI |
[ ] |
| 8.4 |
記事と実装の同期確認 |
1h |
AI |
[ ] |
| 8.5 |
mkdocs.yml 更新とプレビュー確認 |
0.5h |
AI |
[ ] |
参照: tmp/k2works-wiki/WIP/テスト駆動開発から始めるXX入門/テスト駆動開発から始めるFSharp入門4.md
タスク合計
| カテゴリ |
SP |
状態 |
| 環境構築 |
1 |
[ ] |
| C# 第 1 部: TDD の基本サイクル |
3 |
[ ] |
| C# 第 2 部: 開発環境と自動化 |
0 |
[ ] |
| C# 第 3 部: オブジェクト指向設計 |
3 |
[ ] |
| C# 第 4 部: 関数型プログラミング |
0 |
[ ] |
| F# 第 1 部: TDD の基本サイクル |
3 |
[ ] |
| F# 第 2 部: 開発環境と自動化 |
0 |
[ ] |
| F# 第 3 部: OOP の関数型アプローチ |
3 |
[ ] |
| F# 第 4 部: 関数型プログラミング |
0 |
[ ] |
| 合計 |
13 |
|
設計メモ
ディレクトリ構成
apps/dotnet/
├── FizzBuzz.sln
├── Makefile
├── .gitignore
├── FizzBuzz/ (C# classlib)
│ ├── FizzBuzz.csproj
│ ├── FizzBuzz.cs (公開 API)
│ ├── Domain/
│ │ ├── Model/
│ │ │ ├── FizzBuzzValue.cs (値オブジェクト)
│ │ │ └── FizzBuzzList.cs (ファーストクラスコレクション)
│ │ └── Type/
│ │ ├── IFizzBuzzType.cs (インターフェース)
│ │ ├── FizzBuzzType01.cs (タイプ 1: 通常)
│ │ ├── FizzBuzzType02.cs (タイプ 2: 数値のみ)
│ │ └── FizzBuzzType03.cs (タイプ 3: FizzBuzz のみ)
│ └── Application/
│ ├── IFizzBuzzCommand.cs (コマンドインターフェース)
│ ├── FizzBuzzValueCommand.cs (単一値コマンド)
│ └── FizzBuzzListCommand.cs (リストコマンド)
├── FizzBuzzTest/ (C# xUnit tests)
│ ├── FizzBuzzTest.csproj
│ └── FizzBuzzTest.cs
├── FizzBuzzFSharp/ (F# classlib)
│ ├── FizzBuzzFSharp.fsproj
│ ├── FizzBuzz.fs (公開 API)
│ ├── Domain.fs (ドメインモデル)
│ └── Application.fs (アプリケーション層)
└── FizzBuzzFSharpTest/ (F# xUnit tests)
├── FizzBuzzFSharpTest.fsproj
└── FizzBuzzTest.fs
docs/article/
├── csharp/
│ ├── index.md (C# 記事トップ)
│ ├── chapter01.md ... chapter12.md (12 章)
└── fsharp/
├── index.md (F# 記事トップ)
└── chapter01.md ... chapter12.md (12 章)
C# 固有の特徴(12 章構成)
| 機能 |
章 |
内容 |
| プロパティ(Property) |
1-3 |
auto-implemented properties、get/set |
| var / 型推論 |
1-3 |
ローカル変数の型推論 |
| interface |
7, 9 |
明示的インターフェース実装 |
| abstract class |
7, 9 |
抽象クラスと仮想メソッド |
| namespace |
5, 9 |
名前空間によるモジュール分割 |
| NuGet |
5 |
パッケージ管理 |
| LINQ |
10-12 |
クエリ構文、メソッド構文 |
| デリゲート / ラムダ |
10 |
Action、Func、ラムダ式 |
| Nullable 参照型 |
12 |
null 安全性 |
| パターンマッチ |
12 |
switch 式、型パターン |
F# 固有の特徴(12 章構成)
| 機能 |
章 |
内容 |
| let バインディング |
1-3 |
不変バインディング、関数定義 |
| パイプライン演算子(|>) |
3, 10 |
関数合成、データ変換 |
| レコード型 |
7 |
不変データ構造 |
| 判別共用体 |
8, 11 |
代数的データ型 |
| パターンマッチ |
3, 8-12 |
match 式、アクティブパターン |
| モジュール |
5, 9 |
モジュールによる名前空間分割 |
| 部分適用 / カリー化 |
10 |
関数の部分適用 |
| List / Seq モジュール |
11 |
map / filter / fold / collect |
| Result / Option |
12 |
関数型エラーハンドリング |
| 計算式 |
12 |
computation expressions |
Nix 環境
| パッケージ |
用途 |
| dotnet-sdk |
.NET SDK 8.0(C# + F# コンパイラ、NuGet、dotnet CLI) |
IT1-IT7 からの学び(適用事項)
| 学び |
IT8 での適用 |
| 1 章単位の Codex 委託が最適 |
同じ粒度で委託する |
| 部完了時に進捗更新 |
部完了ごとに進捗ドキュメントを更新する |
| Nix 環境を必ず使用する |
nix develop .#dotnet で全操作を実行 |
| fullCheck を CI で自動化推奨 |
Makefile で lint + test を統合し CI で実行 |
| テンプレート再利用が効果的 |
IT1-IT7 の記事テンプレートを C#/F# 向けに適用する |
| C#/F# 記事は分離する |
docs/article/csharp/ と docs/article/fsharp/ に分離 |
| GitHub Issue の同期を忘れない |
完了時に Issue #8 をクローズする |
| .gitignore を最初に作成する(IT7 の学び) |
bin/, obj/, .vs/ を最初に除外設定 |
リスクと対策
| リスク |
影響度 |
対策 |
| C# と F# の 2 言語で各 12 章の作業量 |
高 |
テンプレート再利用と Wiki 参照で効率化 |
| .NET SDK 環境構築の Nix 対応 |
中 |
Nix 環境で動作確認済み(8.0.416) |
| F# の関数型概念の記事説明が複雑 |
中 |
判別共用体やパイプラインは図示で理解を補助 |
| bin/ obj/ の誤コミット |
低 |
最初に .gitignore 設定(IT7 の学び) |
完了条件
Definition of Done
更新履歴
| 日付 |
更新内容 |
更新者 |
| 2026-03-02 |
初版作成 |
AI |
| 2026-03-02 |
C#/F# 各 12 章の独立構成に変更 |
AI |
関連ドキュメント