Skip to content

イテレーション 6 計画

概要

項目 内容
イテレーション 6
期間 Week 11-12(2 週間)
ゴール PHP 版を Python 版から展開し、TDD で実装する
目標 SP 3

ゴール

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

  1. 記事: docs/article/php/ に全 9 章 + index.md が完成している
  2. 実装: apps/php/ に TDD 実装コードが動作する状態で存在する
  3. 公開: mkdocs.yml に PHP 版が反映され、ローカルプレビューで閲覧可能

成功基準

  • 9 章すべてのファイルが作成されている
  • 各章のコード例が apps/php/ の実コードと同期している(記事記述と実装を同一コミットで完結)
  • apps/php/ のテストが全てパス
  • mkdocs.yml の nav に PHP 全 9 章が追加されている
  • ローカルプレビューで表示確認済み
  • 各章執筆時に Python 版との内容差分チェックを実施済み

ユーザーストーリー

対象ストーリー

ID ユーザーストーリー SP 優先度
US-006 PHP 版を Python 版から展開する 3 必須
合計 3

ストーリー詳細

US-006: PHP 版を Python 版から展開する

ストーリー:

学習者として、PHP でアルゴリズムとデータ構造を TDD で学びたい。なぜなら、PHP は Web 開発で広く使われており、Laravel や Symfony などのフレームワークの基礎となるアルゴリズムの理解が実務に直結するからだ。

受入条件:

  1. 全 9 章が Python 版を基に PHP 版として再構成されている
  2. 各章に TDD のコード例(テスト → 実装 → リファクタリング)が含まれている
  3. 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)

  • apps/php/ で全テストがパス(PHPUnit)— OK (145 tests, 170 assertions)
  • 9 章の記事ファイルが作成済み
  • mkdocs.yml の nav に PHP 全 9 章が追加されている
  • Python 版との差分が各記事に明記されている
  • GitHub Issue #6(US-006)がクローズされている

リスクと対策

リスク 影響度 対策
Nix 環境での PHP セットアップ失敗 nixpkgs の php83 を使用、composer で依存管理
PHPUnit の設定と namespace PSR-4 オートローダーを Composer で設定
PHP の型システムの違い 型宣言を明示的に記述、Python 版との対比を記事に記載

完了条件

デモ項目

  1. apps/php/./vendor/bin/phpunit が全テストパスすること
  2. docs/article/php/ の全 9 章がローカルプレビューで表示されること
  3. IT-6 ふりかえりでベロシティ実績を記録すること

更新履歴

日付 更新内容 更新者
2026-04-12 初版作成 -
2026-04-12 IT-6 完了:全タスク完了、DoD 達成(145 テスト全通過) -

関連ドキュメント