🚀 はじめに
この記事でわかること
- 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は“内装と日々の暮らし” を整える役割と考えるとスッキリします。
💡 小話・豆知識・逸話
“宣言的”と“手続き的”
- Terraformは宣言的:「最終的にこうなっていてほしい」を書きます。
- Ansibleも基本は宣言的ですが、タスクを順番に並べる手続き的な側面もわかりやすいです。
⇒ “最終形を宣言”して、必要な操作はツールが計算してくれるのが気持ちよさの源。
手で作る→壊せない問題
人がクリックで作ったリソースは、どこで作ったか忘れがち。
Terraformで作ればterraform destroyで綺麗にお片付けできます。怖いのは“違い”がわからないこと
Ansibleは “状態を合わせる” のが得意。何が足りないかを見つけて足りないぶんだけ変更し、同じ状態に寄せるから安心。
🧪 超ミニ実践チュートリアル(ローカルで安全)
目的:クラウド契約なし・サーバー本番変更なしで、
Terraform=ファイルから計画と差分、Ansible=複数“対象”に同じ変更の雰囲気をつかむ。
※ 実動サーバーをいじらないローカル完結の体験です。
準備
インストール
- Terraform:公式の配布からインストール(参考リンク参照)
- Ansible:macOSなら
brew install ansible、Linuxならapt/yumなど
作業フォルダ(任意の空フォルダを作成)
Part A:Terraform(ローカルで“計画→差分”の流れだけ体験)
ここでは実際のクラウドを作らず、ダミーのローカルプロバイダを使ってPlan/Diffの体験をします。
(Terraformは “計画(plan)→承認(apply)→現状と差分(state)” の3点セットが肝)
- ファイルを作成:
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"
}
- 初期化→計画(フォルダで実行)
terraform init
terraform plan
init:必要なプラグインを準備plan:「何が起きるか」 を先に表示(まだ変更しない)
- 適用(ダミーなので安全)
terraform apply
# (表示されたプランに "yes" と答える)
hello.txtができていればOK- もう一度
terraform planをすると、差分ゼロ(=望む状態に一致)の表示に
- 変更して差分を体験:
contentを別の文に変えてplan→apply
terraform plan
terraform apply
- お片付け
terraform destroy
# "yes"
学びポイント
- 宣言(main.tf) に対して、計画(plan) が出る
- 承認(apply)で “宣言どおり”の世界に寄せる
- destroy できれいに戻せる
Part B:Ansible(複数ターゲットに“同じ状態”を作る体験)
ここでは実サーバーには触れません。
ローカルの “疑似ターゲット” として、テキストファイルを2か所に同じ内容で作らせます。
(Ansibleのインベントリとプレイブックの基本を体感)
- インベントリ(対象リスト):
inventory.ini
[web]
target_a ansible_connection=local
target_b ansible_connection=local
webというグループに 2つのターゲットがいるイメージ(どちらもローカル)
- プレイブック(やりたいこと):
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 }}"
- 実行
ansible-playbook -i inventory.ini site.yml
ansible_out/target_a/message.txtとansible_out/target_b/message.txtが同じ内容なら成功- もう一度実行しても変更なし(ok) になりやすい=冪等(べきとう) の体験
- メッセージだけ変えて再実行→変わったことが差分として報告されるのを確認
学びポイント
- インベントリ(対象サーバーのリスト)
- プレイブック(YAMLで“こうなってほしい”を書く)
- 冪等性:必要なときだけ変更し、同じ状態なら何もしない
📚 参考リンク
公式サイト・ドキュメント
- Terraform 公式サイト:https://www.terraform.io/
- Terraform ドキュメント:https://developer.hashicorp.com/terraform/docs
- Ansible 公式サイト:https://www.ansible.com/
- Ansible ドキュメント:https://docs.ansible.com/
Wikipedia
- Terraform(英語):https://en.wikipedia.org/wiki/Terraform_(software)
- Ansible(英語):https://en.wikipedia.org/wiki/Ansible_(software)
🛠️ 関連テーマ・次に理解すると良いこと
クラウド別の基本(AWS/Azure/GCP)
- AWS:VPC/EC2/IAM の基礎
- Azure:VNet/VM/Managed Identity
- GCP:VPC/Compute Engine/Service Account
ネットワークの超基礎:サブネット、セキュリティグループ(ファイアウォール)
Terraformの設計:モジュール分割、
variables.tf、outputs.tf、remote state
【初心者向け】Terraformの“設計”をやさしく解説|失敗しないフォルダ構成・モジュール作り・ステート管理入門
Ansibleの実践:ロール、テンプレート(
templateモジュール)、Vault(秘匿情報)CI/CD と組み合わせ:GitHub Actions / GitLab CI で自動テスト→反映

【初心者向け】CI/CD(自動デプロイ)をやさしく解説|仕組み・メリット・イメージがつかめる入門ガイド
セキュリティ:最小権限(Least Privilege)と資格情報の安全管理
🎯 まとめ
- Terraform=インフラ(土台)をコードでつくる/Ansible=サーバーの中身を揃える
- どちらも “望む状態を宣言” して、差分を自動適用できるのが強み
- 人手ミス減少・再現性向上・スピードアップで、運用がぐっと楽に
- ミニ実践(Terraform:plan/apply/destroy、Ansible:inventory+playbook)で感触をつかむ
- 次はクラウドの基礎+セキュリティ+CI/CDへステップアップ
