DevOps・SREツールチェーンの系統と派生
CI/CD・IaC・GitOps・可観測性・オーケストレーションが「なぜ今の形か」を一望できます。push→pull、命令型→宣言型、監視→可観測性という三つの思想の派生を年代と分岐で整理し、ツール選定の軸が掴めます。
- 1.DevOpsツールチェーンの進化は個別ツールの優劣ではなく、三つの思想的派生で読める。push型→pull型(駆動の所在)、命令型→宣言型(記述の抽象度)、監視→可観測性(未知障害への対応)が各系譜を貫く共通軸。
- 2.CI/CDはビルド自動化から宣言的パイプライン・GitOpsへ、IaCはスクリプトから宣言的状態管理へ、可観測性はメトリクス監視から高カーディナリティの探索的分析へ分岐した。各分岐には『状態をどこに置き誰が収束させるか』という同型の論点がある。
- 3.宣言型・pull型・可観測性は連動して台頭した。望ましい状態を宣言し、エージェントが収束させ、未知の振る舞いを後から問い合わせる、という思想が一貫しており、ツールはこの思想の実装差として比較すると見通しが良い。
系統図として読むという視点
DevOps・SREのツールは数が多く、Jenkins・Terraform・Argo CD・Prometheus・Kubernetes……と並べても関係が見えません。しかしツールを個別の製品としてではなく「思想の派生」として読むと、一枚の系統図に整理できます。本稿の主張は単純で、過去十数年のツールチェーン進化は次の三つの軸の派生でほぼ説明できる、というものです。
- 駆動の所在:push型 → pull型(変更を外から送り込むか、内側のエージェントが取りに行くか)
- 記述の抽象度:命令型(手続き) → 宣言型(望ましい状態の宣言)
- 観測の深さ:監視(既知の指標の閾値判定) → 可観測性(未知の振る舞いの探索的分析)
この三軸は独立ではなく連動して台頭しました。宣言型は「望ましい状態」を生み、その状態へ収束させる主体としてpull型エージェントが要り、宣言と実体のズレや未知の挙動を後から問うために可観測性が要る。つまり三つは同じ思想潮流の三つの顔です。以下、年代と分岐を軸に各系譜を辿ります。
三軸の派生を一枚で
| 軸 | 古い極(から) | 新しい極(へ) | 本質的な問い |
|---|---|---|---|
| 駆動の所在 | push(外部CIがapplyを送る) | pull(内部エージェントが取りに行く) | 資格情報と収束責任をどこに置くか |
| 記述の抽象度 | 命令型(手順の列) | 宣言型(望ましい状態) | 手順を書くかゴールを書くか |
| 状態の真実 | 最後に実行した結果(不定) | 宣言された状態=真実(収束保証) | ドリフトを誰がいつ是正するか |
| 観測の深さ | 監視(既知メトリクスの閾値) | 可観測性(高次元の探索) | 未知の未知に後から答えられるか |
| 障害対応 | 事前に決めたダッシュボード | 事後にカードを切り直して問い合わせ | 計装時に質問を知っているか |
各系譜は、この表のどこを「古い極」から「新しい極」へ動かしたかで位置づけられます。重要なのは、新しい極が常に正しいわけではなく、トレードオフの選択だという点です(後述)。
系譜1:CI/CD ——ビルド自動化から宣言的デリバリへ
最初期(2000年代後半)の中心はビルドとテストの自動化でした。Jenkins に代表される世代は、ジョブを命令的に——「チェックアウトし、コンパイルし、テストを走らせ、成果物を置け」と手順で記述しました。この時点のデプロイは典型的なpush型で、CIサーバーが本番へ ssh や kubectl apply で変更を送り込みます。
世代1(命令型・push型):
CIサーバー: build → test → ssh/apply で本番へ送り込む
状態の真実 = 最後にapplyした内容(その後のズレは見えない)
世代2(宣言的パイプライン):
パイプライン定義をコード化(YAML)し、ステージ/依存を宣言
再現性・レビュー可能性は上がるが、デプロイはまだpush型
世代3(GitOps・pull型):
Gitの宣言=望ましい状態。クラスタ内エージェントが取りに行く
状態の真実 = Git。ドリフトを毎サイクル是正
分岐点は二つあります。第一に、パイプライン自体のコード化(pipeline-as-code)で、ジョブ設定がリポジトリに入りレビュー対象になりました。第二に、デプロイのpull型への転回=GitOpsです。CIは成果物を作りレジストリへ置くところまでを担い、デプロイは別系統のエージェントがGitを真実として収束させる——責務が「ビルド」と「収束」に分離しました。詳しくは /devops/ci-cd/ と /devops/gitops/ を参照してください。
push型ではCIが本番の認証情報を握り、外部から本番APIへ書き込みます。pull型ではクラスタ内エージェントが外向きにGit/レジストリを監視するだけで、本番への受口を外へ開けません。これは利便性の話ではなく攻撃面の設計の話です。CI基盤が侵害されたときの被害範囲が、push型では本番書き込み権限そのものに及ぶのに対し、pull型ではビルド成果物の改ざんに留められます。だからこの転回は供給網セキュリティ(/devops/artifact-signing-verification/)の文脈で語られます。
系譜2:IaC ——スクリプトから宣言的状態管理へ
インフラ構成も同じ軌跡を辿りました。初期は shell スクリプトや手続き的な構成管理で、「このパッケージを入れ、この行を書き換えよ」と命令的に書きました。問題は冪等性で、同じスクリプトを二度流すと壊れる、途中で失敗すると中途半端な状態になる、という不安定さがありました。
宣言型IaC(Terraform 等)はここを反転させ、「最終的にこういうリソースが存在してほしい」という望ましい状態だけを書かせ、現状との差分(plan)を計算して必要な変更だけを適用(apply)します。原理は GitOps の調整ループと同型で、望ましい状態 − 観測状態 = 差分 を縮める操作です。基礎は /devops/iac/、宣言型ゆえに不可欠なのが状態(state)の管理とドリフト・ロックで、ここが実装上の難所になります(/devops/iac-state-drift-locking/)。
命令型は「実行した/していない」だけで状態を外部に持ちません。宣言型は望ましい状態と観測状態を突き合わせる必要があるため、観測状態をどこかに記録しなければなりません。IaCではこれがstateファイルで、複数人が同時にapplyすると状態が壊れるためロックが要り、実体が手動変更でズレればドリフトになります。GitOpsではこの「状態の置き場」がGitと実クラスタに分かれ、エージェントが毎サイクル突き合わせます。宣言型を選んだ瞬間に『状態の置き場と収束の主体』を必ず設計させられる——これが命令型から宣言型への移行で支払う代償です。
派生の系統を箇条書きで俯瞰すると次のようになります。
- 命令型(〜2010頃):手続きスクリプト。冪等でなく、再実行が安全でない。
- 宣言型・push適用(2010年代):望ましい状態を宣言し、人/CIが
applyを叩く。stateとドリフトの概念が生まれる。 - 宣言型・pull収束(2010年代後半〜):GitOps・Operator パターンで、エージェントが望ましい状態へ継続収束させる。applyは「Gitを書く」に置き換わる。
このpull収束の極致が Kubernetes の調整ループであり、その一般論は /devops/reconciliation-control-loop/ にまとめています。
系譜3:監視から可観測性へ
第三の系譜は観測です。古い極は監視(monitoring)で、Nagios 世代の「ホストが生きているか」「CPUが閾値を超えたか」という既知の指標の閾値判定でした。前提は「何を見るべきかを事前に知っている」こと。次の世代はメトリクスの時系列化(Prometheus 等)で、多次元のラベル付き時系列を集計・アラートできるようになりましたが、依然として事前に決めた質問に答える構造です。
転回点は可観測性(observability)という概念で、「内部状態を外部出力から推測できる度合い」と定義されます。狙いは未知の未知(unknown unknowns)——計装時に予期しなかった質問に、事後に答えられること。これを可能にするのが、高カーディナリティ・高次元の構造化イベントを保持し、後から任意の軸で絞り込む探索的分析です。
監視(既知の質問):
事前にダッシュボードとアラートを定義 → 閾値超過で発火
「想定済みの障害」には強いが、想定外には盲目
可観測性(未知の質問):
高カーディナリティの構造化イベントを保持
事後に任意の軸(user_id, build_id, region…)で切り直して問い合わせ
「なぜ特定ユーザーだけ遅いか」を計装後に答えられる
可観測性は三つの柱(メトリクス・ログ・トレース)として語られがちですが、本質は柱の数ではなく高カーディナリティを保持したまま相関できるかにあります。トレース(/devops/distributed-tracing/)はリクエストの因果を、構造化ログは個別事象の文脈を、メトリクスは集計を担い、これらを横断する計装標準が OpenTelemetry です(内部は /devops/opentelemetry-internals/)。総論は /devops/observability/ を参照してください。
なぜ三軸は連動したのか
ここまでを統合すると、三つの系譜が同じ思想の三面であることが見えます。
- 宣言型が「望ましい状態」という概念を導入する。
- その望ましい状態へ実体を継続的に収束させる主体として、pull型エージェントが要る(push型は単発イベントで収束を保証しない)。
- 宣言と実体のズレ(ドリフト)、収束の失敗、そして宣言からは読めない実行時の振る舞いを後から問うために、可観測性が要る。
つまり「望ましい状態を宣言し、エージェントが収束させ、未知の挙動を後から問い合わせる」という一貫した世界観が、CI/CD・IaC・観測の三系統を同時に新しい極へ引っ張ったのです。コンテナオーケストレーション(Kubernetes)はこの世界観をOSとして体現した存在で、全リソースを宣言的に記述し、コントローラ群が pull 型で収束させ、その内部状態を可観測性で覗く、という三軸の合流点に位置します。
系統図は進歩史観で読むと誤ります。宣言型は『間違った望ましい状態』にも忠実に収束し、誤った宣言をコミットすれば全力で本番へ押し付けます。pull型は反映が最終的整合で、pushした瞬間に変わらないため緊急の即時介入とは相性が悪い。可観測性は高カーディナリティ=コストで、保持データ量とクエリ負荷が跳ね上がります。だから実務では、緊急時にpush的な直接介入の経路を残す、サンプリングでカーディナリティを抑える、命令型スクリプトを使い捨ての運用作業に限って併用する、といった極の使い分けをします。系統図は「どの軸をどちらへ動かしたか」を示す地図であって、片側が常に優るランキングではありません。
DevOpsツールチェーンの進化を「個別ツールの優劣」でなく「push→pull・命令型→宣言型・監視→可観測性の三軸の派生」で説明できること。push→pullの本質は資格情報の向きと収束責任の所在(pull型は本番への受口を外へ開けない)。命令型→宣言型を選ぶと必ず『状態の置き場と収束の主体』を設計させられ、stateロックとドリフトが生じる理由を述べられること。監視→可観測性の差は「事前に質問を知っているか(既知の未知)」対「事後に任意の軸で問い合わせられるか(未知の未知)」で、本質は柱の数でなく高カーディナリティ保持。そして三軸が連動して台頭した理由(宣言→pull収束→可観測の必然的連鎖)と、新しい極のトレードオフ(誤った状態への忠実な収束・最終的整合・コスト)を一組で語れると強い。
まとめ
- DevOps・SREツールチェーンの進化は、**push→pull(駆動の所在)・命令型→宣言型(記述の抽象度)・監視→可観測性(観測の深さ)**という三軸の派生で一望できる。ツールはこの思想の実装差として比較する。
- CI/CDはビルド自動化→宣言的パイプライン→GitOps(pull型)へ分岐し、責務が「ビルド」と「収束」に分離した。IaCは命令型スクリプト→宣言的状態管理へ移り、stateとドリフトという代償を生んだ。
- 観測は既知メトリクスの監視→未知の未知に答える可観測性へ転回し、本質は高カーディナリティを保持した相関にある。
- 三軸は独立でなく連動して台頭した。望ましい状態を宣言し、pull型エージェントが収束させ、可観測性で実行時を問う、という一貫した世界観の三面であり、Kubernetesはその合流点。
- ただし新しい極は万能でなく、誤った状態への忠実な収束・最終的整合・観測コストというトレードオフを伴う。系統図は優劣のランキングではなく、軸をどちらへ動かしたかを示す地図である。
DevOps/インフラ Article
DevOps・SREツールチェーンの系統と派生を実務で読む
TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。
解決すること
DevOps
比較で見る軸
難易度: advanced / カテゴリ: DevOps/インフラ / タグ数: 6
導入後に効く点
CI/CDはビルド自動化から宣言的パイプライン・GitOpsへ、IaCはスクリプトから宣言的状態管理へ、可観測性はメトリクス監視から高カーディナリティの探索的分析へ分岐した。各分岐には『状態をどこに置き誰が収束させるか』という同型の論点がある。
先に潰すリスク
用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。
- 難易度
- advanced
- カテゴリ
- DevOps/インフラ
- タグ数
- 6
判断チェックリスト
- 自社の用途が「DevOps / SRE」に近いか確認する。
- 強みである「DevOpsツールチェーンの進化は個別ツールの優劣ではなく、三つの思想的派生で読める。push型→pull型(駆動の所在)、命令型→宣言型(記述の抽象度)、監視→可観測性(未知障害への対応)が各系譜を貫く共通軸。」が本当に評価軸になるか確認する。
- 注意点の「用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。」を運用で吸収できるか確認する。
- 公開値や仕様値は、対象プラン・対象機種・対象リージョンまで確認する。
- 既存システム、ID、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
- 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。