イテレーション 9 計画
概要
| 項目 |
内容 |
| イテレーション |
9 |
| 期間 |
Week 17-18(2 週間) |
| ゴール |
Clojure の全 12 章の記事執筆と実装を完了し、Phase 3 の最初のイテレーションを成功させる |
| 目標 SP |
13 |
ゴール
イテレーション終了時の達成状態
- 記事: Clojure の 12 章すべてが
docs/article/clojure/ に執筆完了
- 実装:
apps/clojure/ に Clojure の TDD 実装が動作する状態
- 品質: テスト全パス、cljfmt 違反ゼロ
- Phase 3 開始: IT9 が完了し、Phase 3 のテンプレートが確立
成功基準
ベロシティトレンド分析(8 イテレーション実績)
実績データ
| イテレーション |
言語 |
計画 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% |
| IT8 |
C#/F# |
13 |
13 |
100% |
| 平均 |
|
11.1 |
11.1 |
100% |
IT9 見通し
- Clojure は 4 エピソード言語(Wiki エピソード 1-4)、第 4 部はネイティブの関数型プログラミングで構成
- Wiki に 3,436 行の参照資料が揃っている
- Nix 環境で Clojure + Leiningen + Babashka + clojure-lsp が利用可能(
nix develop .#clojure)
- LISP 系言語のため OOP 部分(第 3 部)はプロトコルとマルチメソッドで代替
ユーザーストーリー
対象ストーリー
| ID |
ユーザーストーリー |
SP |
優先度 |
| US-009 |
Clojure の TDD 入門記事の執筆と実装 |
13 |
低 |
| 合計 |
|
13 |
|
ストーリー詳細
US-009: Clojure の TDD 入門記事の執筆と実装
ストーリー:
プログラミング学習者として、Clojure で TDD を体験する記事を読みたい。なぜなら、LISP 系言語の関数型プログラミングと不変データ構造を TDD で学べるからだ。
受入条件:
- 12 章構成の記事が docs/article/clojure/ に存在する
- FizzBuzz 問題を題材に TDD サイクル(Red-Green-Refactor)が体験できる
- 開発環境の構築手順(Clojure、Leiningen、cljfmt)が記載されている
- Clojure のプロトコルとマルチメソッドが段階的に解説されている
- Clojure の関数型プログラミング(パイプライン、永続データ構造、高階関数)が段階的に解説されている
- 記事内のコード例と apps/clojure/ の実装が一致している
タスク
0. 環境構築(1 SP)
| # |
タスク |
見積もり |
担当 |
状態 |
| 0.1 |
apps/clojure/ に Leiningen プロジェクトを作成 |
0.5h |
AI |
[x] |
| 0.2 |
.gitignore 先行設定(target/, .lein-*, .nrepl-port 除外) |
0.5h |
AI |
[x] |
| 0.3 |
テスト構成の確認(lein test) |
0.5h |
AI |
[x] |
| 0.4 |
Makefile 作成(check タスク統合) |
0.5h |
AI |
[x] |
| 0.5 |
CI ワークフロー(.github/workflows/clojure-ci.yml)の作成 |
0.5h |
AI |
[x] |
| 0.6 |
docs/article/clojure/index.md を作成 |
0.5h |
AI |
[x] |
小計: 3h(理想時間)
1. 第 1 部: TDD の基本サイクル(3 SP)
| # |
タスク |
見積もり |
担当 |
状態 |
| 1.1 |
章 1: TODO リストと最初のテスト - 執筆 |
2h |
AI |
[x] |
| 1.2 |
章 1: TODO リストと最初のテスト - 実装 |
1h |
AI |
[x] |
| 1.3 |
章 2: 仮実装と三角測量 - 執筆 |
2h |
AI |
[x] |
| 1.4 |
章 2: 仮実装と三角測量 - 実装 |
1h |
AI |
[x] |
| 1.5 |
章 3: 明白な実装とリファクタリング - 執筆 |
2h |
AI |
[x] |
| 1.6 |
章 3: 明白な実装とリファクタリング - 実装 |
1h |
AI |
[x] |
参照: tmp/k2works-wiki/WIP/テスト駆動開発から始めるXX入門/テスト駆動開発から始めるClojure入門1.md
2. 第 2 部: 開発環境と自動化(3 SP)
| # |
タスク |
見積もり |
担当 |
状態 |
| 2.1 |
章 4: バージョン管理と Conventional Commits - 執筆 |
2h |
AI |
[x] |
| 2.2 |
章 5: パッケージ管理と静的解析(Leiningen、cljfmt)- 執筆 |
2h |
AI |
[x] |
| 2.3 |
章 6: タスクランナーと CI/CD(Makefile、GitHub Actions)- 執筆 |
2h |
AI |
[x] |
参照: tmp/k2works-wiki/WIP/テスト駆動開発から始めるXX入門/テスト駆動開発から始めるClojure入門2.md
3. 第 3 部: オブジェクト指向設計(3 SP)
Clojure は LISP 系関数型言語のため、OOP 概念をプロトコル・マルチメソッド・レコードで表現する。
| # |
タスク |
見積もり |
担当 |
状態 |
| 3.1 |
章 7: プロトコルとレコードによるポリモーフィズム - 執筆・実装 |
3h |
AI |
[x] |
| 3.2 |
章 8: マルチメソッドとディスパッチ - 執筆・実装 |
3h |
AI |
[x] |
| 3.3 |
章 9: 名前空間とモジュール設計 - 執筆・実装 |
3h |
AI |
[x] |
参照: tmp/k2works-wiki/WIP/テスト駆動開発から始めるXX入門/テスト駆動開発から始めるClojure入門3.md
4. 第 4 部: 関数型プログラミング(3 SP)
| # |
タスク |
見積もり |
担当 |
状態 |
| 4.1 |
章 10: 高階関数と関数合成(スレッディングマクロ、部分適用)- 執筆・実装 |
2h |
AI |
[x] |
| 4.2 |
章 11: 永続データ構造とコレクション処理(map/filter/reduce、シーケンス抽象)- 執筆・実装 |
2h |
AI |
[x] |
| 4.3 |
章 12: エラーハンドリングと型安全性(ex-info、条件付き再起動、spec)- 執筆・実装 |
2h |
AI |
[x] |
| 4.4 |
記事と実装の同期確認 |
1h |
AI |
[x] |
| 4.5 |
mkdocs.yml 更新とプレビュー確認 |
0.5h |
AI |
[x] |
参照: tmp/k2works-wiki/WIP/テスト駆動開発から始めるXX入門/テスト駆動開発から始めるClojure入門4.md
タスク合計
| カテゴリ |
SP |
状態 |
| 環境構築 |
1 |
[x] |
| 第 1 部: TDD の基本サイクル |
3 |
[x] |
| 第 2 部: 開発環境と自動化 |
3 |
[x] |
| 第 3 部: オブジェクト指向設計 |
3 |
[x] |
| 第 4 部: 関数型プログラミング |
3 |
[x] |
| 合計 |
13 |
|
設計メモ
ディレクトリ構成
apps/clojure/
├── project.clj (Leiningen プロジェクトファイル)
├── Makefile
├── .gitignore
├── src/
│ └── fizzbuzz/
│ ├── core.clj (公開 API)
│ ├── domain/
│ │ ├── model.clj (値オブジェクト・コレクション)
│ │ └── type.clj (FizzBuzz タイプ — プロトコル・マルチメソッド)
│ └── application/
│ └── command.clj (コマンド関数)
└── test/
└── fizzbuzz/
└── core_test.clj (テスト)
docs/article/
└── clojure/
├── index.md (Clojure 記事トップ)
└── chapter01.md ... chapter12.md (12 章)
Clojure 固有の特徴(12 章構成)
| 機能 |
章 |
内容 |
| S 式・リテラル |
1-3 |
LISP 構文、ベクタ、マップ |
| def / defn |
1-3 |
不変バインディング、関数定義 |
| clojure.test |
1-3 |
deftest, is, testing マクロ |
| スレッディングマクロ(->、->>) |
3, 10 |
パイプライン処理 |
| プロトコル(defprotocol) |
7, 9 |
型クラスに類似したポリモーフィズム |
| レコード(defrecord) |
7, 9 |
構造化データ + プロトコル実装 |
| マルチメソッド(defmulti / defmethod) |
8 |
値ベースのディスパッチ |
| 名前空間(ns) |
5, 9 |
モジュール分割と依存管理 |
| 高階関数(map / filter / reduce) |
10-11 |
コレクション処理 |
| 部分適用(partial) |
10 |
関数の部分適用 |
| 永続データ構造 |
11 |
構造共有による不変コレクション |
| clojure.spec |
12 |
データバリデーションと型安全性 |
| ex-info / ex-data |
12 |
構造化エラーハンドリング |
Nix 環境
| パッケージ |
用途 |
| clojure |
Clojure ランタイム(JVM 上) |
| leiningen |
プロジェクト管理・ビルドツール |
| babashka |
スクリプティング用 Clojure |
| clojure-lsp |
Language Server Protocol 実装 |
IT1-IT8 からの学び(適用事項)
| 学び |
IT9 での適用 |
| .gitignore を最初に作成する |
target/, .lein-*, .nrepl-port を最初に除外設定 |
| Nix 環境を必ず使用する |
nix develop .#clojure で全操作を実行 |
| 部完了時に進捗更新 |
部完了ごとに進捗ドキュメントを更新する |
| Codex が利用不可の場合は直接実装に早期切り替え |
サンドボックス制限が発生した場合の代替フローを事前に定義 |
| テンプレート再利用が効果的 |
IT1-IT8 の記事テンプレートを LISP/関数型言語向けに適用する |
| GitHub Issue の同期を忘れない |
完了時に Issue #9 をクローズする |
| LISP 方言固有の概念に注力 |
S 式、マクロ、永続データ構造の記事説明に注力 |
| Phase 3 テンプレート確立 |
JVM 言語向けのテンプレートを確立し IT10 以降に活用 |
リスクと対策
| リスク |
影響度 |
対策 |
| LISP 構文に慣れていない読者への説明が複雑 |
高 |
S 式の段階的な導入と図示で理解を補助 |
| OOP 概念のプロトコル/マルチメソッドへの対応づけ |
中 |
他言語との比較表を記事内に設ける |
| Leiningen プロジェクト構成の JVM 依存問題 |
中 |
Nix 環境で JVM を含む全依存を管理 |
| cljfmt のフォーマットルール設定 |
低 |
デフォルト設定を使用し、必要に応じてカスタマイズ |
| target/ の誤コミット |
低 |
最初に .gitignore 設定(IT7 の学び) |
完了条件
Definition of Done
更新履歴
| 日付 |
更新内容 |
更新者 |
| 2026-03-02 |
初版作成 |
AI |
| 2026-03-03 |
IT9 全タスク完了(環境構築・記事執筆・実装・品質チェック) |
AI |
関連ドキュメント