Terraformとは?手動構築からIaCへの第一歩

2026/04/15

Terraform
IaC
GCP

クラウド環境の手動構築経験があるインフラエンジニアに向けて、Terraformの概要とメリットをまとめました。


1. Terraformとは?

Terraformは、HashiCorp社が提供するオープンソースのIaC(Infrastructure as Code)ツールです。
これまでGCPのGoogle Cloud Consoleなどで手動で行っていたサーバー構築やネットワーク設定を、コード(HCLという専用言語)で定義し、自動的に構築・管理できるようにしてくれます。

2. 手動構築の課題とTerraformのメリット

これまでの手動構築とTerraformを用いた構築の違いを見てみましょう。

手動構築でよくある課題

  • 手順書が古くなる:構築後に設定を変更した際、Excel等の手順書を更新し忘れて現状の構成と合わなくなる。
  • ヒューマンエラー:手作業のため、設定漏れやタイプミスなどのミスが起こりやすい。
  • 環境の複製が大変:本番環境と全く同じ構成の検証環境をもう1つ作るのに、多大な手間と時間がかかる。

Terraformを導入するメリット

メリット 説明
インフラのコード化(IaC) 設定内容がすべてコードに残るため、常に最新の手順書・設計書として機能する
再現性の向上 コードを実行するだけで、何度でも全く同じ環境を構築できる(検証環境の構築が容易)
バージョン管理が可能 Gitなどのバージョン管理システムと組み合わせることで、「いつ・誰が・何を」変更したか履歴を追える
レビューの導入 変更を加える前に、チームメンバーにコードのレビュー(Pull Requestなど)をしてもらえる

3. Terraformの基本的な仕組み

Terraformでは、主に以下のファイルや状態を意識して管理します。

  • tfファイル (.tf):インフラの構成を記述するコードファイル。
  • Stateファイル (.tfstate):Terraformが認識している「現在の実際のインフラ構成状態」を記録したファイル。

実行の流れはシンプルです。

  1. terraform init:初期化(必要なプラグインなどのダウンロード)
  2. terraform plan:実行計画の確認(コードの変更によって実際にどこが変わるか事前にチェックできる)
  3. terraform apply:実際のインフラへの適用(リソースの作成・変更・削除)

特に terraform plan で「実行前に差分(何が作成され、何が削除されるか)を確認できる」のは、手動操作にはない安心感があります。

4. どのようなコードを書くのか?

GCP(Google Cloud)でネットワークと仮想サーバー(Compute Engine)を作成するコードの例です。

プロバイダーの設定

まず、どのクラウドを利用するか(今回はGCP)と、対象のプロジェクトやリージョンを指定します。

provider.tf
provider "google" {
  project = "my-gcp-project-id"
  region  = "asia-northeast1"
  zone    = "asia-northeast1-a"
}

VPCネットワークとサブネットの作成

次に、独自のVPCネットワークと、その中に配置するサブネットを定義します。

network.tf
# VPCネットワークの作成
resource "google_compute_network" "vpc_network" {
  name                    = "my-custom-network"
  auto_create_subnetworks = false
}

# サブネットの作成
resource "google_compute_subnetwork" "subnet" {
  name          = "my-subnet"
  ip_cidr_range = "10.0.1.0/24"
  region        = "asia-northeast1"
  network       = google_compute_network.vpc_network.id
}

Compute Engine(VMインスタンス)の作成

最後に、作成したネットワーク上に仮想サーバーを立ち上げます。

compute.tf
resource "google_compute_instance" "default" {
  name         = "my-web-server"
  machine_type = "e2-micro"

  boot_disk {
    initialize_params {
      image = "debian-cloud/debian-11"
    }
  }

  network_interface {
    network    = google_compute_network.vpc_network.id
    subnetwork = google_compute_subnetwork.subnet.id
    
    # 外部IP(パブリックIP)を割り当てる設定
    access_config {
    }
  }
}

たったこれだけの記述で、指定したプロジェクトにネットワークとサーバーが作成されます。Google Cloud Consoleの画面上で何度もクリックして設定するよりも、非常にシンプルで全体の構成がひと目で分かります。


今回はここまでです。