Skip to content

イテレーション 11 計画

概要

項目 内容
イテレーション 11
期間 Week 21-22(2 週間)
ゴール Elixir の全 12 章の記事執筆と実装を完了し、BEAM/OTP 上の関数型言語の TDD パターンを確立する
目標 SP 13

ゴール

イテレーション終了時の達成状態

  1. 記事: Elixir の 12 章すべてが docs/article/elixir/ に執筆完了
  2. 実装: apps/elixir/ に Elixir の TDD 実装が動作する状態
  3. 品質: テスト全パス、Credo 違反ゼロ
  4. Phase 3 継続: IT11 が完了し、BEAM/OTP 上の関数型言語テンプレートが確立

成功基準

  • docs/article/elixir/index.md と 12 章の記事ファイルが作成済み
  • apps/elixir/ の mix test がすべてパス(32 テスト)
  • mkdocs.yml に Elixir セクションが追加され、プレビュー確認済み
  • Credo 警告ゼロ
  • 記事内コード例と apps/elixir/ の実コードが同期

ベロシティトレンド分析(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 のアプローチを学べるからだ。

受入条件:

  1. 12 章構成の記事が docs/article/elixir/ に存在する
  2. FizzBuzz 問題を題材に TDD サイクル(Red-Green-Refactor)が体験できる
  3. 開発環境の構築手順(Elixir、Mix、ExUnit)が記載されている
  4. Elixir のプロトコルと構造体によるポリモーフィズムが段階的に解説されている
  5. Elixir の関数型プログラミング(パターンマッチ、パイプライン、高階関数、Stream)が段階的に解説されている
  6. 記事内のコード例と 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 環境

nix develop .#elixir
パッケージ 用途
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

  • 12 章の記事ファイルが docs/article/elixir/ に存在
  • apps/elixir/ の全テストがパス
  • Credo 警告ゼロ
  • mkdocs.yml に Elixir セクションが追加済み
  • ローカルプレビューで表示確認済み
  • 記事内コード例と apps/elixir/ の実コードが同期
  • GitHub Issue #11 がクローズ済み
  • 部ごとに 5 コミットに分割済み

更新履歴

日付 更新内容 更新者
2026-03-03 初版作成 AI
2026-03-03 IT11 全タスク完了(環境構築・記事執筆・実装・品質チェック) AI

関連ドキュメント