Loading…

概要 オンラインHCL/Terraformフォーマッター

Terraform、Packer、その他のHashiCorpツールはすべてHCL2を使用しており、一貫したフォーマットでより美しく表示されます。このHCLフォーマッターは、設定を安全なバックエンドに送信し、インデント、スペース、レイアウトにterraform fmtスタイルのルールを適用し、セマンティクスを変更せずに正規化されたHCL2を返します。

主な機能

  • Terraformスタイルのブロック、属性、リスト/マップ、ヒアドキュメントに対応したHCL2対応フォーマット
  • =、カンマ、括弧、ネストされたブロック周りの一貫したインデントとスペース
  • 可読性のためにコメントと意図的な空行を可能な限り保持
  • .tf、.hcl、HCLベースの.tfvars、Packer .pkr.hclファイルに対応
  • 冪等出力:フォーマッターを再度実行しても同じ結果が得られます
  • 最小限の操作領域:単一の「フォーマット」アクションのみ、スタイル設定の議論は不要
  • エディターからフォーマット結果をワンクリックでコピーまたはダウンロード
  • 安全なエンドポイントを介したサーバーバックエンド処理 — クイックフィックスに最適、高機密コードにはローカルCLIを推奨

🔧 HCLフォーマッターの使用方法 for hcl-formatter

1

1. コードを貼り付けるまたはドロップ

HCL/Terraformファイル(.tf、HCLベースの.tfvars、.hcl、.pkr.hclなど)を開き、エディターに内容を貼り付けるか、ブラウザが対応している場合はファイルをドロップしてください。

2

2. 「フォーマット」をクリック

フォーマットボタンをクリックします。設定は安全なバックエンドに送信され、terraform fmtスタイルのルールがインデント、スペース、レイアウトに適用され、フォーマットされたHCL2が返されます。

3

3. 確認、コピーまたはダウンロード

エディターで結果を確認し、IDEにコピーするか、フォーマットされたファイルをダウンロードしてリポジトリにコミットしてください。

技術仕様

実行モデル

フォーマッターはサーバーバックエンドで動作し、HCL2に対するterraform fmtスタイルのレイアウト正規化を模倣するように設計されています。

項目詳細
モードサーバーバックエンド(ブラウザ内WASMなし)
範囲空白、インデント、スペース、基本的なレイアウト
並べ替えリソースやブロックの意味的な並べ替えは行わない
オプションなし — 予測可能な出力のための単一のフォーマットアクション
制限約1〜2MBの入力、〜25秒のサーバータイムアウト(調整の対象)
保持一時的な処理 — 入力はフォーマット後に破棄されます
オンラインツール全般と同様に、本番環境のシークレットを貼り付けることは避けてください。機密性の高いコードには、ローカルでterraform fmtまたはpacker fmtを使用してください。

言語対応範囲

Terraformおよび他のHashiCorpツールで使用される一般的なHCL2構文を理解します。

構文備考
ブロックresource, variable, output, module, locals, job, taskネストされたブロック構造は保持されます
属性name = "web", count = 2=の周囲および属性間のスペースが正規化されます
コレクション[1, 2, 3], { key = value }リストとマップ/オブジェクトの統一されたレイアウト
ヒアドキュメント<<-EOF ... EOFマーカーは保持され、可能な場合はインデントが正規化されます
コメント# および // スタイルのコメント意図とドキュメントを保持するため可能な限り維持されます

ミニ ビフォー/アフター

Terraformリソースにおけるインデントとスペースのクリーンアップの小さな例です。

# ビフォー
resource "aws_s3_bucket" "b"{bucket="demo"
  tags={Name="demo"}}

# アフター
resource "aws_s3_bucket" "b" {
  bucket = "demo"

  tags = {
    Name = "demo"
  }
}
レイアウトのみの変換: 識別子、式、参照は変更されません。

エラーとエッジケース

フォーマットが失敗するかエラーを返す場合、通常はHCL2入力の解析問題が原因です。

症状考えられる原因確認事項
出力なし / 解析エラー閉じられていない中括弧、角括弧、丸括弧{ }、[ ]、( ) のペアを数えて一致させ、すべてのブロックを閉じてください
ヒアドキュメントの問題欠落または不一致の終端記号EOFなどのマーカーが正確に独自の行に表示されることを確認してください
混合スタイルタブ/スペースまたは余分な文字インデントを正規化し、余分な制御文字を削除してください
.tfvarsの混乱JSONとHCLの構文*.tfvars.jsonファイルにはJSONフォーマッターまたはterraform fmtを使用してください

コマンドライン代替手段

日常的なInfrastructure as Codeワークフローでは、ローカルおよびCIで公式フォーマッターを使用し、このオンラインツールは迅速なアドホックなクリーンアップに使用してください。

macOS / Linux

Terraform: その場でフォーマット

terraform fmt

現在のディレクトリ内の.tfおよびHCLベースの.tfvarsファイルを書き換えます。

Terraform: 再帰的CIチェック(書き込みなし)

terraform fmt -check -recursive

フォーマットが必要なファイルがある場合に非ゼロで終了します — CIおよびpre-commitフックに最適です。

Packer: テンプレートのフォーマット

packer fmt path/to/template.pkr.hcl

指定されたPacker HCLファイルをその場でフォーマットします。

Windows (PowerShell)

すべてのTerraformファイルを再帰的にフォーマット

Get-ChildItem -Recurse -Filter *.tf | ForEach-Object { terraform fmt $_.FullName }

カレントディレクトリ以下の各.tfファイルに対してterraform fmtを実行します。

CIスタイルのフォーマットチェック

terraform fmt -check -recursive

ビルドパイプラインで使用し、フォーマットが古い場合に失敗させます。

GitHub Actions

フォーマットが必要な場合にビルドを失敗させる

steps:
  - uses: hashicorp/setup-terraform@v3
  - run: terraform fmt -check -recursive

Terraformファイルが適切にフォーマットされていない場合、ワークフローを停止します。

プルリクエストでの自動フォーマット(オプション)

steps:
  - run: terraform fmt -recursive
  - run: git diff --quiet || (git config user.name "bot" && git config user.email "bot@example" && git commit -am "chore: terraform fmt" && git push)

terraform fmtを適用し、フォーマットのみのコミットをブランチにプッシュバックします。

規制対象または機密のインフラストラクチャコードの場合、オンラインフォーマッタにファイルを送信する代わりに、ローカルCLIツールを優先し、CIで`terraform fmt -check -recursive`を強制してください。

実用的なアプリケーション

PRの健全性とレビュー

レビュアーが実際のインフラストラクチャの変更に集中できるよう、空白とインデントを標準化します。

  • プルリクエストを開く前にフォーマットを実行
  • Terraformレビューでの細かいスタイルコメントを削減
  • git差分を小さく意味のあるものに保つ

Terraformモジュール開発

チーム、リポジトリ、レジストリ間でモジュールの一貫性を保ちます。

  • 共有モジュール内の変数と出力ブロックを整列
  • サンプル設定が単一の社内スタイルに一致することを保証

CIゲートキーピング

CIでterraform fmtチェックを使用し、時間の経過によるスタイルの逸脱を防止します。

  • 必須パイプラインステップとして`terraform fmt -check -recursive`を追加
  • すべての.tfファイルがフォーマットされるまでマージをブロック

オンボーディングとドキュメント

読みやすい例は、新しいチームメンバーがTerraformと社内スタイルの両方を素早く学ぶのに役立ちます。

  • READMEに一貫してフォーマットされたスニペットを公開
  • 内部Terraformトレーニングセッションでクリーンな例を使用

❓ Frequently Asked Questions

🔒私のコードはローカルで処理されますか?

いいえ。このHCLフォーマッタはサーバーバックエンドです:入力はフォーマットのために安全なエンドポイントに送信され、結果のHCLがブラウザに返されます。高度に機密性の高いまたは規制対象のインフラストラクチャコードの場合、ローカルで`terraform fmt`(または`packer fmt`)を実行することを優先してください。

🛡️ここにシークレットを貼り付けても大丈夫ですか?

本番環境のシークレットをオンラインツールに貼り付けることは強くお勧めしません。このサービスは安全で一時的な処理を目的としていますが、長期間保持される機密性の高い認証情報は、ローカルファイル、シークレットストア、またはCIボールトでのみ管理し、ブラウザツールでは使用しないでください。

🧩フォーマットを変更すると設定の動作は変わりますか?

いいえ。フォーマッタはレイアウト(空白、インデント、間隔)に焦点を当てています。元のHCLが有効である限り、リソースブロック、引数、式、参照は同じままです。

📄.tfvarsファイルをフォーマットできますか?

はい、.tfvarsファイルがHCL構文を使用している限り可能です。Terraformは`.tfvars.json`を通じてJSONベースの変数もサポートしていますが、これらはJSONルールに従い、JSONフォーマッタまたは`terraform fmt`自体で処理する方が適しています。

⚙️これは`terraform fmt`とどう違いますか?

`terraform fmt`はTerraformに同梱されている標準フォーマッタで、ローカル開発やCIに最適です。このWebツールは、CLIが手元にない場合や、ブラウザで小さなスニペットを整理したい場合の迅速なアドホックなクリーンアップを目的としています。

🧯フォーマットが失敗したのはなぜですか?

ほとんどの失敗は解析エラーです:閉じられていない中括弧や角括弧、不正なヒアドキュメント、JSONスタイルのtfvarsとHCL構文の混在など。構造的な問題を修正する(または正しい方言/フォーマッタを使用する)と再試行できます。

Pro Tips

CI Tip

CIで`terraform fmt -check -recursive`を適用し、大規模なインフラストラクチャリポジトリ全体でのフォーマットのずれを防ぎましょう。

Security Tip

シークレットや状態関連データをオンラインツールに貼り付けることは避け、設定例は無害化し、実際のインフラストラクチャコードにはローカルのCLIフォーマッタを使用してください。

Best Practice

エディタで末尾の改行とインデントを正規化し、Terraformファイルがプラットフォーム間でクリーンで安定した差分を生成するようにしましょう。

Best Practice

`terraform fmt`を実行するプリコミットフックを追加し、プルリクエストが既にフォーマットされた状態で届き、レビューの議論をアーキテクチャとリスクに集中させられるようにしましょう。

Additional Resources

Other Tools