Terraform てらふぉーむ
簡単に言うとこんな感じ!
クラウド上のサーバーやネットワークを「設計図(コード)」で管理できるツールだよ!「サーバー3台・DBはこのスペックで」って書いておくだけで、自動でまとめてドカッと作ってくれるんだ。手作業ゼロで環境構築できちゃうってこと!
Terraformとは
Terraform(テラフォーム) は、HashiCorp社が開発したオープンソースの Infrastructure as Code(IaC) ツールです。クラウドやオンプレミス環境のインフラ構成を、HCL(HashiCorp Configuration Language) というコード形式で定義し、自動的に構築・変更・削除できます。
AWSのEC2インスタンスを何台立てるか、どのVPCに入れるか、DBの設定はどうするか——そういった「インフラの設計図」をすべてテキストファイルで管理できるため、Gitなどのバージョン管理システムと組み合わせることで変更履歴を追跡したり、チームでレビューしたりすることが可能です。手動でコンソールをポチポチ操作する必要がなくなります。
特徴的なのは マルチクラウド対応 で、AWS・Azure・Google Cloudをはじめ、1000以上のサービス(プロバイダー)に対応しています。1つのツールを覚えるだけで複数のクラウドを同じ方法で操作できるため、ベンダー依存を避けたい企業に特に支持されています。
Terraformの仕組みと構造
Terraformは大きく3つのステップで動きます。
| ステップ | コマンド | 内容 |
|---|---|---|
| ① 初期化 | terraform init | プロバイダー(AWS等)のプラグインをダウンロード |
| ② 計画 | terraform plan | 現状と設計図を比較し、何が変わるか確認 |
| ③ 適用 | terraform apply | 実際にインフラを構築・変更する |
| (破棄) | terraform destroy | 作ったインフラをまとめて削除する |
HCLコードの例
# AWSにEC2インスタンスを1台作る例
resource "aws_instance" "web" {
ami = "ami-0abcdef1234567890"
instance_type = "t3.micro"
tags = {
Name = "MyWebServer"
}
}
これだけ書いて terraform apply を実行すれば、AWSにサーバーが1台できあがります。
状態ファイル(tfstate)とは
Terraformは「今の現実のインフラ」を tfstate(ステートファイル) と呼ばれるJSONファイルに記録しています。次回 plan するとき、このファイルと設計図を比べて「差分だけ」変更するため、無駄な再作成が起きません。チームで使う場合は S3やTerraform Cloudなどにステートを共有することが必須です。
覚え方:「計画してから動く」
plan → apply の2ステップを守るのがTerraformの鉄則!
「設計図を見せてから、OKをもらって実行する」という順序を忘れずに。
歴史と背景
- 2014年 — HashiCorpがTerraformをオープンソースとして公開。当時はAWSなど一部クラウドのみ対応
- 2017年頃 — AWSやGCPの普及とともにIaCへの関心が急上昇。Terraformが事実上の標準ツールとして広まる
- 2019年 — Terraform Cloud をリリース。チーム向けのステート管理・ワークフロー機能を提供
- 2020年 — プロバイダー数が1000超に。オンプレ・SaaS・DNSなど多様なサービスを管理可能に
- 2023年 — HashiCorpがライセンスをMPL 2.0から BSL(Business Source License) へ変更。商用利用に条件が付いたことでコミュニティが反発し、フォーク版 OpenTofu が誕生
- 2024年 — OpenTofuがLinux Foundationのプロジェクトとして正式リリース。Terraformと並立する存在に
類似ツールとの比較
Terraformと同じIaCカテゴリのツールはいくつかあります。
| ツール | 開発元 | 言語 | 特徴 |
|---|---|---|---|
| Terraform | HashiCorp | HCL | マルチクラウド対応・宣言型 |
| AWS CloudFormation | AWS | YAML/JSON | AWSのみ・無料・ネイティブ連携 |
| Pulumi | Pulumi Corp | Python/TS/Go等 | 汎用プログラミング言語で書ける |
| Ansible | Red Hat | YAML | 構成管理寄り・手続き型 |
| CDK | AWS | TypeScript/Python等 | CloudFormationを生成するラッパー |
「宣言型」vs「手続き型」
Terraformは 宣言型(Declarative) アプローチをとります。「どうやって作るか」ではなく「どんな状態にしたいか」を書くスタイルです。
手続き型(Ansible的): 「サーバーを起動して → パッケージを入れて → 設定ファイルを書いて...」
宣言型(Terraform的): 「サーバーが起動していてパッケージが入っている状態にして」
「最終的にこうなっていればいい」と書くだけで、Terraformが現状との差分を計算して必要な操作をしてくれます。
関連する規格・RFC
※ Terraformは特定のIETF RFC・ISOに直接対応する標準規格ではなく、HashiCorpが仕様を公開するプロプライエタリな言語(HCL)とツールです。関連する公開仕様は以下を参照してください。
| 仕様・ドキュメント | 内容 |
|---|---|
| HashiCorp HCL仕様 | HCLの文法・パーサー仕様(GitHub公開) |
| Terraform Provider Protocol | プロバイダー開発のプロトコル仕様 |
| OpenTofu仕様 | Terraformフォーク版の公開仕様 |
関連用語
- Infrastructure as Code — インフラ構成をコードで管理する考え方・手法全般
- AWS CloudFormation — AWSネイティブのIaCサービス。Terraformの競合ポジション
- Ansible — 構成管理寄りのIaCツール。手続き型アプローチが特徴
- Docker — コンテナ仮想化ツール。Terraformと組み合わせてインフラ+アプリを管理することが多い
- CI/CDパイプライン — Terraformの実行をGitHub Actionsなどで自動化する仕組み
- クラウドコンピューティング — TerraformがターゲットとするAWS・Azure・GCPなどの基盤
- Git — tfファイルのバージョン管理に不可欠なツール
- DevOps — Terraformが普及した文化的背景。開発と運用の連携を目指す考え方