0Pricing
Terraform Infrastructure as Code · レッスン

Terraform の `validate` と `fmt`

構成の構文チェックに使う `validate` や、一貫したコード整形を行う `fmt` など、Terraform の組み込みコマンドを活用します。

「Terraform の `validate` と `fmt`」はCoddyKit上の無料Terraform Infrastructure as Codeレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはTerraform Infrastructure as Code学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Terraform Infrastructure as Codeコースには全4レッスンが含まれています。

IaC のコード品質

良いコードとは、機能するだけでなく、読みやすく正しいコードです。Infrastructure as Code(IaC)では、エラーが高額なインフラストラクチャの問題につながる可能性があるため、これはさらに重要です。

Terraform には、validate と fmt という組み込みのツールがあります。これらにより、設定の構文が正しく、一貫した形式になっていることを確認できます。

早期にエラーを発見する

terraform validate コマンドは、設定ファイルの構文エラーと内部的な整合性を確認します。適用を試みる前に、コードの構造が正しいことを確認できます。

これには、変数の型、リソースの引数、プロバイダー設定の検証が含まれます。クラウドプロバイダーに接続せずに、すばやくミスを発見できる方法です。

有効な設定

単純で有効な Terraform 設定を見てみましょう。このコードでは AWS S3 バケットを宣言しています。

これに対して terraform validate を実行すると成功し、構文や基本的な設定に問題がないことが示されます。

resource "aws_s3_bucket" "my_bucket" {
  bucket = "my-unique-coddykit-bucket-123"
  acl    = "private"

  tags = {
    Environment = "Dev"
    Project     = "CoddyKit"
  }
}

タイプミスを見つける

もし間違いがあったらどうなるでしょうか。ここでは、acl 引数を accl と誤って記述しています。

terraform validate はこのエラーをすぐに検出し、accl が S3 バケットリソースで認識される引数ではないことを知らせます。

resource "aws_s3_bucket" "my_bucket" {
  bucket = "my-unique-coddykit-bucket-456"
  accl   = "private" # Intentional typo!

  tags = {
    Environment = "Dev"
  }
}

`validate` の使い方

設定を検証するには、ターミナルで .tf ファイルが入っているディレクトリに移動します。その後、次のコマンドを実行するだけです。

terraform validate

このコマンドは現在の作業ディレクトリを対象にチェックを行います。検証に成功した場合は、成功メッセージとともに何も表示せず終了します。失敗した場合は、分かりやすいエラーメッセージが表示されます。

一貫性が重要

チームのメンバー全員が異なる形式でコードを整形している環境で作業したことはありますか?コードが読みにくく、保守しにくくなります。terraform fmt(format)がこの問題を解決します。

Terraform の設定ファイルを標準的な形式とスタイルに自動的に書き換えます。これにより、コードベース全体とチーム内で一貫性を保てます。

整形されていないコード

この設定を見てみましょう。インデントに一貫性がなく、スペースも適切ではありません。有効な設定ですが、すばやく内容を確認するのは困難です。

このような形式の乱れは、複数の人が同じファイルで作業すると簡単に発生します。

resource "aws_s3_bucket" "another_bucket" {
    bucket = "coddykit-unformatted-bucket"
        acl = "private"
      tags = {
          Project = "CoddyKit"
        Env = "Test"
      }
}

きれいに整形されたコード

では、先ほどのコードに対して terraform fmt を実行したとします。スペースとインデントが自動的に調整され、Terraform の標準スタイルにそろいます。

これにより、コードが大幅にすっきりし、読みやすくなります。小さな変更ですが、共同作業に大きな効果があります。

resource "aws_s3_bucket" "another_bucket" {
  bucket = "coddykit-unformatted-bucket"
  acl    = "private"
  tags = {
    Project = "CoddyKit"
    Env     = "Test"
  }
}

チームでの fmt の利用

ファイルを整形するには、設定ディレクトリで terraform fmt を実行します。ファイルがその場で変更されます。

CI/CD パイプラインでは、terraform fmt -check=true を使って、ファイルを変更せずに正しく整形されているか確認できます。また、-diff を使うと変更案を確認できます。

知識を確認する

terraform validate と terraform fmt について、次の記述のうち正しいものはどれですか?

コードを検証して整形しましょう

このレッスンでは、Terraform の重要な 2 つのコマンドについて学びました。

  • terraform validate:設定の構文と内部的な整合性が正しいことを確認し、エラーを早期に発見します。
  • terraform fmt:コードを一貫したスタイルに自動整形し、読みやすさと共同作業のしやすさを向上させます。

これらのツールを定期的に使うことで、高品質でエラーがなく、読みやすい Infrastructure as Code を維持できます。次は、より高度なテスト戦略について学びます。

よくある質問

「Terraform の `validate` と `fmt`」レッスンは無料ですか?

はい。「Terraform の `validate` と `fmt`」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Terraform Infrastructure as Codeコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Terraform Infrastructure as Codeコースには全4レッスンが含まれています。

「Terraform の `validate` と `fmt`」で何を学びますか?

構成の構文チェックに使う `validate` や、一貫したコード整形を行う `fmt` など、Terraform の組み込みコマンドを活用します。 ブラウザで直接実行するハンズオンコードでTerraform Infrastructure as Codeを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Terraform Infrastructure as Codeを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのTerraform Infrastructure as Codeは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。

「Terraform の `validate` と `fmt`」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このTerraform Infrastructure as Codeレッスンでコードを書いて実行できますか?

はい。すべてのTerraform Infrastructure as Codeレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. Terraform の `validate` と `fmt`
  2. Terratest によるユニットテスト
  3. クラウドリソースの統合テスト
  4. Policy as Codeとコンプライアンスチェック
← Terraform Infrastructure as Codeに戻る