イテレーション 12 ふりかえり
概要
| 項目 |
内容 |
| イテレーション |
12 |
| 期間 |
Week 23-24(2 週間) |
| ゴール |
Clojure 版を Python 版から展開し、TDD で実装する |
| 実績 SP |
5 / 5 SP(達成率 100%) |
KPT
Keep(良かったこと・続けること)
- IT-11 引き継ぎ事項の完全反映:
.gitignore(target/、.clj-kondo/、.lsp/、.cpcache/)初期整備・Leiningen 設定・CI テンプレート参照・レートリミット対策のコミット細分化を DoD に明記し、全て達成した
- Clojure 関数型スタイルの積極活用:
loop/recur(末尾再帰最適化)、defrecord/defprotocol(データ型)、atom(可変状態管理)、lazy-seq(遅延評価)、map/filter/reduce(高階関数)など Clojure 固有の機能を全章で活用した
- 50 テスト・204 アサーション全パス:
clojure.test(deftest + is マクロ)で全テストが通過し、品質基準を達成した
- mkdocs ビルド成功確認:
npx gulp mkdocs:build(Docker 経由)で全 9 章のドキュメントビルドが成功した
- 記事と差分チェックの同時実施: IT-11 のふりかえりで挙げた改善事項を反映し、章の TDD 実装コーディング完了後に記事執筆と Python 版差分チェックを同タスクで実施した
- 不変データ構造の一貫した活用: Clojure の
vector・list・map・set をデフォルトとして使用し、可変状態は atom で最小限に管理する設計方針を一貫して維持した
Problem(課題・改善すべきこと)
- worktree マージ時の mkdocs.yml コンフリクト: 複数の worktree で並行作業を行った結果、
mkdocs.yml の nav セクションでコンフリクトが発生し、手動解消が必要だった。worktree 間での共有ファイル(mkdocs.yml、docs/development/index.md)の編集タイミングを調整する仕組みが不足していた
- テスト数が他言語版より少ない(50 件): F#(242 件)、Scala(125 件)、Rust(285 件)と比較して、Clojure 版のテスト数は 50 件と少なめだった。Clojure の
is マクロが 1 テスト内に複数のアサーションをまとめやすい設計のため、テスト件数は少ないがアサーション数(204)でカバレッジを確保している
- Lisp 系構文の学習コスト: S 式ベースの構文は他の言語と大きく異なるため、記事の読者にとってコード例の理解にハードルがある可能性がある
Try(次のイテレーションで試したいこと)
- worktree マージ戦略の確立:
mkdocs.yml や docs/development/index.md など共有ファイルの変更は、マージ直前に最新の develop ブランチを取り込んでから編集する手順を標準化する
- Elixir(IT-13)向け事前準備: Elixir の
mix ビルドツール・ExUnit テストフレームワーク・パターンマッチ・パイプ演算子(|>)の活用方針を事前に確定する。flake.nix の Elixir devShell 設定を確認する
- テスト粒度の指針策定: テスト件数とアサーション数のバランスについて、言語ごとのテストフレームワーク特性を考慮した品質基準を検討する
- ふりかえりファイルは独立作成を維持:
retrospective-N.md として必ず独立ファイルを作成し、iteration_plan-N.md とは分離して管理する(IT-11 からの継続)
ベロシティ
| イテレーション |
計画 SP |
実績 SP |
達成率 |
| 1(Python) |
5 |
5 |
100% |
| 2(TypeScript) |
3 |
3 |
100% |
| 3(Java) |
3 |
3 |
100% |
| 4(C#) |
3 |
3 |
100% |
| 5(Ruby) |
3 |
3 |
100% |
| 6(PHP) |
3 |
3 |
100% |
| 7(Go) |
3 |
3 |
100% |
| 8(C) |
5 |
5 |
100% |
| 9(Rust) |
5 |
5 |
100% |
| 10(F#) |
5 |
5 |
100% |
| 11(Scala) |
5 |
5 |
100% |
| 12(Clojure) |
5 |
5 |
100% |
| 合計 |
48 |
48 |
100% |
累積 SP: 48 / 66(Phase 1: 20/20 完了、Phase 2: 28/38 = 73.7%)
品質メトリクス
| メトリクス |
値 |
| テスト件数(Clojure 版) |
50 |
| アサーション数 |
204 |
| テスト通過率 |
100%(50/50) |
| 作成ファイル数 |
実装 9(章ごとの Clojure ファイル)+ テスト 9 + 記事 10(9章 + index.md)+ CI 1 = 29 |
| テストフレームワーク |
clojure.test(deftest + is マクロ) |
| ビルドツール |
Leiningen(lein) |
| mkdocs ビルド |
成功(Docker 経由 npx gulp mkdocs:build) |
次のイテレーションへの引き継ぎ
- IT-13(Elixir 版):
apps/elixir/ に Elixir 実装を構築する(5 SP)
- 環境構築の事前確認:
mix(Elixir ビルドツール)と flake.nix の Elixir シェル設定を事前に確認する
.gitignore の初期整備: プロジェクト作成時に _build/、deps/、.elixir_ls/ 等のビルド成果物・ツール生成ファイルを .gitignore に登録する
- 参照実装の活用: Python 版 + F# 版(関数型)+ Clojure 版(関数型・JVM)の 3 言語が参照として利用可能
- CI テンプレート:
ci-clojure.yml を参考に ci-elixir.yml(mix test)を整備する
- 記事と差分チェックの同時実施: 実装完了後すぐに Python 版と差分チェックを行い、TDD セクション・フローチャートを含む記事を完成させる
- Elixir 固有の実装方針決定: パターンマッチ・パイプ演算子・プロトコル・ビヘイビア・GenServer の活用方針を事前に確定する
- worktree マージ戦略: 共有ファイル(
mkdocs.yml、docs/development/index.md)の変更はマージ直前に最新 develop を取り込んでから実施する
更新履歴
| 日付 |
更新内容 |
更新者 |
| 2026-04-13 |
初版作成 |
- |