LESSON 30分

ストーリー

田中VPoE
共有ライブラリは「部品」だ。次は、その部品を使って新プロジェクトを素早く立ち上げる「テンプレート」と、組織のルールを自動的に適用する「ポリシーエンジン」を設計しよう
あなた
テンプレートリポジトリのようなものですか?
田中VPoE
そうだ。ただし、一度テンプレートからコピーしたら後は放置、というのではダメだ。テンプレートのアップデートが自動的に反映される仕組みが必要だ。そしてポリシーエンジンは、ルールに違反する設定を自動的に検出して是正する

テンプレートリポジトリ

テンプレートの種類

テンプレート対象含まれるもの
TypeScript WebアプリフロントエンドチームCI/CD設定、Dockerfile、Helm chart、テスト設定
Python APIサーバーバックエンドチームCI/CD設定、Dockerfile、テスト設定、FastAPI scaffold
Go マイクロサービスバックエンドチームCI/CD設定、Dockerfile、テスト設定、gRPC scaffold
Terraform モジュールインフラチームCI/CD設定、terratest、ドキュメント生成
データパイプラインデータチームCI/CD設定、Airflow DAG テスト、品質チェック

テンプレートの構成例

org/template-typescript-web/
├── .github/
│   ├── workflows/
│   │   └── ci-cd.yml          # 共有ワークフロー呼び出し
│   ├── dependabot.yml          # 依存更新設定
│   └── CODEOWNERS             # コードオーナー
├── src/                        # アプリケーションコード
├── tests/                      # テスト
├── Dockerfile                  # 標準Dockerfile
├── helm/                       # Helm chart
├── .eslintrc.js               # Lint設定
├── tsconfig.json              # TypeScript設定
└── README.md                  # セットアップガイド

テンプレートの同期(Template Sync)

テンプレートの更新を既存リポジトリに自動的に反映する仕組みです。

同期戦略

戦略説明メリットデメリット
手動同期チームが手動でテンプレートの変更を取り込むチームの自由度が高い更新が遅れがち
自動PRテンプレート更新時にPRを自動作成更新を見逃さないPRが溜まる可能性
強制同期特定ファイルは常にテンプレートと同期セキュリティ設定を確実に反映チームのカスタマイズを制限

推奨:ハイブリッド同期

# テンプレート同期設定
sync_config:
  # 強制同期(チームは変更不可)
  force_sync:
    - ".github/workflows/security-scan.yml"
    - ".github/dependabot.yml"
    - "policies/"

  # 自動PR(チームがレビューしてマージ)
  auto_pr:
    - ".github/workflows/ci-cd.yml"
    - "Dockerfile"
    - "helm/values-*.yaml"

  # 同期対象外(チームが完全に管理)
  excluded:
    - "src/"
    - "tests/"
    - "README.md"

ポリシーエンジン

組織ポリシーの自動適用

GitHub Organization の設定とOPAを組み合わせて、ポリシーを自動適用します。

GitHub Organization ルールセット

{
  "name": "production-protection",
  "target": "branch",
  "conditions": {
    "ref_name": { "include": ["refs/heads/main"] }
  },
  "rules": [
    {
      "type": "required_status_checks",
      "parameters": {
        "required_status_checks": [
          { "context": "security/sast" },
          { "context": "security/sca" },
          { "context": "test/unit" }
        ]
      }
    },
    {
      "type": "pull_request",
      "parameters": {
        "required_approving_review_count": 2,
        "dismiss_stale_reviews_on_push": true,
        "require_code_owner_review": true
      }
    }
  ]
}

カスタムポリシーチェック

# ポリシーチェックワークフロー
name: Policy Check
on:
  workflow_run:
    workflows: ["*"]
    types: [completed]

jobs:
  policy-check:
    runs-on: ubuntu-latest
    steps:
      - name: Check Workflow Compliance
        uses: org/policy-checker@v1
        with:
          policies: |
            - name: "security-scan-required"
              rule: "workflow must include security-scan job"
            - name: "no-self-hosted-runners"
              rule: "runs-on must not be self-hosted"
            - name: "pin-action-versions"
              rule: "all actions must use SHA pinning"

ポリシー違反の検出と是正

違反レベル検出タイミングアクション
Criticalリアルタイムパイプラインをブロック、Slack通知
Warning日次スキャンPRを自動作成、チームに通知
Info週次レポートダッシュボードに表示

まとめ

ポイント内容
テンプレート5種類の言語/用途別テンプレートで即座にプロジェクト開始
テンプレート同期強制同期 + 自動PR + 除外のハイブリッド
ポリシーエンジンGitHub Ruleset + OPA + カスタムチェック
違反対応Critical/Warning/Infoの3レベルで段階的に対応

チェックリスト

  • テンプレートリポジトリの設計を理解した
  • テンプレート同期のハイブリッド戦略を理解した
  • ポリシーエンジンの実装方法を理解した
  • ポリシー違反の検出と是正の仕組みを理解した

次のステップへ

次は「メトリクスとフィードバックループ」です。ガバナンスの効果を測定し、継続的に改善するための仕組みを学びましょう。


推定読了時間: 30分