TL

IaC(Infrastructure as Code)

サーバーやネットワークを画面の手作業ではなく“コード”で定義・管理する考え方。Gitで履歴を残し、同じ環境を何度でも再現できる。

中級IaCTerraformAnsible冪等性最終更新: 2026-06-04
TL;DR要点だけ先に
  • 1.IaC は インフラをコードで定義する手法:手作業のクリックをやめ、設定ファイルからサーバー/ネットワークを構築する。
  • 2.嬉しさは 再現性・レビュー・履歴:同じ環境を何度でも作れ、Pull Request で確認でき、Git に変更が残る。
  • 3.宣言的(あるべき姿を書く)が主流で、何度流しても結果が同じになる「冪等性」が鍵。

なぜ手作業をやめるのか

クラウドのコンソールをポチポチ操作してサーバーを立てる方法は、最初は速いですが、次の問題を抱えます。

  • 再現できない:「本番と同じ検証環境」を手で作ると、必ずどこか食い違う(設定漏れ・スノーフレークサーバー)。
  • 記録が残らない:誰がいつ何を変えたか分からず、障害時に切り分けできない。
  • 属人化する:手順が担当者の頭の中にしかなく、レビューもできない。

IaC はこれを 「コード=唯一の正(Single Source of Truth)」 にすることで解決します。環境はコードから生成されるので、ファイルを見れば構成が分かり、変更は差分(diff)で追えます。

嬉しさは“ソフトウェア開発の作法”をインフラに持ち込めること

コード化すると、Pull Request での レビュー、Git での 履歴・巻き戻し、CI/CD での 自動適用 がそのまま使えます。インフラ変更が「手順書とスクショ」から「コードの差分」になるのが本質的な価値です。

宣言的 vs 手続き的

IaC の書き方には大きく2つの流派があります。違いは「何を書くか」です。

  • 宣言的(Declarative)あるべき最終状態(What) を書く。「サーバーを2台、このネットワークに」と宣言すると、ツールが現状との差分を計算して必要な操作を実行する。
  • 手続き的(Imperative)手順(How) を書く。「サーバーを1台作る → もう1台作る → …」と、やることを順番に並べる。

宣言的は「現状がどうあれ、書いたとおりの状態に収束させる」ため、後述の冪等性と相性が良く、現在の主流です。

観点宣言的(Declarative)手続き的(Imperative)
書く対象あるべき状態(What)実行手順(How)
差分の計算ツールが自動で算出自分で考慮する必要
再実行同じ状態に収束(冪等になりやすい)書き方次第で副作用が出やすい
イメージ「2台ある状態にして」「1台作る→もう1台作る」
代表例Terraform・CloudFormationシェルスクリプト・古典的な手順

冪等性(べきとうせい)が鍵

IaC で最も大事な性質が 冪等性(idempotency)同じコードを何回適用しても、結果が同じ状態になる こと。

たとえば「サーバーが2台ある状態」を宣言したコードは、

  • 0台のとき流す → 2台 作る
  • すでに2台あるとき流す → 何もしない(差分ゼロ)
  • 1台のとき流す → 不足分を 1台だけ追加

というように、現状に応じて差分だけを埋めます。これにより「もう一回流したら3台になった」といった事故を防げ、安心して何度でも適用できます。

“スクリプトを書けばIaC”ではない

単なるシェルスクリプトは、2回実行すると「ユーザーを二重作成」「同じ行をファイルに追記し続ける」など壊れがちです。冪等になるよう自分で if 判定を書く必要があります。IaC ツールは この冪等性を仕組みとして担保 してくれる点が、素のスクリプトとの大きな差です。

プロビジョニング vs 構成管理

IaC は守備範囲で2層に分けて考えると整理できます。混同しやすいので押さえておきましょう。

  • プロビジョニング(基盤の用意):サーバー・ネットワーク・ロードバランサなど インフラそのものを作る。代表が Terraform。クラウドの状態を state で管理し、宣言的に構築する。
  • 構成管理(中身のセットアップ):用意したサーバーの中で ミドルウェア導入・設定・デプロイ を行う。代表が Ansible。OS の上の状態を整える。

実務では「Terraform で箱(サーバー)を作り、Ansible で中身(nginx 等)を入れる」のように 組み合わせて 使うのが定番です。

観点プロビジョニング構成管理
役割インフラ自体を作るサーバー内部を設定する
対象VM・ネットワーク・LB・DNSパッケージ・設定ファイル・サービス
代表ツールTerraform / CloudFormationAnsible / Chef / Puppet
状態管理state でクラウドと突き合わせ実行のたびにあるべき状態へ収束
たとえ土地と建物を建てる部屋に家具を配置する
境界は厳密ではない

Terraform でも軽い初期設定はできますし、Ansible でクラウドリソースを作ることも可能です。「Terraform=基盤、Ansible=中身」は 役割の典型 であって、ツールが機能的に排他なわけではありません。チームの方針で線引きします。

コードのイメージ

宣言的な書き方は、こんな雰囲気です(あるべき状態を宣言する)。

# あるべき状態:このスペックのサーバーを1台
resource "aws_instance" "web" {
  ami           = "ami-xxxxxxxx"
  instance_type = "t3.micro"
  tags = {
    Name = "web-server"
  }
}

適用は「差分を確認 → 反映」の2段階が基本です。いきなり本番を変えず、まず計画(プラン)を見るのが安全な作法です。

terraform plan    # 何が変わるか差分を表示(まだ変更しない)
terraform apply   # 確認のうえ実際に反映

構成管理(Ansible)側は「あるべき状態」をタスクで並べます。冪等なモジュールを使うので、再実行しても余計な変更は起きません。

# nginx が「入っていて起動している」状態にする
- name: install and start nginx
  hosts: web
  tasks:
    - name: nginx をインストール
      ansible.builtin.package:
        name: nginx
        state: present     # “あるべき状態”を宣言(無ければ入れる)
    - name: nginx を起動・有効化
      ansible.builtin.service:
        name: nginx
        state: started
        enabled: true

つまずきポイント

  • state ファイルの扱い:Terraform は現状を state に記録します。これをローカルに置いて共有しないと、チームで上書き事故が起きます。リモート(S3 等)で共有+ロック が定石。
  • 手で直さない(ドリフト):IaC 管理下のリソースをコンソールから手動変更すると、コードと実体がズレる 構成ドリフト が発生し、次回適用で巻き戻る/壊れる原因に。変更は必ずコード経由で。
  • 秘密情報をコードに書かない:パスワードや鍵を平文でコミットしない。変数・シークレット管理(Vault 等)に逃がす。
IaC を入れても“手で直す”と価値が消える

最大のアンチパターンは、コード管理しているのに緊急時だけコンソールで手修正すること。コードと現実が乖離した瞬間、「再現性」も「履歴」も失われます。直したいならコードを直す を徹底するのが、IaC を機能させる前提です。

まとめ

  • IaC は インフラをコードで定義 し、Git で 履歴・レビュー・再現性 を得る手法。
  • 主流は 宣言的(あるべき状態を書く)で、冪等性(何度流しても同じ状態)が安全性の核。
  • プロビジョニング(Terraform)で基盤、構成管理(Ansible)で中身 を担当し、組み合わせて使うのが定番。
  • インフラ変更が「コードの差分」になると、CI/CD で自動適用したり、GitOps で Git を起点に運用したりと、自動化の土台になります。詳しいツールは Terraform も参照。

DevOps/インフラ Article

IaC(Infrastructure as Code)を実務で読む

TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。

解決すること

IaC

比較で見る軸

難易度: intermediate / カテゴリ: DevOps/インフラ / タグ数: 4

導入後に効く点

嬉しさは 再現性・レビュー・履歴:同じ環境を何度でも作れ、Pull Request で確認でき、Git に変更が残る。

先に潰すリスク

用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。

数字・仕様の読み方
難易度
intermediate
カテゴリ
DevOps/インフラ
タグ数
4

判断チェックリスト

  • 自社の用途が「IaC / Terraform」に近いか確認する。
  • 強みである「IaC は インフラをコードで定義する手法:手作業のクリックをやめ、設定ファイルからサーバー/ネットワークを構築する。」が本当に評価軸になるか確認する。
  • 注意点の「用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。」を運用で吸収できるか確認する。
  • 公開値や仕様値は、対象プラン・対象機種・対象リージョンまで確認する。
  • 既存システム、ID、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
  • 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。

次に確認する観点

IaCTerraformAnsible冪等性IaCTerraformAnsible冪等性
参考: 公式情報