コンテンツにスキップ

📚 GCP PCA 学習: 2026-05-15

セクション: 4.1 技術プロセスの分析と定義 前回からの繋がり: 前セクションの法令遵守設計で「何をしたか」の監査証跡が必須と学んだ。ここでは「何を・どうやって・検証するか」を CI-CD パイプラインの設計で実装する。


① 一言サマリー

「CI-CD パイプラインとは、コード変更から本番環境へのデプロイまでを自動化・検証する仕組みです」


② たとえ話

人が食べる仕出し弁当の製造ラインで考えます。

  • 従来方式(CI-CD なし): 料理人が各自でおかずを作り、衛生チェックなし → 毎回品質がバラバラ、腐った食材が混じることもある
  • CI パイプライン(Continuous Integration): 每个料理人が調理したら、その場で「材料の鮮度・温度・味」を自動検査マシンに通す。NGなら自動で廃棄
  • CD パイプライン(Continuous Delivery / Deployment): 検査をクリアしたおかずは「自動で梱包 → 冷却 → 配送センターへ」と進む。検査結果を全履歴で記録(監査証跡)
  • Deployment ≠ Release: 配送センターまで届いて「すぐ売る / 時間をおく / 客別に調整」かは経営判断

つまり: - CI = コード検査を自動化(コンパイル・テスト・品質分析) - CD = デプロイを自動化(ステージング環境 → 本番環境) - 監査ログ = 誰が・いつ・何を・なぜ変更したかを全記録


③ 図解

graph LR
    A["👨‍💻
Developer
コード変更"] --> B["🚀 Cloud Build
(自動ビルド・テスト)"] B --> C{{"✅ 全テストOK?"}} C -->|NO| D["❌ 変更を却下
(Slack通知)"] C -->|YES| E["📦 成果物
Artifact Registry
に保存"] E --> F["🎯 Cloud Deploy
(デプロイ自動化)"] F --> G["🔄 Canary 5% → Green 25%
→ Blue 100%"] G --> H["✔️ 本番環境
Compute Engine/GKE"] H --> I["📊 Cloud Logging
監査証跡
(全変更記録)"] style A fill:#e1f5ff style B fill:#fff3e0 style C fill:#fce4ec style E fill:#f3e5f5 style F fill:#e0f2f1 style H fill:#e8f5e9 style I fill:#fffde7

各段階の役割:

  • CI(Continuous Integration): Cloud Build が Git push をトリガーに自動実行
  • コンパイル・ユニットテスト・静的分析・コンテナイメージビルド
  • 失敗したら Slack / Email で開発者に通知
  • 成功したら Artifact Registry に成果物保存

  • CD(Continuous Delivery/Deployment): Cloud Deploy が Artifact Registry から自動取得・デプロイ

  • Canary デプロイ(5% → 25% → 100%)で段階的リスク低減
  • ロールバック自動化(エラー率・ レイテンシ突発的増加で自動検出)
  • Blue-Green デプロイで 0 ダウンタイム切り替え

  • Audit(監査証跡): Cloud Logging が全ステップ記録

  • 誰が・いつ・どの Git Commit・どの成果物をデプロイしたか
  • GDPR / HIPAA / PCI DSS 等の監査要件満たし

④ 仕組みの深掘り

なぜ CI-CD が必要か?

PCA 試験の採点軸は「ビジネスリスク最小化」です。

従来のサイロ型(各チームが独立して作業)には以下の問題がある:

  1. デプロイ失敗率が高い
  2. 手作業が多い → ヒューマンエラー → 本番トラブル
  3. 環境差異(ローカル・ステージング・本番で設定が異なる)

  4. リグレッション(後戻り)が検出できない

  5. 既存機能を壊した状態でデプロイ → ユーザーからクレーム
  6. 自動テストなしで「動いていると思い込む」

  7. ロールバックが遅い

  8. 問題発生時に「だれが・どの成果物をデプロイしたか」が不明
  9. 復旧に数時間かかる → ビジネス損失

CI-CD で解決する仕組み

[1] Git Commit push
      ↓
[2] Cloud Build webhook トリガー自動実行
      ├─ コンパイル(Java / Go / Python 等)
      ├─ ユニットテスト(カバレッジ 80% 以上)
      ├─ 統合テスト(DB 連携テスト)
      ├─ 脆弱性スキャン(Container Image Scanning)
      ├─ 静的コード分析(SonarQube 等と連携)
      └─ コンテナイメージビルド → Artifact Registry 保存
          ↓ (失敗時は Slack 通知・ここで止まる)
[3] Cloud Deploy が Artifact Registry から成果物取得
      ├─ Stage 環境にデプロイ(自動テスト実行)
      ├─ Canary デプロイ(5% トラフィック流す)
      │  └─ エラー率 < 0.5% なら次フェーズへ
      ├─ Green デプロイ(25% トラフィック)
      │  └─ エラー率 < 0.5% なら次フェーズへ
      └─ Blue デプロイ(100% トラフィック・本番環境)
          ↓
[4] Cloud Logging に全ステップ記録
      ├─ Deploy ID / Git Commit Hash / Deployer / Timestamp
      ├─ デプロイ結果(成功 / 失敗 / ロールバック)
      └─ エラー内容(本番で発生したら Cloud Logging で即検索可能)

重要な概念:

  • CI フェーズ(Build): コード品質を客観的に検証
  • 「開発環境で動いた」→「本番でも動く」という信頼醸成
  • テストカバレッジ低い → CI で検出・改善を促す(チェックゲート)

  • CD フェーズ(Deploy): リスク最小化戦略

  • Canary デプロイ:5% → 25% → 100% と段階的
  • Blue-Green デプロイ:切り替えは「瞬時」、障害時は「瞬時に前バージョンへ戻す」
  • これにより SLO(例:99.99% 稼働率)達成

  • テスト戦略との関連:

  • ユニットテスト:開発者が関数単位で検証
  • 統合テスト:複数サービス間の連携を検証(DB・API 連携)
  • 負荷テスト:本番規模の同時アクセスに耐えるか
  • E2E テスト(Optional):UI から本番 API まで通すテスト(遅いので実施頻度は低め)

⑤ 他サービスとの使い分け

「Cloud Build」vs「Cloud Run」の勘違い

観点 Cloud Build Cloud Run
役割 コード → 成果物(コンテナ) コンテナ → レスポンス(HTTP)
トリガー Git push / スケジュール HTTP リクエスト
実行時間 10分-1時間(長い) 最大 60 分(短い)
使い分け CI パイプライン・バッチ処理 本番 Web サービス
PCA 試験での判断軸 「継続的にビルド・テストしたい」→ Cloud Build 「API をスケーラブルに実行したい」→ Cloud Run

「Cloud Deploy」vs「Terraform」の勘違い

観点 Cloud Deploy Terraform
役割 アプリケーション版のデプロイ自動化 インフラストラクチャの定義・デプロイ
対象 GKE / GCE / Cloud Run(アプリ層) VPC / Firewall / Load Balancer(インフラ層)
Canary デプロイ ✅ サポート(トラフィック段階的シフト) ❌ Terraform には Canary 概念がない
使い分け CI-CD パイプラインで「アプリ更新」→ Cloud Deploy インフラコード管理・変更管理 → Terraform
PCA 試験での判断軸 「ユーザーに見えるアプリを更新したい」→ Cloud Deploy 「インフラリソース(GCE / VPC)を定義したい」→ Terraform

「Cloud Build」vs「GitHub Actions」の技術選定

観点 Cloud Build GitHub Actions
GCP との統合 ネイティブ(IAM・Secret Manager 直結) OAuth 連携(若干コスト増)
実行時間短縮 Cloud Build Cache(30% 高速化) GitHub Cache(準備に手間)
マルチリージョン ✅ GCP リージョン選択可 ❌ US 中心
コスト 120 分/月無料 2,000 分/月無料
PCA 試験での判断軸 GCP ワークロード → Cloud Build 多言語・複数 VCS 対応 → GitHub Actions

PCA 試験の「正解軸」: - 「GCP 内で完結するか」→ Cloud Build - 「オンプレミス / AWS と混在するか」→ GitHub Actions / Jenkins - 「Canary デプロイで段階的リリースしたい」→ Cloud Deploy - 「インフラ(VPC / GCE)を IaC で管理したい」→ Terraform


⑥ 実務への応用

シナリオ 1: Web スタートアップ(Node.js + GKE)

要件: - 毎日 3~5 回のリリースが必要 - 新機能はカナリアで 10% から開始 - 本番トラブル時は 5 分以内にロールバック必須 - 開発チーム 5 名・デプロイ担当者不在(全員ディベロッパー)

設計:

GitHub: Node.js リポジトリ (main ブランチ)
  ↓ (push webhook)
Cloud Build:
  ├─ npm install
  ├─ npm run test (Jest ユニットテスト)
  ├─ npm run lint (ESLint + Prettier)
  ├─ npm run security-audit (npm audit)
  ├─ Docker build → Artifact Registry に image push
  └─ Cloud Deploy trigger
    ↓
GKE Autopilot Cluster:
  ├─ Stage 環境(Cloud Build から 自動デプロイ)
  │  └─ Smoke Test(API health check)実行
  ├─ Canary: 10% トラフィック(5 分様子見)
  ├─ Green: 50% トラフィック(5 分様子見)
  └─ Blue: 100% トラフィック(本番)

Cloud Logging:
  └─ 全ステップを自動記録(Slack / PagerDuty に連携)

ロールバック流程:
  - エラー率が 1% を超える → Cloud Deploy が自動ロールバック
  - 手動ロールバック:「kubectl rollout undo」と同等の操作を 1 クリック

メリット: - デプロイ 30 秒で完了(手作業 0) - テスト落ち → 自動で本番デプロイ阻止 → DevOps 文化醸成 - 監査ログ完全・PCI DSS / HIPAA 対応可能


シナリオ 2: 受託開発(既存 Java アプリ + Compute Engine)

要件: - レガシー Java アプリ(Spring Boot)のマイグレーション - 本番環境 Compute Engine 5 台(MIG で自動スケール) - テスト環境で毎日検証 - 変更管理が厳格(経営層へ毎週報告)

設計:

GitLab: Java リポジトリ
  ↓ (push webhook)
Cloud Build:
  ├─ Maven build (mvn clean package)
  ├─ JUnit テスト実行
  ├─ SonarQube スキャン(品質ゲート:A グレード以上)
  ├─ OWASP Dependency Check(脆弱性スキャン)
  └─ JAR → GCS / Artifact Registry に保存
    ↓
Cloud Deploy:
  ├─ Staging 環境に新 JAR デプロイ
  │  ├─ smoke test(curl http://staging:8080/health)
  │  └─ JMeter 負荷テスト(100 TPS 30 秒)
  ├─ 本番 Canary デプロイ(1 台の MIG インスタンス)
  │  └─ 5 分監視 → エラー率 0 なら次フェーズ
  ├─ 本番 Blue-Green(残り 4 台)
  └─ ロールバック:前バージョンの JAR に即切り替え

Blue-Green デプロイの実装:
  ├─ Load Balancer が「Group-A(古いバージョン)」と「Group-B(新バージョン)」に振り分け
  ├─ 新 JAR が Group-B に全デプロイされたら、Load Balancer を「Group-B 100%」に切り替え
  └─ 1 時間問題なし → Group-A を削除(古いバージョン完全削除)

監査ログ:
  ├─ Cloud Logging に全ステップ記録
  ├─ 経営層向けレポート:「5月15日 14:32、JAR v2.1.3 をデプロイ、変更者: Alice」
  └─ コンプライアンス監査:「変更承認ワークフロー(Jira ) → デプロイ → 記録」を 100% 検証可能

メリット: - 経営層向けレポートが「自動生成」(デプロイ結果を Cloud Logging クエリで集計) - テスト環境で毎日検証 → 本番での問題ゼロ - 変更管理が厳格でも、CI-CD で「誤操作」「設定誤り」が 99% 防げる


シナリオ 3: AI / データ分析パイプライン(Python + Cloud Functions)

要件: - 毎日 午前 2 時に モデル再学習パイプライン実行 - 新モデル精度が前月比で 2% 以上向上したら自動本番デプロイ - デプロイ失敗時は自動で前月のモデルに戻す

設計:

Git: Python リポジトリ(training.py)
  ↓ (定時トリガー: Cloud Scheduler)
Cloud Build:
  ├─ python -m pytest tests/
  ├─ データセット取得(BigQuery から)
  ├─ モデル再学習(scikit-learn)
  ├─ 精度評価(前月比較)
  │  └─ 精度 >= 前月 + 2% ? → YES: デプロイ, NO: スキップ
  └─ Model Registry(Vertex AI Model Registry)に保存
    ↓
Cloud Deploy:
  ├─ Cloud Functions v2 更新(新モデル使う関数にデプロイ)
  ├─ テスト: 予め用意した検証データセットで精度確認
  └─ Canary: 5% のリクエストで新モデルテスト
    ↓
本番: Cloud Functions
  ├─ API リクエスト → 新モデルで予測
  ├─ レイテンシが 200ms 超過 → 自動ロールバック(前月モデル)
  └─ Cloud Logging に全予測記録(説明可能性対応)

メリット: - モデル精度の自動監視 → デプロイ判断も自動化(人間の判断が不要) - ロールバック自動化 → 精度劣化のリスク最小化


⑦ よくある誤解・落とし穴

誤解 1: 「テストを全部 Cloud Build でやれば品質は 100% 保証される」

間違い。テスト自動化は「品質の前提条件」ですが「十分条件」ではない。

  • Cloud Build で「ユニットテスト・カバレッジ 80%」パスしても、実装ロジックが間違っていれば本番で障害
  • テストケース設計が不適切 → テストは通るが、想定外のユーザー操作で障害
  • 解決策: テストカバレッジに加えて「エラーバジェット」(許容される障害時間・エラー率)を SLO に組み込み

誤解 2: 「Canary デプロイ = リスク 0」

間違い。5% に流すトラフィック量が少ないと「珍しいエッジケース」を見落とす。

  • 例:アクセスパターンが「平日 9-17 時に集中」の場合、深夜 2 時の Canary デプロイで 5% テストしても無意味
  • 解決策: Canary デプロイの監視指標を「エラー率」だけでなく「レイテンシ・CPU 使用率・メモリ」も含める

誤解 3: 「デプロイ自動化 = DevOps」

間違い。デプロイ自動化は「手段」であって「目的」ではない。

  • 目的は「ビジネス要件を素早く・安全に本番に反映する」こと
  • CI-CD 導入しても「テスト品質が低い / ロールバック手順がない」なら効果なし
  • PCA 試験の採点軸: デプロイ自動化に加えて「監視(SLI)・アラート(SLO 越え時通知)・ポストモーテム(根本原因分析)」がセットになっているか

誤解 4: 「Terraform で VPC を IaC 管理すれば、CI-CD は不要」

間違い。IaC(Terraform)と CI-CD(Cloud Build/Deploy)は別物。

  • Terraform:インフラリソース(VPC / GCE / Load Balancer)の定義・バージョン管理
  • Cloud Build/Deploy:アプリケーション(コンテナ / JAR / Python)の自動ビルド・テスト・デプロイ
  • 両者は直交(互いに独立)していて、ベストプラクティスは両者を組み合わせる
  • Terraform で「GKE クラスタ環境」を定義
  • Cloud Build/Deploy で「GKE 上のアプリ」を自動デプロイ

誤解 5: 「Cloud Build の構成ファイル(cloudbuild.yaml)は複雑・学習コストが高い」

間違い。基本は YAML の順序型リスト。

steps:
  - name: gcr.io/cloud-builders/maven    # ステップ 1: Maven build
    args: ['clean', 'package']
  - name: gcr.io/cloud-builders/docker   # ステップ 2: Docker build
    args: ['build', '-t', 'gcr.io/$PROJECT_ID/app:$SHORT_SHA', '.']
  - name: gcr.io/cloud-builders/docker   # ステップ 3: Artifact Registry push
    args: ['push', 'gcr.io/$PROJECT_ID/app:$SHORT_SHA']

シンプルな構造。複数の Build Step を順序立てて実行するだけ。

落とし穴 6: 「Cloud Deploy で Canary デプロイしたら、本番ユーザーの 5% が影響を受ける」

考え方が間違っている。正しくは「本番トラフィックの 5% を新バージョンに流す」。

  • 例:本番トラフィック 1,000 RPS → Canary は 50 RPS
  • Canary で問題が発生 → 新バージョンへの 50 RPS が失敗・ロールバック
  • 結果:全ユーザーへの影響は「0.05% のリクエスト失敗」で済む(SLA 99.9% でも許容範囲)

⑧ 理解度チェック

シナリオ: 金融機関のカスタマーポータル(Web アプリ)のリリース戦略

要件: - 毎週 1 回、新機能をリリース - 本番環境 Compute Engine 10 台(MIG で自動スケール) - 過去 6 ヶ月間、デプロイ後 30 分以内に障害が 3 回発生 - SLA は 99.99%(年間ダウンタイム 52 分以内) - コンプライアンス:「全変更を 6 年間監査可能」

問題: 上記要件を満たす CI-CD パイプラインはどれか?

  • (A) Cloud Build でテスト実行後、Compute Engine MIG に直接デプロイ(100% トラフィック一括)
  • (B) Cloud Build でテスト実行後、Cloud Deploy で Staging 環境検証 → Canary 5% → Green 50% → Blue 100%
  • (C) GitHub Actions で CI 実行 → Jenkins でデプロイ(オンプレミス Jenkins で履歴管理)
  • (D) Cloud Build でビルド後、Artifact Registry に保存。デプロイは手作業(スプレッドシートで変更管理)
答え(クリック) **正解:(B) Cloud Build でテスト実行後、Cloud Deploy で Staging 環境検証 → Canary 5% → Green 50% → Blue 100%** **各選択肢の評価:** - **(A) Cloud Build 直接 MIG デプロイ(100% 一括)**: - ❌ 過去 6 ヶ月の「デプロイ後 30 分以内の障害 3 回」が解決されない。 - ❌ 問題が発生した時点で 1,000% のユーザーに影響(本来 99.99% SLA で年 52 分が許容なのに、30 分で 3 回 = すでに 90 分超過)。 - ❌ ロールバック手順が不明確 → 復旧に時間がかかる。 - **(B) Cloud Build + Cloud Deploy Canary 段階的**: - ✅ **段階的デプロイで早期リスク検出**:Canary 5% で問題が 99% 検出される(本番 10 台中 0.5 台分が失敗してもユーザーへの影響は最小)。 - ✅ **SLA 99.99% 達成可能**:Canary で問題検出 → 自動ロールバック → 全体で数分のロールバック時間。年間ダウンタイム 52 分内に収まる。 - ✅ **監査要件(6 年間全変更記録)を満たす**:Cloud Logging が全ステップ(ビルド・デプロイ・ロールバック・deployer・timestamp)を自動記録。 - ✅ **MIG との相性が良い**:Cloud Deploy は GKE / GCE / Cloud Run 対応。GCE + MIG なら Blue-Green デプロイで「Load Balancer 切り替え」により 0 ダウンタイム実現可能。 - **(C) GitHub Actions + オンプレミス Jenkins**: - ❌ CI は GCP 外(GitHub)で実行 → Cloud IAM・Secret Manager との統合が面倒。 - ❌ デプロイが GCP 外(Jenkins)→Compute Engine への認証・通信ボトルネック。ロールバック手順も手作業の余地が大きい。 - ❌ オンプレミス Jenkins は「障害時に GCP 側のログとの関連付けが困難」 → コンプライアンス監査で「デプロイ変更の全記録」を 6 年間検証しづらい。 - **(D) Cloud Build でビルド → 手作業デプロイ + スプレッドシート管理**: - ❌ デプロイが手作業 → ヒューマンエラー(過去 3 回の障害の原因の可能性高い)。 - ❌ 監査要件(6 年間全変更記録)が満たせない。スプレッドシートは改ざんリスク・バージョン管理不可。 - ❌ ロールバック時間が長い(誰がどのバージョンをデプロイするか確認に時間)→ SLA 99.99% 達成不可。 **補足:なぜ Canary 5% か?** 金融機関の場合、本番 10 台で Canary 5% = 0.5 台分。仮に新バージョンにバグがあれば、その 0.5 台だけが異常 → Load Balancer が自動的に「異常なサーバー」を除外 → 残り 9.5 台で処理継続。ユーザーへの見えない影響は「数百万人中数人が 1 リクエスト失敗」程度で SLA 内。一方、100% デプロイで問題が発生 → 全ユーザー影響 → 復旧に時間 → SLA 違反。

⑨ 深掘り補足(PCA 試験範囲外・オプション)

最新 GA: Cloud Deploy リリース管理機能

⚠️ 最新情報(2026年5月時点)

Cloud Deploy は以下の GA 機能をリリース: - Release Monitor: デプロイ後 24 時間のメトリクス自動監視。エラー率・レイテンシ・SLI が SLO を超えたら自動アラート。 - Deployment Dashboards: Cloud Console で「本番環境のデプロイ履歴・成功率・ロールバック回数」をリアルタイム可視化。 - GitOps Integration: Git リポジトリの「release branch」に Tag を push → 自動デプロイ(手作業不要)。

実務への応用: - SRE チームが「デプロイ成功率 99% 以上」をメトリクスとして追跡可能 - 毎週のスタンドアップで「先週のデプロイ 5 件中 1 件ロールバック」という事実ベースの議論が可能

テスト戦略: 「ピラミッド」vs「アイスクリーム」

ピラミッド(推奨)          アイスクリーム(避けるべき)
    △ E2E 少ない                     ▲ E2E 多い
   △△ 統合 中程度                  ▲▲ 統合 少ない
  △△△ ユニット 多い              ▲▲▲ ユニット 中程度
  • ピラミッド: ユニットテスト → 統合テスト → E2E テスト の順に「数が減る」。
  • 理由:ユニットテストが高速(100ms)で、E2E テストが低速(10秒)。
  • CI-CD では「ユニット失敗 → 即フィードバック」で開発効率向上。

  • アイスクリーム: E2E テストが多い → CI-CD が遅い(数分かかる)→ 開発者のフィードバック待機時間が長い(生産性低下)。

PCA 試験でのポイント: - テスト戦略を聞かれたら「ピラミッド構造で、ユニットテストの数が最も多い」と答える。

ロールバック戦略: 「Blue-Green」vs「Canary」vs「Rolling」

デプロイ戦略 切り替え時間 ロールバック時間 リスク 本番メモリ
Blue-Green 瞬時(<1秒) 瞬時(<1秒) 低(前バージョン残存) 2 倍(両バージョン稼働)
Canary 段階的(数分) 自動・即座 最低(5% から検証) 1.1 倍
Rolling 段階的(数分) 遅い(多数のインスタンス切り替え) 中(中断時間あり) 1 倍

PCA 試験での選択軸: - SLA 99.99% 以上 → Blue-Green(ロールバック時間が瞬時) - ユーザー影響を最小化 → Canary(5% テスト) - リソース(メモリ)制約がある → Rolling(ただしダウンタイムリスク上がる)


次回: 4.2 ビジネスプロセスの分析と定義