Tool Comparison Matrix (Terraform)¶
Terraform / IaC に特化したツール選定の判断材料。
History¶
| 日付 | 内容 |
|---|---|
| 2026-05-21 | History セクション追加 |
| 2026-05-11 | 初版作成。Lint / IaC 比較 / Plan Comment / Documentation / Testing を比較 |
Lint / Security: checkov vs tflint vs tfsec¶
| 比較項目 | checkov | tflint | tfsec (非推奨 →Trivy 統合) |
|---|---|---|---|
| 提供元 | Bridgecrew (Palo Alto) | terraform-linters | Aqua Security |
| リポジトリ | bridgecrewio/checkov | terraform-linters/tflint | aquasecurity/tfsec |
| ライセンス | Apache 2.0 | MPL-2.0 | MIT |
| 主な用途 | セキュリティ・コンプライアンス | Lint (構文・命名・非推奨検出) | セキュリティスキャン |
| カスタムルール | ✅ Python/YAML | ✅ プラグイン | ✅ Rego/YAML |
| プロバイダー対応 | マルチクラウド | AWS/Azure/GCP プラグイン | マルチクラウド |
| 自動修正 | ❌ | ✅ --fix |
❌ |
| 現在の状態 | アクティブ | アクティブ | Trivy に統合済み |
Guidelines¶
→ tflint + Trivy を併用する。 tflint で構文・スタイル・非推奨リソースを検出し、Trivy でセキュリティスキャンをカバーする。tfsec は Trivy に統合済みのため新規採用は不要。
- コンプライアンスポリシーを Python/YAML で独自定義したい場合は checkov を検討
IaC: OpenTofu vs Pulumi vs Terraform¶
| 比較項目 | OpenTofu | Pulumi | Terraform |
|---|---|---|---|
| 提供元 | Linux Foundation | Pulumi Corp | HashiCorp |
| リポジトリ | opentofu/opentofu | pulumi/pulumi | hashicorp/terraform |
| ライセンス | MPL 2.0 | Apache 2.0 | BSL 1.1 (v1.6+) |
| 設定言語 | HCL (互換) | TypeScript/Python/Go 等 | HCL |
| State 管理 | S3, 互換バックエンド | Pulumi Cloud, S3 等 | S3, Terraform Cloud 等 |
| Provider エコシステム | Terraform 互換 | 独自 + Terraform Bridge | 最大 (3,000+) |
| モジュール互換性 | ✅ Terraform モジュール利用可 | ❌ | - |
| 移行コスト | 低い (ほぼ互換) | 高い (書き直し) | - |
| CI ツール連携 | Terraform 互換ツール利用可 | 独自 CI 統合 | tfcmt, Atlantis 等豊富 |
Guidelines¶
→ Terraform を採用する。 エコシステムが最も成熟しており、Provider 数・周辺ツール (tfcmt, tflint 等) の充実度で優位。
- OSS ライセンスが必須要件の場合は OpenTofu を採用 (Terraform からの移行は容易)
- プログラミング言語で IaC を書きたい / ユニットテスト・型安全性を重視する場合は Pulumi を検討
Plan Comment: Atlantis vs tfcmt vs tfnotify¶
| 比較項目 | Atlantis | tfcmt | tfnotify |
|---|---|---|---|
| 提供元 | runatlantis | suzuki-shunsuke | mercari |
| リポジトリ | runatlantis/atlantis | suzuki-shunsuke/tfcmt | mercari/tfnotify |
| ライセンス | Apache 2.0 | MIT | MIT |
| 位置づけ | plan + apply の自動化サーバー | plan 結果の PR コメント | plan 結果の PR コメント |
| 設定の簡易さ | ⚠️ サーバー運用が必要 | ✅ CLI 一つで完結 | ✅ CLI 一つで完結 |
| コメント品質 | 高い | 高い (差分ハイライト、折りたたみ) | 中程度 |
| apply 実行 | ✅ (PR コメントから apply) | ❌ (plan コメントのみ) | ❌ |
| メンテナンス状況 | アクティブ | アクティブ | メンテナンスモード |
| 運用コスト | サーバー運用コスト | なし (CI ジョブ内実行) | なし |
Guidelines¶
→ tfcmt を採用する。 CI ワークフロー内で軽量に plan 結果を PR コメントでき、サーバー運用不要。tfnotify の後継的位置づけでアクティブにメンテナンスされている。
- PR コメントから apply まで自動化したい / 複数環境の plan/apply をチームで統制したい場合は Atlantis を検討
Documentation: terraform-docs¶
| 比較項目 | terraform-docs |
|---|---|
| 提供元 | terraform-docs |
| リポジトリ | terraform-docs/terraform-docs |
| ライセンス | MIT |
| 用途 | Terraform モジュールの入出力ドキュメント自動生成 |
| 出力形式 | Markdown / JSON / YAML / AsciiDoc 等 |
| pre-commit 対応 | ✅ |
| README 自動更新 | ✅ (マーカーコメント間を自動置換) |
Guidelines¶
→ terraform-docs を採用する。 Terraform モジュールの variables / outputs / providers を自動でドキュメント化する唯一のデファクトツール。pre-commit と組み合わせて README を常に最新に保てる。
Testing: terraform test vs Terratest vs tftest¶
| 比較項目 | terraform test | Terratest | tftest (pytest) |
|---|---|---|---|
| 提供元 | HashiCorp | Gruntwork | HashiCorp |
| リポジトリ | hashicorp/terraform | gruntwork-io/terratest | hashicorp/terraform-plugin-testing |
| ライセンス | BSL 1.1 | Apache 2.0 | MPL-2.0 |
| テスト言語 | HCL (.tftest.hcl) |
Go | Python (pytest) |
| 実リソース作成 | ✅ (plan のみも可) | ✅ | ✅ |
| plan のみテスト | ✅ (command = plan) |
⚠️ 自前実装 | ✅ |
| モック | ✅ (mock_provider) |
❌ | ⚠️ 限定的 |
| 追加依存 | なし (terraform 組み込み) | Go 環境必要 | Python 環境必要 |
| 学習コスト | 低い (HCL で記述) | 高い (Go テストコード) | 中程度 |
| 柔軟性 | 中程度 | 非常に高い (任意の Go コード) | 中程度 |
| マルチクラウド検証 | ✅ | ✅ (HTTP, SSH, K8s 等も可) | ✅ |
Guidelines¶
→ terraform test を採用する。 Terraform 組み込みで追加依存なし、HCL で記述でき学習コストが低い。plan のみのテストやモックにも対応しており、モジュールの単体テストに最適。
- 実リソースに対する複雑な統合テスト (HTTP リクエスト、SSH 接続、K8s 操作等) が必要な場合は Terratest を検討
- Python エコシステムで pytest ベースのテストを書きたい場合は tftest を検討