1. 概要
この記事では、以下の内容を解説します。
- IaC(Infrastructure as Code)とは何か
- Terraformの基本的な概念と仕組み
- TerraformでAWSのインフラをどのように管理するか
- 他のIaCツールとの違い
- Terraformを学ぶための最初のステップ
「Terraformという名前を聞いたことがあるが、何をするツールなのか分からない」という方を主な対象としています。
2. Terraformにおける位置付け
IaC(Infrastructure as Code)とは
IaCとは、サーバーやネットワークといったインフラの構成を*コードとして記述・管理する手法*です。
例えばAWSでEC2インスタンスを1台作る場合、通常はAWSのマネジメントコンソール(ブラウザ)を操作します。このときの手順を記録しておかなければ、まったく同じ構成を別の環境に再現することはできません。
IaCはこの問題を解決します。インフラの構成をコードで書いておくことで、同じ環境を何度でも再現できるようになります。
【手動管理の場合】
コンソールをクリック → EC2が完成 → 手順書に書いた(でもすぐ古くなる)
【IaCの場合】
コードを書く → terraform apply → EC2が完成 → コードをGitで管理
Terraformとは
Terraformは、HashiCorpが開発したIaCツールです。現在はIBM傘下で開発が継続されています。
Terraformの最大の特徴は*宣言的*な記述方式です。「どのような状態にしたいか」をコードで宣言するだけで、現在の状態との差分をTerraformが自動的に計算し、必要な操作を実行してくれます。
💡 宣言的とは? 「AWSにEC2インスタンスをt3.microで1台作れ」という命令(手続き的)ではなく、 「t3.microのEC2インスタンスが1台存在する状態にしてほしい」という宣言(宣言的)のことです。 すでに1台存在していれば何もしない、0台なら1台作る、2台あれば1台削除する、という動作になります。
AWSだけでなく、Azure・GCP・Kubernetes・Cloudflareなど3,000以上のサービスに対応しています。
ライセンスについての注記
2023年8月にHashiCorpはTerraformのライセンスをオープンソース(MPL-2.0)からBSL 1.1に変更しました。一般的なインフラ管理用途では引き続き無償で利用できます。
この変更をきっかけに、オープンソースフォークとしてOpenTofuが誕生しています。TFPediaでは主にTerraform(HashiCorp版)を対象に解説しますが、多くのコード例はOpenTofuでも動作します。
3. Terraformの基本構文
TerraformはHCL(HashiCorp Configuration Language)という言語で設定ファイルを書きます。ファイルの拡張子は.tfです。
以下は、AWSに「t3.microのEC2インスタンスを1台作る」という最もシンプルなコードです。
# providers.tf
# どのクラウドを使うかを宣言
provider "aws" {
region = "ap-northeast-1" # 東京リージョン
}
# main.tf
# どんなリソースを作るかを宣言
resource "aws_instance" "web" {
ami = data.aws_ami.amazon_linux.id
instance_type = "t3.micro"
tags = {
Name = "my-first-server"
}
}
「リソースの種類(aws_instance)」と「このプロジェクト内での名前(web)」を指定し、中括弧の中に詳細な設定を書く、という構造です。
HCLの詳細な書き方は「resourceブロックの使い方」で解説しています。
4. 詳細解説
4つの主要概念
Terraformを理解するうえで、以下の4つの概念を押さえておくことが重要です。
Provider(プロバイダー)
ProviderはTerraformとクラウドサービスをつなぐプラグインです。AWSを使うにはhashicorp/awsプロバイダーを、Azureを使うにはhashicorp/azurermプロバイダーをインストールします。
プロバイダーはterraform initコマンドを実行したときに自動でダウンロードされます。
Resource(リソース)
Resourceは実際に作成するインフラの単位です。EC2インスタンス1台、S3バケット1個、それぞれが1つのResourceです。
resource "aws_s3_bucket" "logs" {
bucket = "my-tfpedia-logs-2026"
}
State(ステート)
Terraformは管理しているインフラの現在の状態をterraform.tfstateというファイルに記録します。これをStateと呼びます。
terraform planを実行すると、コードの内容とStateを比較して「何を変更すべきか」が分かります。
⚠️ 注意: Stateファイルにはデータベースのパスワード等の機密情報が含まれることがあります。GitHubなどの公開リポジトリに誤って含めないように注意してください。
Module(モジュール)
Moduleは複数のResourceをひとまとめにして再利用できるようにしたものです。例えば「VPC + サブネット + セキュリティグループ」のセットをモジュールにしておけば、dev環境でもprd環境でも同じモジュールを呼び出すだけで展開できます。
モジュールの詳細は「moduleブロックの使い方」で解説しています。
terraform の実行フロー
Terraformの基本的な実行手順は3ステップです。
ステップ1: terraform init
├─ Providerのダウンロード
└─ 初回だけ実行すればOK
ステップ2: terraform validate(任意・推奨)
├─ コードの構文チェック
└─ エラーがないか事前に確認できる
ステップ3: terraform plan
├─ コードとStateを比較
├─ 「何を作成・変更・削除するか」を表示
└─ 実際の変更は行われない(確認用)
ステップ4: terraform apply
├─ planの内容を確認して "yes" と入力
└─ 実際にAWS APIを呼び出してリソースを作成
terraform validateでコードの構文チェックを行い、terraform planで変更内容を確認してからterraform applyすることが鉄則です。planを確認せずにapplyすると、意図しない削除が起こる可能性があります。
5. 他のIaCツールとの比較
Terraformと同じような用途で使われるツールと比較します。
| ツール | 特徴 | 向いているケース |
|---|---|---|
| Terraform | マルチクラウド・宣言的・エージェントレス | AWS/Azure/GCPを組み合わせて使う |
| AWS CloudFormation | AWSネイティブ・YAML/JSON記述 | AWSのみ・AWS全サービスに対応 |
| AWS CDK | TypeScript/Pythonで記述 | プログラマーがコードでインフラを管理 |
| Ansible | 手続き的・設定管理が得意 | OS設定・ミドルウェアのインストール |
| Pulumi | JavaScript/Python等の汎用言語 | 汎用言語でインフラをコード化 |
*Ansibleとの違い*は特によく混乱されます。Ansibleはサーバーの中の設定(Nginxのインストール等)を管理するのが得意で、Terraformはインフラ自体(EC2の作成・VPCの設定等)を管理するのが得意です。両方を使い分ける現場も多くあります。
6. よくある質問
Q. Terraformを使い始めるには何が必要ですか?
以下の3つを用意します。
- Terraform CLI — 公式サイトからダウンロード
- AWSアカウントと認証情報 — IAMユーザーまたはIAMロールのアクセスキー
- テキストエディタ — VS CodeにTerraform拡張機能を入れると便利
インストールの詳細は「インストールと最初のコード」を参照してください。
Q. 無料で使えますか?
Terraform CLI自体は無料です(BSLライセンスの制限内で)。 ただしAWSのリソースを作成すると、AWSの利用料金が発生します。学習用には*ローカルプロバイダー*(AWSを使わずにローカルファイルを操作する)を使う方法もあります。
Q. どのくらいで習得できますか?
基本的な使い方(resource / variable / output)であれば、数日〜1週間で使い始められます。モジュール設計や本番環境の運用は、実際にプロジェクトで使いながら習得していくことが一般的です。
7. ベストプラクティス(最初に知っておくこと)
細かいベストプラクティスはそれぞれの記事で解説しますが、Terraformを使い始める前に知っておくべき基本的な考え方を3点まとめます。
*必ずplanを確認してからapplyする*
terraform planの出力は毎回必ず確認します。-/+(削除後に再作成)マークが出ている場合は、ダウンタイムや意図しないデータ損失につながる可能性があります。
*Stateファイルをチームで共有する*
ひとりで使う場合はローカルのStateファイルでも問題ありませんが、チームで使う場合はS3などのリモートで管理します。こうすることで「誰かが変更したのに他のメンバーが知らなかった」という事故を防げます。
*バージョンを固定する*
*.terraform.lock.hclはGitで管理する*
.terraform.lock.hclファイルはGitリポジトリに含めてください。このファイルはプロバイダーのバージョンをロックするためのもので、Terraform公式がGit管理を推奨しています。.gitignoreに追加するのは誤りです。
# .gitignoreに追加すべきファイル
.terraform/ # ダウンロードしたプロバイダーのキャッシュ
*.tfstate # Stateファイル(リモートbackendを使う場合)
*.tfstate.backup # Stateバックアップ
terraform.tfvars # 機密情報を含む場合のみ
# ❌ 追加してはいけない
# .terraform.lock.hcl # Git管理推奨(チームでバージョン固定のため)
Terraformのバージョン(required_version)とプロバイダーのバージョン(required_providersのversion)は必ず指定します。バージョンを固定しないと、意図せずアップグレードされた際に動作が変わることがあります。
8. 関連記事
TFPediaで次に読む記事の推奨順序です。
*まずはここから:*
- インストールと最初のコード — Terraformをインストールして最初のコードを動かす
*基本ブロックを学ぶ:*
- resourceブロックの使い方 — リソースの定義方法(最重要)
- variable(入力変数)の使い方 — 変数で柔軟なコードを書く
- outputの使い方 — 実行結果の値を取り出す
*コマンドを学ぶ:*
- terraform init / plan / apply / destroyの使い方 — 基本コマンド完全ガイド
*実務に向けて:*
- backendの設定方法 — Stateをチームで共有する
- ディレクトリ構成 ベストプラクティス — プロジェクトの整え方
9. まとめ
- Terraformは「インフラをコードで管理する」IaCツールで、AWSなどのクラウドリソースをコードで定義・管理できる
- コードに「こういう状態にしてほしい」と宣言するだけで、Terraformが現在の状態との差分を計算して適用してくれる(宣言的)
terraform init→terraform plan→terraform applyの3ステップが基本の実行フロー- Provider(クラウドとの接続)・Resource(作成するリソース)・State(現在の状態の記録)・Module(再利用可能なコードの塊)が4つの主要概念
- まず「resourceブロックの使い方」から読み進めることを推奨する
動作確認バージョン: Terraform >= 1.9 公式ドキュメント: https://developer.hashicorp.com/terraform/intro