GitOps

英語名 GitOps
読み方 ギットオプス
難易度
所要時間 導入に1〜2週間
提唱者 Weaveworks社(アレクシス・リチャードソン)
目次

ひとことで言うと
#

Gitリポジトリに格納された宣言的な設定ファイルを「唯一の信頼源(Single Source of Truth)」とし、リポジトリの状態と実環境を自動的に同期させることで、デプロイと運用を安全・効率的に行う手法。

押さえておきたい用語
#

押さえておきたい用語
宣言的設定(Declarative Configuration)
「どうやるか」ではなく**「あるべき状態」を記述する**設定方式のこと。Kubernetesマニフェストやterraformファイルが代表例で、状態の差分を自動的に解消する。
Pull型デプロイ(Pull-based Deployment)
CI/CDパイプラインから環境にpushするのではなく、環境側のオペレーターがGitリポジトリの変更を検知して自動で引っ張るデプロイ方式のこと。GitOpsの特徴的な仕組み。
ドリフト検知(Drift Detection)
Gitリポジトリに定義された状態と実環境の状態が乖離していないかを監視する機能のこと。手動変更によるドリフトを検知してアラートまたは自動修復する。
GitOpsオペレーター(GitOps Operator)
Gitリポジトリを監視し、リポジトリの状態と実環境を自動的に同期させるツールのこと。Argo CDやFlux CDが代表例。

GitOpsの全体像
#

Git → オペレーター → 環境同期のPull型デプロイで安全・自動化
宣言的設定あるべき状態を記述K8sマニフェストGitでバージョン管理PRレビュー必須CI(ビルド)テスト・ビルド実行イメージ作成・プッシュ設定リポジトリのPR自動作成CI/CDの責務分離オペレーターArgo CD / Flux CDGitの変更をPull差分を自動検知環境に自動反映ドリフト検知Git⇔環境の差分監視手動変更をアラート自動修復(Git優先)git revertでロールバックGitを唯一の信頼源として環境との自動同期で安全なデプロイを実現
GitOpsの導入フロー
1
宣言的設定
環境のあるべき状態をGitで管理
2
オペレーター導入
Argo CD / Flux CDで自動同期
3
デプロイフロー
CI→設定リポジトリPR→自動反映
ドリフト検知
Git⇔環境の乖離を監視・自動修復

こんな悩みに効く
#

  • 本番環境に誰がいつ何を変更したか追跡できない
  • 手動デプロイによるミスや環境差異が頻発する
  • ロールバックの手順が複雑で、障害からの復旧に時間がかかる

基本の使い方
#

ステップ1: 宣言的な設定ファイルをGitで管理する

環境のあるべき状態をコードとして定義し、Gitリポジトリに格納する。

  • Kubernetesマニフェスト、Helmチャート、Kustomizeなどで環境を宣言的に記述する
  • アプリケーションコードのリポジトリと、環境設定のリポジトリを分離する(推奨)
  • すべての変更はプルリクエスト経由で行い、レビュー・承認を必須にする

ポイント: 手動でkubectl applyやSSHログインをしない。すべてGit経由で変更する。

ステップ2: GitOpsオペレーターを導入する

Gitリポジトリと実環境を自動同期するツールを導入する。

  • Argo CD、Flux CDなどのGitOpsオペレーターを選定する
  • オペレーターがGitリポジトリを定期的にポーリング(またはWebhookで検知)
  • リポジトリの状態と実環境の差分を検知し、自動的に同期する

ポイント: Pull型デプロイ(オペレーターが環境側からGitを引っ張る)がGitOpsの特徴。CI/CDパイプラインからpushする方式とは異なる。

ステップ3: デプロイフローを確立する

開発からデプロイまでの一連のフローを整備する。

  • 開発者がアプリコードを変更 → CIでテスト・ビルド・イメージ作成
  • CIがイメージタグを環境設定リポジトリのマニフェストに反映(PRを自動作成)
  • PRがマージされると、GitOpsオペレーターが自動で環境に反映

ポイント: CI(ビルド・テスト)とCD(デプロイ)の責務を明確に分離する。

ステップ4: ドリフト検知とロールバック体制を整える

環境の状態がGitから逸脱していないかを常に監視する。

  • オペレーターのドリフト検知機能を有効にし、手動変更をアラートで通知する
  • ドリフトを検知したら自動的にGitの状態に戻す(自動修復)
  • ロールバックはGitのrevertで実現。git revert → 自動同期 → 環境が前の状態に戻る

ポイント: ロールバックがgit revertだけで完了するのは、GitOpsの最大のメリットの一つ。

具体例
#

例1:SaaS企業がKubernetes環境にArgo CDでGitOpsを導入し、デプロイ事故をゼロにする

状況: 30人のエンジニアが開発するSaaS。手動でkubectl applyしてデプロイしており、月に2〜3回の設定ミスによるデプロイ事故が発生。ロールバックに平均30分

構成:

コンポーネントツール
アプリリポジトリGitHub + GitHub Actions(CI)
環境設定リポジトリKustomizeベース(dev/staging/prod)
GitOpsオペレーターArgo CD
シークレット管理Sealed Secrets

デプロイフロー: PR マージ → CI がイメージビルド → 設定リポジトリにタグ更新PR自動作成 → レビュー後マージ → Argo CDが3分以内に反映

結果: デプロイ事故が月2〜3回→0回に。ロールバック時間が30分→3分(git revert 1コマンド)。「誰がいつ何をデプロイしたか」がGit履歴で完全追跡可能に。

例2:フィンテック企業がGitOpsで監査対応とコンプライアンスを自動化する

状況: 金融サービスを提供する企業。PCI DSS準拠のため、本番環境の全変更に「誰が・いつ・何を・なぜ変更したか」の証跡が必要。手動での証跡記録に月60時間のコスト。年次監査の準備に2ヶ月

GitOps導入:

  1. 全環境変更をGitのPR経由に統一(手動変更を完全禁止)
  2. PRテンプレートに「変更理由」「影響範囲」「承認者」を必須入力
  3. Argo CDのドリフト検知で手動変更をSlack即時通知+自動修復
  4. Git履歴=監査証跡として活用

結果: 手動での証跡記録コストが月60時間→0時間に。年次監査の準備が2ヶ月→2週間に短縮。「Gitの履歴を見ればすべてわかる」状態になり、監査法人からも高評価。

例3:地方自治体のクラウド基盤をGitOpsで管理し、属人化と環境差異を解消する

状況: 地方自治体のクラウド基盤を管理する3人のインフラチーム。担当者がSSHログインして手動設定しており、環境構築手順が個人のメモに依存。担当者の異動で再現不能な環境が発生。dev/staging/prodの設定差異が月10件

GitOps導入:

  • Kustomizeで環境ごとの差分をオーバーレイで管理(base + overlays/dev, staging, prod)
  • Flux CDで3環境を自動同期
  • 新環境の構築は「リポジトリをフォーク→環境名を変更→Flux CDに登録」の3ステップ

結果: 環境差異が月10件→0件。新環境の構築が2日→2時間に。担当者が異動しても「リポジトリを読めばすべてわかる」状態を実現。kubectl操作の属人化が完全に解消。

やりがちな失敗パターン
#

  1. アプリコードと環境設定を同じリポジトリで管理する — アプリの変更のたびに環境設定のCIが走り、逆もまた然り。リポジトリを分離して責務を明確にする
  2. 手動変更を許容してしまう — 「緊急だから」とkubectl applyを許可すると、Gitとの乖離が常態化する。すべての変更はGit経由というルールを徹底する
  3. シークレットをそのままGitに入れる — 認証情報をGitにプレーンテキストで保存してしまう。Sealed Secrets、SOPS、External Secrets Operatorなどを使って暗号化管理する
  4. 環境ごとの設定差異が管理されない — dev/staging/prodの設定がバラバラのYAMLファイルに散在する。Kustomize overlaysやHelm valuesで環境差分を構造的に管理する

まとめ
#

GitOpsは「Gitを唯一の信頼源とし、宣言的な設定を自動同期する」というシンプルな原則に基づく運用手法。変更の追跡性、ロールバックの容易さ、環境の一貫性という大きなメリットがある。Kubernetes環境では特に相性が良く、Argo CDやFlux CDと組み合わせることで、安全で効率的なデプロイ自動化を実現できる