LESSON 30分

ストーリー

田中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

テンプレートの組み合わせ

共通言語アプリテンプレート名
共通TypeScriptAPI Servicetypescript-api
共通TypeScriptWorkertypescript-worker
共通TypeScriptBFFtypescript-bff
共通PythonML Servicepython-ml
共通ReactWeb Appreact-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/authJWT検証 + RBAC認証・認可の共通実装
@cloudops/metricsOpenTelemetry + Datadogメトリクス収集の標準化
@cloudops/errorsエラーハンドリング + エラーレスポンス統一されたエラー処理

「テンプレートは『最初の一歩』を支える。共通ライブラリは『継続的な品質』を支える。両方が揃って初めてGolden Pathが機能する」 — 田中VPoE


まとめ

ポイント内容
レイヤー構成共通 → 言語 → アプリケーションの3層でテンプレートを構成
バージョン管理SemVerに従い、アップグレード戦略を定義
テスト構文テスト → 生成テスト → ビルドテスト → デプロイテスト → E2E
共通ライブラリ横断的関心事を社内パッケージとして標準化

チェックリスト

  • テンプレートのレイヤー構成を設計できる
  • バージョン管理とアップグレード戦略を理解した
  • テンプレートのテスト方法を把握した
  • 共通ライブラリ戦略を設計できる

次のステップへ

次は「ガードレールの実装」を学びます。Golden Pathを支える自動統制の仕組みを設計しましょう。


推定読了時間: 30分