イテレーション 11 計画
概要
| 項目 |
内容 |
| イテレーション |
11 |
| 期間 |
Week 21-22(2 週間) |
| ゴール |
Elixir の全 12 章の記事執筆と実装を完了し、BEAM/OTP 上の関数型言語の TDD パターンを確立する |
| 目標 SP |
13 |
ゴール
イテレーション終了時の達成状態
- 記事: Elixir の 12 章すべてが
docs/article/elixir/ に執筆完了
- 実装:
apps/elixir/ に Elixir の TDD 実装が動作する状態
- 品質: テスト全パス、Credo 違反ゼロ
- Phase 3 継続: IT11 が完了し、BEAM/OTP 上の関数型言語テンプレートが確立
成功基準
ベロシティトレンド分析(10 イテレーション実績)
実績データ
| イテレーション |
言語 |
計画 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% |
| IT9 |
Clojure |
13 |
13 |
100% |
| IT10 |
Scala |
13 |
13 |
100% |
| 平均 |
|
11.5 |
11.5 |
100% |
IT11 見通し
- Elixir は 4 エピソード言語(Wiki エピソード 1-4)、第 4 部は関数型プログラミングの実践的リファクタリングで構成
- Wiki に 2,926 行の参照資料が揃っている
- Nix 環境で Elixir + Erlang/OTP + elixir-ls が利用可能(
nix develop .#elixir)
- 純粋な関数型言語のため、第 3 部はプロトコル・ビヘイビアで OOP 概念を表現
- IT9(Clojure)と同じ関数型言語カテゴリだが、BEAM VM + アクターモデルが固有の特徴
ユーザーストーリー
対象ストーリー
| ID |
ユーザーストーリー |
SP |
優先度 |
| US-011 |
Elixir の TDD 入門記事の執筆と実装 |
13 |
低 |
| 合計 |
|
13 |
|
ストーリー詳細
US-011: Elixir の TDD 入門記事の執筆と実装
ストーリー:
プログラミング学習者として、Elixir で TDD を体験する記事を読みたい。なぜなら、BEAM/OTP 上の関数型言語でパターンマッチやパイプライン演算子を活用した TDD のアプローチを学べるからだ。
受入条件:
- 12 章構成の記事が docs/article/elixir/ に存在する
- FizzBuzz 問題を題材に TDD サイクル(Red-Green-Refactor)が体験できる
- 開発環境の構築手順(Elixir、Mix、ExUnit)が記載されている
- Elixir のプロトコルと構造体によるポリモーフィズムが段階的に解説されている
- Elixir の関数型プログラミング(パターンマッチ、パイプライン、高階関数、Stream)が段階的に解説されている
- 記事内のコード例と apps/elixir/ の実装が一致している
タスク
0. 環境構築(1 SP)
| # |
タスク |
見積もり |
担当 |
状態 |
| 0.1 |
apps/elixir/ に Mix プロジェクトを作成 |
0.5h |
AI |
[x] |
| 0.2 |
.gitignore 先行設定(_build/, deps/, .elixir_ls/ 除外) |
0.5h |
AI |
[x] |
| 0.3 |
テスト構成の確認(mix test / ExUnit) |
0.5h |
AI |
[x] |
| 0.4 |
Makefile 作成(check タスク統合) |
0.5h |
AI |
[x] |
| 0.5 |
CI ワークフロー(.github/workflows/elixir-ci.yml)を Nix ベースで作成 |
0.5h |
AI |
[x] |
| 0.6 |
docs/article/elixir/index.md を作成 |
0.5h |
AI |
[x] |
小計: 3h(理想時間)
コミット: feat(elixir): IT11 環境構築(Mix + ExUnit + Credo)
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入門/テスト駆動開発から始めるElixir入門1.md
コミット: feat(elixir): IT11 第 1 部(章 1-3)の記事執筆と TDD 実装を完了
2. 第 2 部: 開発環境と自動化(3 SP)
| # |
タスク |
見積もり |
担当 |
状態 |
| 2.1 |
章 4: バージョン管理と Conventional Commits - 執筆 |
2h |
AI |
[x] |
| 2.2 |
章 5: パッケージ管理と静的解析(Mix、Credo、Dialyxir)- 執筆 |
2h |
AI |
[x] |
| 2.3 |
章 6: タスクランナーと CI/CD(Makefile、Nix、GitHub Actions)- 執筆 |
2h |
AI |
[x] |
参照: tmp/k2works-wiki/WIP/テスト駆動開発から始めるXX入門/テスト駆動開発から始めるElixir入門2.md
コミット: feat(elixir): IT11 第 2 部(章 4-6)の記事執筆と開発ツール導入を完了
3. 第 3 部: オブジェクト指向設計(3 SP)
Elixir は関数型言語のため、プロトコル・構造体・ビヘイビアで OOP 概念を表現する。
| # |
タスク |
見積もり |
担当 |
状態 |
| 3.1 |
章 7: 構造体とプロトコルによるポリモーフィズム - 執筆・実装 |
3h |
AI |
[x] |
| 3.2 |
章 8: パターンマッチとガード節 - 執筆・実装 |
3h |
AI |
[x] |
| 3.3 |
章 9: モジュール設計とビヘイビア - 執筆・実装 |
3h |
AI |
[x] |
参照: tmp/k2works-wiki/WIP/テスト駆動開発から始めるXX入門/テスト駆動開発から始めるElixir入門3.md
コミット: feat(elixir): IT11 第 3 部(章 7-9)の記事執筆とプロトコル/パターンマッチ実装を完了
4. 第 4 部: 関数型プログラミング(3 SP)
| # |
タスク |
見積もり |
担当 |
状態 |
| 4.1 |
章 10: 高階関数とパイプライン演算子(|>、関数合成)- 執筆・実装 |
2h |
AI |
[x] |
| 4.2 |
章 11: Stream と遅延評価(Stream、Enum、再帰)- 執筆・実装 |
2h |
AI |
[x] |
| 4.3 |
章 12: エラーハンドリングと with 構文({:ok, }/{:error, }、with)- 執筆・実装 |
2h |
AI |
[x] |
| 4.4 |
記事と実装の同期確認 |
1h |
AI |
[x] |
| 4.5 |
mkdocs.yml 更新とプレビュー確認 |
0.5h |
AI |
[x] |
参照: tmp/k2works-wiki/WIP/テスト駆動開発から始めるXX入門/テスト駆動開発から始めるElixir入門4.md
コミット: feat(elixir): IT11 第 4 部(章 10-12)の記事執筆と FP 実装を完了
タスク合計
| カテゴリ |
SP |
状態 |
| 環境構築 |
1 |
[x] |
| 第 1 部: TDD の基本サイクル |
3 |
[x] |
| 第 2 部: 開発環境と自動化 |
3 |
[x] |
| 第 3 部: オブジェクト指向設計 |
3 |
[x] |
| 第 4 部: 関数型プログラミング |
3 |
[x] |
| 合計 |
13 |
|
設計メモ
ディレクトリ構成
apps/elixir/
├── mix.exs (Mix プロジェクトファイル)
├── Makefile
├── .gitignore
├── .formatter.exs (Elixir フォーマッタ設定)
├── lib/
│ └── fizzbuzz/
│ ├── fizzbuzz.ex (公開 API)
│ ├── type.ex (タイプ定義・プロトコル)
│ ├── model.ex (値オブジェクト・構造体)
│ └── command.ex (コマンドパターン)
├── test/
│ ├── test_helper.exs
│ └── fizzbuzz/
│ ├── fizzbuzz_test.exs (コアテスト)
│ ├── type_test.exs (タイプテスト)
│ └── command_test.exs (コマンドテスト)
docs/article/
└── elixir/
├── index.md (Elixir 記事トップ)
└── 01-todo-list-and-first-test.md ... 12-error-handling-and-with.md (12 章)
Elixir 固有の特徴(12 章構成)
| 機能 |
章 |
内容 |
| def / defp / defmodule |
1-3 |
公開/非公開関数、モジュール定義 |
| ExUnit(test / assert) |
1-3 |
テストマクロ、describe ブロック |
| パターンマッチ |
1-3, 8 |
関数頭部でのマッチ、ケース分岐 |
| 構造体(defstruct) |
7, 9 |
イミュータブルなデータ構造 |
| プロトコル(defprotocol / defimpl) |
7, 9 |
アドホックポリモーフィズム |
| ビヘイビア(@behaviour / @callback) |
9 |
インターフェース的な契約 |
| ガード節(when) |
8 |
関数頭部での条件制約 |
| パイプライン演算子(|>) |
10 |
関数合成の糖衣構文 |
| 高階関数(Enum.map / Enum.filter) |
10-11 |
コレクション処理 |
| Stream(Stream.map / Stream.take) |
11 |
遅延評価コレクション |
| タプル({:ok, } / {:error, }) |
12 |
Result 型パターン |
| with 構文 |
12 |
モナド的なエラーハンドリング |
Scala → Elixir 対応マップ(IT10 知見の活用)
| Scala 概念 |
Elixir 対応 |
| trait |
protocol / behaviour |
| case class |
defstruct |
| sealed trait + case class |
タグ付きタプル({:type, value}) |
| match / case |
case / cond / パターンマッチ |
| package |
module(Elixir は入れ子モジュール) |
| メソッドチェーン |
パイプライン演算子(|>) |
| LazyList |
Stream |
| Option / Either |
{:ok, } / {:error, } タプル |
| for 内包表記 |
for 内包表記(Elixir も同名) |
Nix 環境
| パッケージ |
用途 |
| elixir |
Elixir コンパイラ・ランタイム |
| erlang |
Erlang/OTP(BEAM VM) |
| elixir-ls |
Language Server Protocol 実装 |
IT1-IT10 からの学び(適用事項)
| 学び |
IT11 での適用 |
| .gitignore を最初に作成する |
_build/, deps/, .elixir_ls/ を最初に除外設定 |
| Nix 環境を必ず使用する |
nix develop .#elixir で全操作を実行 |
| CI は最初から Nix ベースで構築する |
IT10 の Problem を踏まえ、最初から Nix CI を採用 |
| 部ごとにコミットを分割する |
環境構築、第 1-4 部ごとに 5 コミットに分割(IT9 改善→IT10 で成功) |
| テンプレート再利用が効果的 |
IT10 の Phase 3 テンプレートを Elixir 向けに適用 |
| Scala の知見を活用 |
トレイト→プロトコル、パターンマッチ→パターンマッチの対応づけ |
| GitHub Issue の同期を忘れない |
完了時に Issue #11 をクローズする |
| 複雑度チェッカーのカスタム実装 |
Elixir 向けの複雑度チェッカーを bash スクリプトで作成 |
リスクと対策
| リスク |
影響度 |
対策 |
| Mix 依存パッケージ取得の Nix 環境制約 |
中 |
mix deps.get を Nix 環境内で実行、CI でもキャッシュ設定 |
| Elixir のマクロ活用が記事説明で複雑 |
中 |
マクロ自体は扱わず、ExUnit のテストマクロ利用に留める |
| OOP 概念のプロトコル/ビヘイビアへの対応が読者に分かりにくい |
中 |
Scala/Clojure との比較表を記事に含め、段階的に解説 |
| ExUnit のテストスタイル選択 |
低 |
describe + test マクロを統一使用 |
| _build/ deps/ の誤コミット |
低 |
最初に .gitignore 設定(IT7 以降の学び) |
完了条件
Definition of Done
更新履歴
| 日付 |
更新内容 |
更新者 |
| 2026-03-03 |
初版作成 |
AI |
| 2026-03-03 |
IT11 全タスク完了(環境構築・記事執筆・実装・品質チェック) |
AI |
関連ドキュメント