ストーリー
PoCとは何か
// PoCの定義
interface ProofOfConcept {
// 検証したい仮説
hypothesis: string;
// 成功基準(Go/No-Goの判断基準)
successCriteria: SuccessCriterion[];
// スコープ(何を作り、何を作らないか)
scope: { include: string[]; exclude: string[] };
// タイムボックス(必ず期限を設ける)
timebox: { duration: string; hardDeadline: string };
// 必要なリソース
resources: { people: string[]; infrastructure: string[] };
// 成果物
deliverables: string[];
}
interface SuccessCriterion {
metric: string;
threshold: string;
measurementMethod: string;
}
// PoC計画の例
const pocPlan: ProofOfConcept = {
hypothesis: "GraphQLに移行することで、API呼び出し回数を50%削減できる",
successCriteria: [
{
metric: "ダッシュボード画面のAPI呼び出し回数",
threshold: "現在の12回 → 6回以下",
measurementMethod: "ブラウザのネットワークタブで計測",
},
{
metric: "初期表示のレスポンス時間",
threshold: "現在の2.5秒 → 1.5秒以下",
measurementMethod: "Lighthouse で計測",
},
{
metric: "実装の複雑さ",
threshold: "チームの80%が1週間で基本的な操作を習得",
measurementMethod: "チームアンケート",
},
],
scope: {
include: [
"ダッシュボード画面のGraphQL化",
"既存REST APIとの共存",
"基本的なQuery/Mutationの実装",
],
exclude: [
"認証・認可の実装",
"全画面のGraphQL化",
"本番環境へのデプロイ",
"パフォーマンスチューニング",
],
},
timebox: {
duration: "2週間",
hardDeadline: "2025-04-15",
},
resources: {
people: ["バックエンド1名", "フロントエンド1名"],
infrastructure: ["開発環境のみ"],
},
deliverables: [
"動作するデモ",
"計測結果レポート",
"Go/No-Go の推奨判断",
"本格導入時の見積もり",
],
};
PoCの進め方
フェーズ1: 計画(1-2日)
## PoC計画書テンプレート
### 背景
なぜこのPoCが必要なのか
### 仮説
「〇〇することで、△△が□□になる」
### 成功基準
| 基準 | 閾値 | 計測方法 |
|------|------|---------|
| ... | ... | ... |
### スコープ
- やること: ...
- やらないこと: ...
### スケジュール
| 日程 | 活動 |
|------|------|
| Day 1-2 | 環境構築、基本実装 |
| Day 3-5 | コア機能の検証 |
| Day 6-8 | 計測、データ収集 |
| Day 9-10 | レポート作成、発表 |
### 中止条件
以下の場合はPoCを中止する:
- 環境構築に3日以上かかる場合
- 基本的な動作が実現できない場合
フェーズ2: 実装と検証(3-8日)
// PoCの進捗管理
interface PoCProgress {
day: number;
activities: string[];
findings: Finding[];
blockers: string[];
goNoGoSignal: "green" | "yellow" | "red";
}
interface Finding {
category: "positive" | "negative" | "neutral";
description: string;
impact: "high" | "medium" | "low";
}
// 日次のチェックポイント
const dailyCheckpoints: PoCProgress[] = [
{
day: 1,
activities: ["GraphQLサーバーの環境構築", "スキーマ定義"],
findings: [
{
category: "positive",
description: "Apollo Serverの初期セットアップは30分で完了",
impact: "medium",
},
],
blockers: [],
goNoGoSignal: "green",
},
{
day: 3,
activities: ["既存REST APIとの統合", "リゾルバ実装"],
findings: [
{
category: "negative",
description: "N+1問題が発生。DataLoaderの導入が必要",
impact: "high",
},
],
blockers: ["DataLoaderの学習が必要"],
goNoGoSignal: "yellow",
},
];
フェーズ3: レポートと判断(1-2日)
## PoC結果レポート
### エグゼクティブサマリー
GraphQL移行のPoCを2週間実施した結果、
仮説は概ね検証され、Go判断を推奨する。
### 結果
| 成功基準 | 目標 | 実績 | 判定 |
|---------|------|------|------|
| API呼び出し回数 | 6回以下 | 4回 | PASS |
| レスポンス時間 | 1.5秒以下 | 1.2秒 | PASS |
| 学習容易性 | 80%が1週間で習得 | 実施予定 | - |
### 発見事項
- N+1問題はDataLoaderで解決可能(+2日の工数)
- 既存REST APIとの共存は問題なし
- TypeScriptとの型統合が非常にスムーズ
### リスク
- チーム全体の学習コスト: 推定2週間のランプアップ
- GraphQLの複雑なクエリへのレート制限が必要
### 推奨
Go判断。段階的に移行することを推奨する。
### 本格導入の見積もり
- フェーズ1(ダッシュボード): 3週間
- フェーズ2(検索機能): 4週間
- フェーズ3(全画面): 8週間
PoCの落とし穴
| 落とし穴 | 説明 | 対策 |
|---|---|---|
| スコープクリープ | 検証範囲が際限なく広がる | タイムボックスを厳守 |
| サンクコスト | 作ったものを捨てられない | PoCは使い捨てと割り切る |
| 確証バイアス | 成功させたい技術に有利な評価 | 成功基準を事前に定義 |
| 過小評価 | 本番環境との差を軽視 | 非機能要件も検証に含める |
| 先送り | 結論を出さずに追加検証を繰り返す | Go/No-Goの判断日を固定 |
まとめ
| ポイント | 内容 |
|---|---|
| PoCとは | 仮説を検証する期限付きの実験 |
| 3フェーズ | 計画 → 実装・検証 → レポート・判断 |
| 成功の鍵 | 仮説と成功基準を事前に定義する |
| 落とし穴 | スコープクリープ、サンクコスト、確証バイアス |
チェックリスト
- PoCとプロトタイプの違いを説明できる
- PoC計画書の要素を把握した
- 成功基準の定義方法を理解した
- PoCの落とし穴と対策を学んだ
次のステップへ
次は「Technology Radarの活用」を学びます。業界全体の技術トレンドを体系的に把握する方法を学びましょう。
推定読了時間: 30分