Terraformの「負債」をコードで殴り倒せ:TFLintで実現する、妥協なきインフラ品質管理の極意
諸君、Terraformを書いているか?
「とりあえず `terraform plan` を通して、動けば正義」という時代は終わった。大規模なインフラを扱う我々にとって、IaCの品質は単なる「コードの綺麗さ」の話ではない。それは「インシデントへの耐性」と「開発速度の最大化」に直結する死活問題だ。
`terraform validate` だけでは、構文チェックしかできない。我々が求めるのは、クラウドプロバイダーのベストプラクティスを逸脱したコードや、実行時エラーを招く設計を、CI/CDのパイプラインに到達する前に叩き潰す仕組みだ。
今回は、TFLintをただの「静的解析ツール」ではなく、最強の「インフラ品質ガードレール」へと昇華させるための実践的なテクニックを伝授する。
—
1. TFLintは「導入」で満足するな:プラグインエコシステムの活用
TFLintの真価はプラグインにある。特にAWS、Azure、GCPといった各クラウドのサービス定義を深く理解するプラグインは必須だ。
神プラグインの導入
`.tflint.hcl` をプロジェクトルートに置き、以下の構成で標準化せよ。
.tflint.hcl
plugin “aws” {
enabled = true
version = “0.30.0”
source = “github.com/terraform-linters/tflint-ruleset-aws”
}
必須:リソースの型チェックだけでなく、属性の整合性まで追う
plugin “terraform” {
enabled = true
preset = “recommended”
}
プロの視点:
`plugin “terraform”` の `preset = “recommended”` を有効にすることで、Terraform本体の非推奨構文や潜在的なバグを自動検知できる。これを入れずに「TFLintを使っている」と言うのは、素手で荒野を歩くようなものだ。
—
2. チーム開発で「品質の格差」を消す:設定ファイルの共有と強制
個人のエディタ設定に依存する開発は、チームの崩壊を招く。CI/CDとローカル開発環境で全く同じチェックが走るように、設定ファイルをリポジトリのルートにコミットせよ。
実用的な .tflint.hcl のベストプラクティス
警告(Warning)を放置するチームに未来はない。厳格なルールを定義する。
config {
# 警告が出たらCIを落とすのが鉄則
call_module_type = “all”
force = false
disabled_by_default = false
}
特定の警告を無視する場合も、理由をコメントで必ず記述する
例:社内基準で命名規則が異なる場合のみ有効化
rule “aws_instance_invalid_type” {
enabled = true
}
破壊的変更を防ぐ神ルール
rule “terraform_deprecated_index” {
enabled = true
}
—
3. 開発スピードを極限まで高める「隠れた小技」
エンジニアの生産性は「思考の停止時間」で決まる。TFLintの結果を確認するためにブラウザやターミナルを行き来するのは時間の無駄だ。
VSCode + TFLint の連携
VSCodeを使っているなら、`vscode-tflint` プラグインを入れ、以下の設定を `.vscode/settings.json` に記述せよ。
{
“tflint.validateOnChange”: true,
“tflint.executablePath”: “/usr/local/bin/tflint”, // パスは環境に合わせて固定
“editor.codeActionsOnSave”: {
“source.fixAll.tflint”: “explicit” // 保存時に可能な限り自動修正をかける
}
}
現場で震えるキーボードショートカット:
- `Cmd + Shift + P` -> `TFLint: Initialize Workspace`: これでプロジェクト全体のキャッシュを更新する。謎のエラーが出た時の魔法だ。
—
4. CI/CDパイプライン:ゲートキーパーとしてのTFLint
GitHub Actions等のCI上で実行する際は、単に `tflint` を実行するだけでなく、「品質スコア」を可視化するのがプロの流儀だ。
.github/workflows/lint.yml
jobs:
tflint:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: terraform-linters/setup-tflint@v3
- name: Init TFLint
run: tflint –init
- name: Run TFLint
# –format checkstyle で出力し、GitHub上で指摘箇所を直接表示させる
run: tflint -f checkstyle > report.xml
—
5. 最後に:なぜ我々はここまでやるのか
TFLintを導入し、厳格なルールを運用することは、未来の自分たちへの「技術的負債」という名の利子を払わないための投資だ。
「この設定、動くからいいや」と放置されたコードは、半年後の自分たちを殺しに来る。TFLintは、その殺意を未然に防ぐための最強の盾となる。
諸君、まずは今日のPRから `.tflint.hcl` をマージしてくれ。コードが静かに、しかし力強く語りかけてくるようになるはずだ。「その記述、本当に安全か?」とな。
それができれば、君のチームは「動くものを作る集団」から「止まらないシステムを作る集団」へと進化する。
健闘を祈る。