イテレーション 6 計画
概要
| 項目 |
内容 |
| イテレーション |
6 |
| 期間 |
Week 11-12(2 週間) |
| ゴール |
PHP 版を Python 版から展開し、TDD で実装する |
| 目標 SP |
3 |
ゴール
イテレーション終了時の達成状態
- 記事:
docs/article/php/ に全 9 章 + index.md が完成している
- 実装:
apps/php/ に TDD 実装コードが動作する状態で存在する
- 公開: mkdocs.yml に PHP 版が反映され、ローカルプレビューで閲覧可能
成功基準
ユーザーストーリー
対象ストーリー
| ID |
ユーザーストーリー |
SP |
優先度 |
| US-006 |
PHP 版を Python 版から展開する |
3 |
必須 |
| 合計 |
|
3 |
|
ストーリー詳細
US-006: PHP 版を Python 版から展開する
ストーリー:
学習者として、PHP でアルゴリズムとデータ構造を TDD で学びたい。なぜなら、PHP は Web 開発で広く使われており、Laravel や Symfony などのフレームワークの基礎となるアルゴリズムの理解が実務に直結するからだ。
受入条件:
- 全 9 章が Python 版を基に PHP 版として再構成されている
- 各章に TDD のコード例(テスト → 実装 → リファクタリング)が含まれている
apps/php/ で全テストがパスする
タスク
1. プロジェクト初期化(0.5 SP)
| # |
タスク |
見積もり |
状態 |
| 1-1 |
PHP プロジェクト作成(apps/php/) |
30 分 |
[x] |
| 1-2 |
PHPUnit テスト環境設定(Composer) |
30 分 |
[x] |
| 1-3 |
Nix devShell(.#php)設定確認 |
30 分 |
[x] |
2. 第 1 章 基本的なアルゴリズム(0.25 SP)
| # |
タスク |
見積もり |
状態 |
| 2-1 |
TDD 実装(3 値最大値・中央値、条件判定、繰り返し) |
30 分 |
[x] |
| 2-2 |
記事執筆(docs/article/php/01-basic-algorithms.md) |
30 分 |
[x] |
3. 第 2 章 配列(0.25 SP)
| # |
タスク |
見積もり |
状態 |
| 3-1 |
TDD 実装(配列操作、探索、並べ替え) |
20 分 |
[x] |
| 3-2 |
記事執筆(docs/article/php/02-arrays.md) |
15 分 |
[x] |
4. 第 3 章 探索アルゴリズム(0.25 SP)
| # |
タスク |
見積もり |
状態 |
| 4-1 |
TDD 実装(線形探索、二分探索、ハッシュ法) |
20 分 |
[x] |
| 4-2 |
記事執筆(docs/article/php/03-search-algorithms.md) |
15 分 |
[x] |
5. 第 4 章 スタックとキュー(0.25 SP)
| # |
タスク |
見積もり |
状態 |
| 5-1 |
TDD 実装(FixedStack、FixedQueue) |
20 分 |
[x] |
| 5-2 |
記事執筆(docs/article/php/04-stacks-and-queues.md) |
15 分 |
[x] |
6. 第 5 章 再帰アルゴリズム(0.25 SP)
| # |
タスク |
見積もり |
状態 |
| 6-1 |
TDD 実装(再帰基本、ハノイの塔、8 クイーン) |
20 分 |
[x] |
| 6-2 |
記事執筆(docs/article/php/05-recursion.md) |
15 分 |
[x] |
7. 第 6 章 ソートアルゴリズム(0.25 SP)
| # |
タスク |
見積もり |
状態 |
| 7-1 |
TDD 実装(バブル〜計数ソート) |
20 分 |
[x] |
| 7-2 |
記事執筆(docs/article/php/06-sort-algorithms.md) |
15 分 |
[x] |
8. 第 7 章 文字列処理(0.25 SP)
| # |
タスク |
見積もり |
状態 |
| 8-1 |
TDD 実装(BF/KMP/BM 法、文字カウント、回文) |
20 分 |
[x] |
| 8-2 |
記事執筆(docs/article/php/07-string-processing.md) |
15 分 |
[x] |
9. 第 8 章 リスト(0.25 SP)
| # |
タスク |
見積もり |
状態 |
| 9-1 |
TDD 実装(LinkedList、DoublyLinkedList、ArrayLinkedList) |
20 分 |
[x] |
| 9-2 |
記事執筆(docs/article/php/08-linked-lists.md) |
15 分 |
[x] |
10. 第 9 章 木構造(0.25 SP)
| # |
タスク |
見積もり |
状態 |
| 10-1 |
TDD 実装(BinarySearchTree) |
20 分 |
[x] |
| 10-2 |
記事執筆(docs/article/php/09-trees.md) |
15 分 |
[x] |
11. 仕上げ(0.25 SP)
| # |
タスク |
見積もり |
状態 |
| 11-1 |
index.md 作成(docs/article/php/index.md) |
15 分 |
[x] |
| 11-2 |
mkdocs.yml の nav に PHP 版を追加 |
15 分 |
[x] |
| 11-3 |
ローカルプレビュー確認 |
15 分 |
[x] |
タスク合計
| カテゴリ |
SP |
理想時間 |
| プロジェクト初期化 |
0.5 |
90 分 |
| 第 1〜9 章(執筆 + 実装) |
2.0 |
270 分 |
| 仕上げ |
0.5 |
45 分 |
| 合計 |
3 |
約 405 分(約 7 時間) |
1 SP あたり: 約 2.3 時間(AI 支援により短縮)
進捗率: 100%(3/3 SP)
スケジュール
Week 1(Day 1-5)
gantt
title イテレーション 6 - Week 1
dateFormat YYYY-MM-DD
section プロジェクト初期化
PHP プロジェクト作成 :d1, 2026-05-12, 1d
第1章 実装 + 記事 :d2, after d1, 1d
第2章 実装 + 記事 :d3, after d2, 1d
第3章 実装 + 記事 :d4, after d3, 1d
第4章 実装 + 記事 :d5, after d4, 1d
| 日 |
タスク |
| Day 1 |
プロジェクト初期化(PHP, PHPUnit, Composer, Nix 設定) |
| Day 2 |
第 1 章 基本的なアルゴリズム(実装 + 記事) |
| Day 3 |
第 2 章 配列 + 第 3 章 探索アルゴリズム |
| Day 4 |
第 4 章 スタックとキュー + 第 5 章 再帰 |
| Day 5 |
第 6 章 ソートアルゴリズム |
Week 2(Day 6-10)
gantt
title イテレーション 6 - Week 2
dateFormat YYYY-MM-DD
section 後半章 + 仕上げ
第7章 実装 + 記事 :a1, 2026-05-19, 1d
第8章 実装 + 記事 :a2, after a1, 1d
第9章 実装 + 記事 :a3, after a2, 1d
仕上げ・index・mkdocs :a4, after a3, 1d
統合テスト・確認 :a5, after a4, 1d
| 日 |
タスク |
| Day 6 |
第 7 章 文字列処理(実装 + 記事) |
| Day 7 |
第 8 章 リスト(実装 + 記事) |
| Day 8 |
第 9 章 木構造(実装 + 記事) |
| Day 9 |
index.md 作成、mkdocs.yml 更新 |
| Day 10 |
統合テスト、ローカルプレビュー確認、デモ準備 |
技術メモ
PHP 版の特徴
| 概念 |
Python |
PHP |
| 変数 |
x = 1 |
$x = 1 |
| 配列 |
list |
array / [] |
| 連想配列 |
dict |
array(連想配列) |
| クラス定義 |
class Foo: |
class Foo { |
| コンストラクタ |
__init__ |
__construct |
| メソッド |
def method(self): |
public function method(): |
| 型ヒント |
def f(x: int): |
function f(int $x): |
| None チェック |
if x is None |
if ($x === null) |
| 例外 |
raise Exception() |
throw new Exception() |
| 継承 |
class A(B): |
class A extends B { |
| インターフェース |
- |
interface I { } |
| 無限大 |
float('inf') |
PHP_INT_MAX / INF |
テスト環境
- フレームワーク: PHPUnit 10.x
- ビルドツール: Composer(composer.json)
- PHP バージョン: PHP 8.x
PHP のイディオム
- 変数はすべて
$ プレフィックス
- 配列は
array() または [] で定義、キーは文字列または整数
- 型宣言:
int, string, float, bool, array, ?Type(nullable)
match 式(PHP 8)で switch を置き換え
- アロー関数:
fn($x) => $x * 2
- スプレッド演算子:
[...$a, ...$b]
既存実装との対比
PHP は OOP をサポートしており、IT-1(Python)・IT-4(C#)の実装パターンを参照しながら展開できる。
動的型付けのため Python に近い実装が可能だが、変数に $ プレフィックスが必要な点に注意する。
DoD(Definition of Done)
リスクと対策
| リスク |
影響度 |
対策 |
| Nix 環境での PHP セットアップ失敗 |
中 |
nixpkgs の php83 を使用、composer で依存管理 |
| PHPUnit の設定と namespace |
低 |
PSR-4 オートローダーを Composer で設定 |
| PHP の型システムの違い |
低 |
型宣言を明示的に記述、Python 版との対比を記事に記載 |
完了条件
デモ項目
apps/php/ で ./vendor/bin/phpunit が全テストパスすること
docs/article/php/ の全 9 章がローカルプレビューで表示されること
- IT-6 ふりかえりでベロシティ実績を記録すること
更新履歴
| 日付 |
更新内容 |
更新者 |
| 2026-04-12 |
初版作成 |
- |
| 2026-04-12 |
IT-6 完了:全タスク完了、DoD 達成(145 テスト全通過) |
- |
関連ドキュメント