この用語をシェア
概要・定義
Terraformは、HashiCorp社が開発したオープンソースのIaC(Infrastructure as Code)ツールです。2014年に初版がリリースされ、インフラストラクチャをコードで定義・管理することで、クラウドリソースの作成、更新、削除を自動化します。
TerraformはHCL(HashiCorp Configuration Language)という宣言的な設定言語を使用し、複数のクラウドプロバイダーやサービスに対応しています。AWS、Azure、Google Cloud Platform、Kubernetes、GitHub、DataDogなど、3000以上のプロバイダーに対応しており、マルチクラウド環境での一貫した管理を実現します。
主要な特徴・利点
1. 宣言的設定
インフラストラクチャの理想的な状態を定義し、Terraformが現在の状態と理想状態の差分を自動的に検出・適用します。
2. マルチクラウド対応
同一の設定言語と操作方法で、複数のクラウドプロバイダーやサービスを管理できます。
3. プラン・実行の分離
変更前に実行計画を確認できるため、予期しない変更を防ぐことができます。
4. 状態管理
terraformステートファイルで管理対象リソースの状態を追跡し、チーム開発での一貫性を保ちます。
5. 依存関係の自動解決
リソース間の依存関係を自動的に解析し、適切な順序で作成・削除を行います。
主要コンポーネント
1. 設定ファイル(.tf)
HCLで記述されたインフラストラクチャの定義ファイルです。
2. State(状態ファイル)
管理対象リソースの現在の状態を記録するファイルです。
3. Provider
各クラウドサービスやAPIと通信するためのプラグインです。
4. Module
再利用可能なTerraform設定のまとまりです。
5. Backend
状態ファイルの保存場所と実行環境を管理します。
使用例・実装方法
基本的なEC2インスタンスの作成
# main.tf
terraform {
required_providers {
aws = {
source = "hashicorp/aws"
version = "~> 5.0"
}
}
}
provider "aws" {
region = "us-east-1"
}
resource "aws_instance" "web_server" {
ami = "ami-0c55b159cbfafe1d0"
instance_type = "t3.micro"
tags = {
Name = "WebServer"
Environment = "production"
}
}
output "instance_ip" {
value = aws_instance.web_server.public_ip
}
デメリット・注意点
1. HCLの学習コスト
宣言的な専用言語HCLを新たに習得する必要があり、プログラミング言語(TypeScript/Python等)でインフラを記述したいチームには学習ハードルとなる場合があります。
2. stateファイルの管理負荷
state(状態ファイル)が実際のインフラと乖離(ドリフト)すると、意図しないリソースの変更・削除が発生するリスクがあります。リモートバックエンドでの一元管理とステートロックの徹底が不可欠です。
3. ライセンス変更に伴う不確実性
2023年のBSLライセンスへの変更により、将来的な商用利用条件の変化やOpenTofuとのエコシステム分断を懸念する声もあります。長期利用を前提とする場合は、ライセンス動向を継続的に確認することが推奨されます。
類似ツールとの比較
| 項目 | Terraform | AWS CloudFormation | Pulumi | Ansible |
|---|---|---|---|---|
| 記述言語 | HCL(専用DSL) | YAML/JSON | TypeScript/Python/Go等 | YAML |
| 対応クラウド | マルチクラウド(3000以上のプロバイダー) | AWS専用 | マルチクラウド | マルチクラウド(構成管理寄り) |
| 用途の主眼 | インフラのプロビジョニング | AWSリソースのプロビジョニング | インフラのプロビジョニング | サーバーの設定管理・構成変更 |
| 状態管理 | stateファイルで管理 | AWS側で管理(スタック) | stateファイルで管理 | 状態ファイルなし(都度実行) |
実務では、クラウドリソースの構築はTerraform、構築後のサーバー内部設定(ミドルウェアのインストール等)はAnsibleというように、役割分担して併用するケースも多く見られます。
実務での活用シーン・導入時の注意点
代表的な活用シーン
- マルチ環境の構成統一: 開発・ステージング・本番環境を同一のTerraformコードから変数のみ変えて構築し、環境差異を防止
- マルチクラウド・ハイブリッド構成: AWSとGCPなど複数プロバイダーのリソースを単一のワークフローで管理
- CI/CDパイプラインとの統合: プルリクエスト時にterraform planを自動実行し、変更内容をレビューしてからマージ・適用
- 災害復旧(DR)環境の再構築: コード化された定義から迅速にインフラを再現
導入時に気をつけたいポイント
- 最初は小規模なリソースから着手し、モジュール化のルールをチームで統一してから対象範囲を広げる
- terraform destroyの誤実行を防ぐため、本番環境ではlifecycleブロックのprevent_destroy等を活用する
- 既存の手動構築インフラをTerraform管理下に置く場合は、terraform importで段階的に移行する
最新動向(2025-2026年)
TerraformはHashiCorpが2023年にBSL(Business Source License)に変更したことで大きな転換点を迎え、コミュニティからOpenTofuというフォークが生まれました。
- OpenTofu(Terraform OSS代替) - HashiCorpのライセンス変更に対応して誕生したOSSフォーク。Linux Foundation傘下で開発が活発で、2025年にはOpenTofu 1.9が利用可能。多くのCIプロバイダーがOpenTofuのサポートを追加
- Terraform 1.9/1.10 - テストフレームワークの改善、ephemeralリソース(一時的なシークレット管理)、stateファイルの暗号化機能が追加
- HCP Terraform(旧Terraform Cloud) - HashiCorp Cloud Platformとの統合が強化。ドリフト検出、プランのコスト予測(Infracost統合)、ポリシー管理(OPA/Sentinel)が充実
- AI支援IaC - GitHub Copilot、Cursor等のAIコーディングツールがTerraform/OpenTofuコードの生成・レビューに対応し、インフラコードの記述が効率化
- Pulumi・AWS CDKとの競争 - プログラム言語(TypeScript/Python/Go)でインフラを記述するPulumiやAWS CDKがシェアを拡大。HCL vs プログラミング言語の議論が続く
よくある質問(FAQ)
Q. TerraformとOpenTofuどちらを使うべきですか?
新規プロジェクトなら現状どちらでも使えます。TerraformはHashiCorpの商用サポートとHCP Terraformとの統合が魅力です。OpenTofuはApache 2.0ライセンスで完全OSSであり、コミュニティ主導の開発が進んでいます。企業での商用利用を検討している場合は、ライセンス要件を確認した上でどちらかを選択してください。既存のTerraformコードはほぼそのままOpenTofuでも動作します。
Q. Terraformのstateファイルをチームで共有するには?
チーム開発では、stateファイルをローカルではなくリモートバックエンドに保存することが必須です。一般的な方法は、AWSならS3+DynamoDB(ステートロック用)をバックエンドとして設定することです。HashiCorp Cloud Platform(HCP Terraform)のRemote Stateを使う方法も便利です。ローカルにstateファイルを保持すると、チームの誰かが更新した際に他のメンバーのstateが古くなり、コンフリクトやリソース重複の原因になります。
Q. TerraformとAnsibleの違いは何ですか?
Terraformはインフラのプロビジョニング(VMやネットワーク、クラウドリソースの作成・管理)に特化した宣言型ツールです。Ansibleはサーバーの設定管理(ソフトウェアのインストール、設定ファイルの管理等)に強みを持つ手続き型ツールです。クラウドインフラはTerraformで構築し、その上で動くサーバーの設定管理にAnsibleを使うという組み合わせも一般的です。
