🚀 はじめに

この記事でわかること

  • Terraform と Ansible の役割の違い(何を自動化するツール?)
  • ないと何が大変?あると何が楽? の具体例
  • 超シンプルな実践チュートリアル(ローカルで安全に“雰囲気”を体験)
  • 次に学ぶと良い関連テーマ

✅ 概要解説

Terraform・Ansibleとは何か

一言でいうと:

  • Terraform = 「家(インフラ)を建てるための設計図と職人の指示書」
  • Ansible = 「建った家の中(サーバーの中身)を整える家事代行・内装業者」
  • Terraform(テラフォーム)
    クラウド(AWS/Azure/GCPなど)にサーバー、ネットワーク、ストレージといった “土台”を作る ツール。
    コード(HCL) でインフラを宣言”すると、そのとおりに作る/壊す/差分更新してくれます。
    IaC(Infrastructure as Code) の代表選手。

  • Ansible(アンシブル)
    できあがったサーバーにソフトを入れる・設定を変える・ファイルを置くなどの “中身の整備”を自動化
    プレイブック(YAML)”に手順を書くと、複数台に一気に同じ状態をつくってくれます。
    構成管理ツール の代表選手。

何のためにあるのか

  • 人手の作業ミスを減らし、同じ結果を何度でも作れるようにするため
  • 構築・設定のスピードアップ(環境差やメモ忘れをなくす)
  • 設計や履歴がコードとして残るので、引き継ぎや再現が簡単

ないとどうなるの?

  • 手作業のクリックやコマンドが増え、うっかり設定漏れが発生
  • 何が違って不具合なのか、“差”が追えない(再現が難しい)
  • 人依存になりやすく、忙しい時ほど時間が溶ける

どんな場面で使えるの?

  • Terraform

    • AWSで「EC2(サーバー)1台+セキュリティ設定」を毎回安全に作る
    • Azure/GCPでネットワーク+VM+ストレージの組み合わせを使い回したい
    • 検証環境を作って壊す何度も繰り返す
  • Ansible

    • サーバーにNginxやApacheをインストールして同じ設定にする
    • ユーザー追加・ログ設定・アプリ配布などの日常運用を自動化
    • 10台・100台のサーバー一気に同じ変更を適用

まとめ:Terraformは“外観と土台”Ansibleは“内装と日々の暮らし” を整える役割と考えるとスッキリします。


💡 小話・豆知識・逸話

  1. “宣言的”と“手続き的”

    • Terraformは宣言的:「最終的にこうなっていてほしい」を書きます。
    • Ansibleも基本は宣言的ですが、タスクを順番に並べる手続き的な側面もわかりやすいです。
      “最終形を宣言”して、必要な操作はツールが計算してくれるのが気持ちよさの源。
  2. 手で作る→壊せない問題
    人がクリックで作ったリソースは、どこで作ったか忘れがち
    Terraformで作れば terraform destroy綺麗にお片付けできます。

  3. 怖いのは“違い”がわからないこと
    Ansibleは “状態を合わせる” のが得意。何が足りないかを見つけて足りないぶんだけ変更し、同じ状態に寄せるから安心。


🧪 超ミニ実践チュートリアル(ローカルで安全)

目的:クラウド契約なし・サーバー本番変更なしで、
Terraform=ファイルから計画と差分Ansible=複数“対象”に同じ変更雰囲気をつかむ。
※ 実動サーバーをいじらないローカル完結の体験です。

準備

  • インストール

    • Terraform:公式の配布からインストール(参考リンク参照)
    • Ansible:macOSなら brew install ansible、Linuxなら apt/yum など
  • 作業フォルダ(任意の空フォルダを作成)


Part A:Terraform(ローカルで“計画→差分”の流れだけ体験)

ここでは実際のクラウドを作らずダミーのローカルプロバイダを使ってPlan/Diffの体験をします。
(Terraformは “計画(plan)→承認(apply)→現状と差分(state)” の3点セットが肝)

  1. ファイルを作成main.tf に次を書きます。
# main.tf(ローカルのダミー例:terraformの基本構文だけ体験)
terraform {
  required_version = ">= 1.6.0"
  required_providers {
    local = {
      source  = "hashicorp/local"
      version = "~> 2.5"
    }
  }
}

provider "local" {}

# "local_file" はローカルにファイルを作ってくれるダミー資源(安全)
resource "local_file" "hello" {
  content  = "Hello Terraform! 学習用にローカルへ書き出し"
  filename = "${path.module}/hello.txt"
}
  1. 初期化→計画(フォルダで実行)
terraform init
terraform plan
  • init:必要なプラグインを準備
  • plan「何が起きるか」 を先に表示(まだ変更しない
  1. 適用(ダミーなので安全)
terraform apply
# (表示されたプランに "yes" と答える)
  • hello.txt ができていればOK
  • もう一度 terraform plan をすると、差分ゼロ(=望む状態に一致)の表示に
  1. 変更して差分を体験content を別の文に変えて planapply
terraform plan
terraform apply
  1. お片付け
terraform destroy
# "yes"

学びポイント

  • 宣言(main.tf) に対して、計画(plan) が出る
  • 承認(apply)で “宣言どおり”の世界に寄せる
  • destroyきれいに戻せる

Part B:Ansible(複数ターゲットに“同じ状態”を作る体験)

ここでは実サーバーには触れません
ローカルの “疑似ターゲット” として、テキストファイル2か所同じ内容で作らせます。
(Ansibleのインベントリプレイブックの基本を体感)

  1. インベントリ(対象リスト)inventory.ini
[web]
target_a ansible_connection=local
target_b ansible_connection=local
  • web というグループに 2つのターゲットがいるイメージ(どちらもローカル)
  1. プレイブック(やりたいこと)site.yml
---
- name: 同じメッセージを2か所に配る(学習用)
  hosts: web
  gather_facts: false

  vars:
    message_text: "Hello Ansible! みんな同じ状態にしよう"
    dest_files:
      - "./ansible_out/target_a/message.txt"
      - "./ansible_out/target_b/message.txt"

  tasks:
    - name: 出力ディレクトリを用意
      ansible.builtin.file:
        path: "{{ item | dirname }}"
        state: directory
      loop: "{{ dest_files }}"

    - name: 同じ内容のファイルを配布
      ansible.builtin.copy:
        dest: "{{ item }}"
        content: "{{ message_text }}"
      loop: "{{ dest_files }}"
  1. 実行
ansible-playbook -i inventory.ini site.yml
  • ansible_out/target_a/message.txtansible_out/target_b/message.txt同じ内容なら成功
  • もう一度実行しても変更なし(ok) になりやすい=冪等(べきとう) の体験
  1. メッセージだけ変えて再実行→変わったことが差分として報告されるのを確認

学びポイント

  • インベントリ(対象サーバーのリスト)
  • プレイブック(YAMLで“こうなってほしい”を書く)
  • 冪等性必要なときだけ変更し、同じ状態なら何もしない

📚 参考リンク

公式サイト・ドキュメント

Wikipedia


🛠️ 関連テーマ・次に理解すると良いこと


🎯 まとめ

  • Terraform=インフラ(土台)をコードでつくるAnsible=サーバーの中身を揃える
  • どちらも “望む状態を宣言” して、差分を自動適用できるのが強み
  • 人手ミス減少・再現性向上・スピードアップで、運用がぐっと楽に
  • ミニ実践(Terraform:plan/apply/destroy、Ansible:inventory+playbook)で感触をつかむ
  • 次はクラウドの基礎+セキュリティ+CI/CDへステップアップ