ストーリー
田
田中VPoE
Golden Pathの設計思想を理解した。次はGolden Pathを具現化する「テンプレート戦略」だ。テンプレートの設計と管理方法を深掘りする
あなた
Step 3でテンプレートの基本は学びました。今回はもっと踏み込んだ内容ですか?
あ
田
田中VPoE
そうだ。テンプレートのバージョン管理、アップグレード戦略、テンプレートのテスト。テンプレートは一度作って終わりではない。組織の成長と共に進化させ続ける必要がある
田
田中VPoE
だからこそ戦略が必要だ。テンプレートの数を適切に管理し、共通部分を共有ライブラリとして切り出し、テストを自動化する。プラットフォームチームの工数を最適化する
テンプレート構成戦略
レイヤー構成
テンプレートのレイヤー構成:
共通レイヤー(全テンプレート共通):
├── Dockerfile(マルチステージビルド)
├── .github/workflows/ci.yaml(共通CI)
├── .eslintrc.js / .prettierrc(コーディング規約)
├── k8s/platform.yaml(Application CRD)
├── catalog-info.yaml(Backstage登録)
└── docs/index.md(TechDocs雛形)
言語レイヤー(言語ごとの共通設定):
TypeScript:
├── tsconfig.json
├── jest.config.ts
└── package.json(共通依存)
Python:
├── pyproject.toml
├── pytest.ini
└── requirements.txt
アプリケーションレイヤー(用途ごとの実装):
API Service:
└── NestJS + Prisma + REST
Worker:
└── NestJS + Bull + SQS
BFF:
└── NestJS + GraphQL + Apollo
テンプレートの組み合わせ
| 共通 | 言語 | アプリ | テンプレート名 |
|---|
| 共通 | TypeScript | API Service | typescript-api |
| 共通 | TypeScript | Worker | typescript-worker |
| 共通 | TypeScript | BFF | typescript-bff |
| 共通 | Python | ML Service | python-ml |
| 共通 | React | Web App | react-web |
テンプレートのバージョン管理
バージョニング戦略
| バージョン | 意味 | 例 |
|---|
| Major(v2.0.0) | 破壊的変更(移行ガイド必要) | NestJS 10→11、Node.js 18→20 |
| Minor(v1.1.0) | 機能追加(後方互換) | OpenTelemetry対応追加 |
| Patch(v1.0.1) | バグ修正、セキュリティパッチ | 依存ライブラリのCVE修正 |
テンプレートからのアップグレード
テンプレートアップグレード戦略:
方法1: Renovate/Dependabot による自動PR
├── テンプレートの共通部分をnpmパッケージとして配布
├── 各サービスのpackage.jsonでバージョン管理
└── Renovateが新バージョンを検知し、自動PRを作成
方法2: テンプレート差分適用ツール
├── テンプレートの変更差分を検出
├── 各サービスに差分を自動適用するPRを作成
└── コンフリクトがある場合は手動解決
方法3: Golden Pathスコアカード
├── テンプレートの最新バージョンとの差分をチェック
├── ヘルススコアに反映
└── 古いバージョンのサービスを可視化
テンプレートのテスト
テストピラミッド
| レベル | テスト内容 | 実行タイミング |
|---|
| テンプレート構文テスト | template.yamlのバリデーション | PRごと |
| 生成テスト | テンプレートからコードが正しく生成される | PRごと |
| ビルドテスト | 生成されたコードがビルド・テストに成功する | PRごと |
| デプロイテスト | 生成されたサービスがKubernetesにデプロイできる | 日次 |
| E2Eテスト | テンプレート実行→デプロイ→ヘルスチェック | 週次 |
テスト自動化の例
# .github/workflows/template-test.yaml
name: Template Test
on:
pull_request:
paths:
- 'templates/**'
jobs:
test-template:
strategy:
matrix:
template: [typescript-api, typescript-worker, python-ml]
steps:
- name: テンプレートからコード生成
run: |
backstage-cli scaffolder test \
--template templates/${{ matrix.template }}/template.yaml \
--values test/fixtures/${{ matrix.template }}.json
- name: 生成コードのビルド
run: |
cd output/
npm install && npm run build
- name: 生成コードのテスト
run: |
cd output/
npm run test
- name: 生成コードのlint
run: |
cd output/
npm run lint
- name: Dockerイメージのビルド
run: |
cd output/
docker build -t test-${{ matrix.template }}:test .
共通ライブラリ戦略
社内共通パッケージ
| パッケージ | 内容 | 用途 |
|---|
| @cloudops/logger | 構造化ログ + Datadog連携 | 全サービス共通のログ出力 |
| @cloudops/config | 環境変数管理 + Vault連携 | 設定管理の標準化 |
| @cloudops/health | ヘルスチェックエンドポイント | /healthの標準実装 |
| @cloudops/auth | JWT検証 + RBAC | 認証・認可の共通実装 |
| @cloudops/metrics | OpenTelemetry + Datadog | メトリクス収集の標準化 |
| @cloudops/errors | エラーハンドリング + エラーレスポンス | 統一されたエラー処理 |
「テンプレートは『最初の一歩』を支える。共通ライブラリは『継続的な品質』を支える。両方が揃って初めてGolden Pathが機能する」 — 田中VPoE
まとめ
| ポイント | 内容 |
|---|
| レイヤー構成 | 共通 → 言語 → アプリケーションの3層でテンプレートを構成 |
| バージョン管理 | SemVerに従い、アップグレード戦略を定義 |
| テスト | 構文テスト → 生成テスト → ビルドテスト → デプロイテスト → E2E |
| 共通ライブラリ | 横断的関心事を社内パッケージとして標準化 |
チェックリスト
次のステップへ
次は「ガードレールの実装」を学びます。Golden Pathを支える自動統制の仕組みを設計しましょう。
推定読了時間: 30分