ストーリー
ミッション概要
| ミッション | テーマ | 難易度 |
|---|---|---|
| Mission 1 | 要件の整理 | 初級 |
| Mission 2 | 評価基準マトリクスの作成 | 初級 |
| Mission 3 | 候補技術の評価 | 中級 |
| Mission 4 | PoC計画の策定 | 中級 |
| Mission 5 | Technology Radarの作成 | 中級 |
| Mission 6 | 技術選定レポートの作成 | 上級 |
シナリオ
あなたはECサイトを運営するスタートアップのテクニカルリードです。以下の要件で新規プロジェクトを立ち上げます。
## プロジェクト概要
- 既存のモノリシックRailsアプリを段階的にリプレース
- 初期ターゲット: 商品検索・カタログ機能のマイクロサービス化
- ユーザー数: 月間50万人(1年後に200万人を目標)
- チーム: バックエンド3名、フロントエンド2名
- 既存スキル: Ruby, JavaScript, PostgreSQL
- 予算: 限定的(OSS優先)
- 期限: 3ヶ月で初期リリース
Mission 1: 要件の整理(10分)
上記のシナリオから、機能要件・非機能要件・制約条件を整理してください。
要件
以下のテンプレートを埋めてください。
## 機能要件
1.
2.
3.
## 非機能要件
- パフォーマンス:
- スケーラビリティ:
- 可用性:
- セキュリティ:
## 制約条件
- 予算:
- 期限:
- チームスキル:
- 既存システム:
解答例
## 機能要件
1. 商品の全文検索(キーワード、カテゴリ、価格範囲でのフィルタ)
2. 商品カタログのCRUD操作(管理画面から)
3. 既存Railsアプリとの API 連携(段階的移行のため)
4. 商品画像の管理・配信
## 非機能要件
- パフォーマンス: 検索レスポンス200ms以内(P95)
- スケーラビリティ: 月間200万ユーザーに対応可能
- 可用性: 99.9%(月間ダウンタイム43分以内)
- セキュリティ: 管理者認証、APIレート制限
## 制約条件
- 予算: OSS優先、クラウドコストは月10万円以内
- 期限: 3ヶ月で初期リリース
- チームスキル: Ruby/JS経験あり、GoやRustの経験なし
- 既存システム: Rails + PostgreSQLとの共存が必要
Mission 2: 評価基準マトリクスの作成(15分)
バックエンドフレームワークを選定するための評価基準を設計してください。
要件
- 最低8つの評価基準を定義する
- 各基準に1-5の重みをつける
- 重みの根拠を記述する
解答例
| 基準 | 重み | 根拠 |
|------|------|------|
| 学習コスト | 5 | チームのRuby/JS経験を活かしたい。3ヶ月の期限 |
| パフォーマンス | 4 | 検索API 200ms以内の要件 |
| TypeScript対応 | 4 | フロントエンドとの型共有で生産性向上 |
| エコシステム成熟度 | 4 | ORM、テストツール等が揃っているか |
| スケーラビリティ | 3 | 将来の200万ユーザー対応 |
| コミュニティサイズ | 3 | 困った時に情報が見つかるか |
| 既存システムとの統合 | 4 | Rails APIとの連携容易性 |
| 運用実績 | 3 | 本番環境での安定性 |
| ベンダーロックイン | 2 | OSSなのでリスクは低い |
Mission 3: 候補技術の評価(20分)
以下の3つのバックエンドフレームワークを評価マトリクスで比較してください。
- 候補A: NestJS(TypeScript / Node.js)
- 候補B: Fastify(TypeScript / Node.js)
- 候補C: Go + Echo
要件
- Mission 2で作った基準で各候補を1-5で評価
- 加重スコアを計算
- 定性的なPros/Consも記述
解答例
| 基準(重み) | NestJS | Fastify | Go + Echo |
|-------------|:------:|:-------:|:---------:|
| 学習コスト (5) | 3 | 4 | 2 |
| パフォーマンス (4) | 3 | 4 | 5 |
| TypeScript対応 (4) | 5 | 5 | 1 |
| エコシステム成熟度 (4) | 5 | 3 | 4 |
| スケーラビリティ (3) | 4 | 4 | 5 |
| コミュニティサイズ (3) | 4 | 3 | 4 |
| 既存システム統合 (4) | 4 | 4 | 3 |
| 運用実績 (3) | 4 | 3 | 5 |
| ベンダーロックイン (2) | 5 | 5 | 5 |
| **加重合計** | **133** | **131** | **115** |
### NestJS の Pros/Cons
- Pros: DI、モジュール構造がRailsに近い。エコシステム充実
- Cons: 抽象度が高く、初期学習コストがやや高い
### Fastify の Pros/Cons
- Pros: 高速。シンプル。プラグイン機構が柔軟
- Cons: NestJSほど構造化されていない。大規模開発で規律が必要
### Go + Echo の Pros/Cons
- Pros: 圧倒的なパフォーマンス。バイナリデプロイが容易
- Cons: チームにGo経験者なし。3ヶ月の期限では学習コストが高い
Mission 4: PoC計画の策定(20分)
Mission 3の結果を踏まえて、上位2候補のPoCを計画してください。
要件
- 仮説を1つ定義
- 成功基準を3つ以上定義
- スコープ(やること/やらないこと)
- 2週間のスケジュール
解答例
## PoC計画: NestJS vs Fastify
### 仮説
NestJSのモジュール構造により、大規模化した際の保守性がFastifyより優れる。
一方、Fastifyの方がシンプルで、初期開発速度は高い。
### 成功基準
| 基準 | 閾値 | 計測方法 |
|------|------|---------|
| 商品検索APIの実装速度 | 両者の工数差が20%以内 | 実装時間を記録 |
| 検索APIのレスポンス時間 | 200ms以内(1000商品) | k6で負荷テスト |
| コードの可読性 | チーム評価で4/5以上 | アンケート |
| テストの書きやすさ | カバレッジ80%を1日で達成 | テストカバレッジ計測 |
### スコープ
- やること:
- 商品検索API(GET /products?q=xxx)の実装
- PostgreSQLとの接続(Prisma使用)
- 基本的なバリデーション
- ユニットテスト
- やらないこと:
- 認証・認可
- 管理画面
- Dockerコンテナ化
- CI/CD
### スケジュール
| 日程 | NestJS担当 | Fastify担当 |
|------|-----------|------------|
| Day 1-2 | プロジェクト初期設定 | プロジェクト初期設定 |
| Day 3-5 | 商品検索API実装 | 商品検索API実装 |
| Day 6-7 | テスト実装 | テスト実装 |
| Day 8-9 | パフォーマンス計測 | パフォーマンス計測 |
| Day 10 | レポート作成・比較 | レポート作成・比較 |
Mission 5: Technology Radarの作成(15分)
チームのTechnology Radarを作成してください。最低12項目を配置してください。
解答例
## プロダクト開発チーム Technology Radar(2025 Q2)
### Adopt(採用)
| 技術 | 象限 | 説明 |
|------|------|------|
| TypeScript | Languages & Frameworks | 全プロジェクトの標準言語 |
| PostgreSQL | Platforms | メインデータベース |
| Docker | Platforms | 開発・本番環境の標準 |
| GitHub Actions | Tools | CI/CDパイプライン |
### Trial(試用)
| 技術 | 象限 | 説明 |
|------|------|------|
| NestJS | Languages & Frameworks | マイクロサービス候補 |
| Prisma | Tools | 型安全ORM |
| Elasticsearch | Platforms | 全文検索エンジン |
### Assess(評価)
| 技術 | 象限 | 説明 |
|------|------|------|
| Hono | Languages & Frameworks | 軽量Webフレームワーク |
| Meilisearch | Platforms | Elasticsearchの代替 |
| OpenTelemetry | Tools | 分散トレーシング |
### Hold(保留)
| 技術 | 象限 | 説明 |
|------|------|------|
| jQuery | Languages & Frameworks | 新規採用禁止 |
| Heroku | Platforms | コスト面でAWSに移行 |
Mission 6: 技術選定レポートの作成(10分)
Mission 1-5の結果をまとめた技術選定レポートを作成してください。
解答例
# 技術選定レポート: 商品検索マイクロサービス
## エグゼクティブサマリー
商品検索マイクロサービスのバックエンドフレームワークとして、
NestJS(TypeScript)を推奨する。
## 選定プロセス
1. 要件分析: 機能要件4項目、非機能要件4項目を定義
2. 候補評価: NestJS、Fastify、Go+Echo の3候補を9基準で評価
3. PoC実施: NestJS と Fastify の2週間PoCを計画
## 推奨: NestJS
### 理由
- 加重スコアで最高評価(133点)
- DI・モジュール構造がRailsに近く、チームの学習コストが低い
- TypeScript対応でフロントエンドとの型共有が可能
- エコシステムが成熟しており、Prisma等との統合が容易
### リスクと軽減策
| リスク | 軽減策 |
|--------|--------|
| パフォーマンスがFastifyに劣る | キャッシュ戦略で補完 |
| 抽象度の高さが学習障壁に | 社内勉強会で基本パターンを共有 |
## 次のアクション
1. 2週間のPoC実施(NestJS vs Fastify)
2. PoC結果を踏まえた最終判断
3. 本格開発開始
達成度チェック
| ミッション | テーマ | 完了 |
|---|---|---|
| Mission 1 | 要件の整理 | [ ] |
| Mission 2 | 評価基準マトリクスの作成 | [ ] |
| Mission 3 | 候補技術の評価 | [ ] |
| Mission 4 | PoC計画の策定 | [ ] |
| Mission 5 | Technology Radarの作成 | [ ] |
| Mission 6 | 技術選定レポートの作成 | [ ] |
まとめ
| ポイント | 内容 |
|---|---|
| 要件整理 | 機能・非機能・制約の3つの軸で整理 |
| 評価基準 | 重みつきマトリクスで客観的に比較 |
| PoC | 仮説と成功基準を定義してから検証 |
| レポート | 選定プロセスと理由を記録して共有 |
チェックリスト
- 要件を体系的に整理できた
- 評価基準マトリクスを設計できた
- 複数候補を定量的に比較できた
- PoC計画を策定できた
- Technology Radarを作成できた
- 技術選定レポートをまとめられた
次のステップへ
お疲れさまでした。技術選定の一連のプロセスを実践しました。次はチェックポイントで理解度を確認しましょう。
推定所要時間: 90分