この記事ではDevOps・自動化に特化して解説します。AI自動化・DevOps全般は AI自動化ツール完全ガイド2026|ノーコードからコードまで徹底比較 をご覧ください。
Infracostとは何か:FinOpsを「シフトレフト」する唯一のOSSツール
InfracostはTerraformプロジェクトのクラウドインフラコストをデプロイ前に見積もるCLIツールで、GitHubで12,271スターを獲得している。AWS・Azure・Google Cloudの1,100以上のリソースタイプに対応し、terraform planの出力からコスト計算を行う。
クラウドコスト管理(FinOps)の現場で最も多い失敗パターンのひとつが、「デプロイしてから高額請求に気づく」ケースだ。開発者がt2.microのつもりでm5.4xlargeを指定していた、データ転送量が予想の100倍になっていた、忘れていたNATゲートウェイが月数万円かかっていた——こういった事例は珍しくない。
Infracostはこの問題を、コードレビューの段階でコスト情報を提示することで解決する。プルリクエストに「このPRをマージすると月額コストが+$200になる」という情報が自動コメントされるため、エンジニアがコスト意識を持ってインフラ設計を行う文化が醸成される。
ソフトウェア開発において「シフトレフト」はテストや品質チェックを開発の早い段階(左側)で行うことを指す。FinOpsのシフトレフトとは、クラウドコストの確認をデプロイ後ではなく、設計・コーディング・コードレビューの段階(左側)で行うことを意味する。Infracostはこのアプローチを実現するツールであり、コスト管理をDevOpsパイプラインに統合する。
Infracostのアーキテクチャと動作原理
Infracostがどのようにしてコストを計算するかを理解しておくと、ツールの制限と可能性を正確に把握できる。
.tf ファイル"] --> B["terraform plan
または planファイル"] B --> C["infracost breakdown
コマンド実行"] C --> D["リソース解析エンジン
(Go言語実装)"] D --> E["クラウドプロバイダーAPI
価格データ取得"] E --> E1["AWS Pricing API"] E --> E2["Azure Retail Prices API"] E --> E3["GCP Cloud Billing API"] E1 --> F["コスト計算エンジン
1,100+リソース対応"] E2 --> F E3 --> F F --> G{"出力形式"} G -->|"CLI"| H["ターミナル表示
テーブル形式"] G -->|"JSON"| I["JSON出力
CI/CD連携用"] G -->|"HTML"| J["HTMLレポート
人間向け可視化"] I --> K["infracost comment
PRコメント投稿"] K --> K1["GitHub PR"] K --> K2["GitLab MR"] K --> K3["Bitbucket PR"] K --> K4["Azure DevOps PR"]
Infracostはterraform planの出力(またはplanファイル)を入力として受け取り、各リソースの設定値(インスタンスタイプ、ストレージサイズ等)を解析する。その後、各クラウドプロバイダーの公開価格APIから最新の料金データを取得してコストを計算する。
対応クラウドプロバイダーとリソース数:
- AWS:750以上のリソースタイプ
- Azure:400以上のリソースタイプ
- Google Cloud:150以上のリソースタイプ
コスト計算の精度について:固定費(インスタンス料金、ストレージ料金等)は正確に計算できるが、使用量ベースのコスト(S3アクセス数、Lambdaの実行回数、データ転送量等)は利用者が想定値を入力する必要がある。
インストールと基本的なコスト確認手順
インストール
# macOS(Homebrew)
brew install infracost
# Linux
curl -fsSL https://raw.githubusercontent.com/infracost/infracost/master/scripts/install.sh | sh
# Windows(Chocolatey)
choco install infracost
# Docker
docker pull infracost/infracost
docker run --rm \
-e INFRACOST_API_KEY=$INFRACOST_API_KEY \
-v $PWD:/code \
infracost/infracost breakdown --path /code
# インストール確認
infracost --version
初回セットアップ
# APIキーの取得と認証(infracost.io に無料登録)
infracost auth login
# または環境変数で設定
export INFRACOST_API_KEY=ico-xxxxxxxxxxxx
基本的なコスト分析コマンド
# Terraformプロジェクトの全体コスト内訳を表示
infracost breakdown --path /path/to/terraform
# 出力例
# Project: my-project
#
# Name Monthly Qty Unit Monthly Cost
# aws_instance.web
# ├─ Instance usage (t3.large) 730 hours $60.74
# ├─ root_block_device
# │ └─ Storage (gp3, 50GB) 50 GB $4.00
# └─ ebs_block_device[0]
# └─ Storage (gp3, 100GB) 100 GB $8.00
#
# aws_rds_cluster.main
# ├─ Aurora MySQL (db.r5.large) 730 hours $175.20
# └─ Storage (100GB) 100 GB $11.00
#
# OVERALL TOTAL $258.94
# 変更によるコスト差分を計算(デプロイ前の差分確認)
infracost diff --path /path/to/terraform
# JSON形式で出力(CI/CD連携用)
infracost breakdown --path /path/to/terraform \
--format json \
--out-file /tmp/infracost.json
# HTML形式で出力(レポート用)
infracost breakdown --path /path/to/terraform \
--format html \
--out-file /tmp/infracost-report.html
使用量ベースのコスト見積もり
S3のストレージ量やLambdaの実行回数など、使用量が不明な場合でも想定値を入力することでコスト計算できる:
# usage.ymlファイルを作成して使用量を指定
cat > /tmp/infracost-usage.yml << EOF
version: 0.1
resource_usage:
aws_lambda_function.my_function:
monthly_requests: 1000000 # 月間リクエスト数
request_duration_ms: 200 # 平均実行時間(ミリ秒)
aws_s3_bucket.my_bucket:
storage_gb: 500 # ストレージ量(GB)
monthly_tier_1_requests: 100000 # GET/POSTリクエスト数
EOF
infracost breakdown --path . --usage-file /tmp/infracost-usage.yml
Infracostの見積もりは公開リスト価格に基づいている。Reserved Instancesや Savings Plansの割引、Enterprise Discountプログラム(EDP)、スポットインスタンスの実際の価格は反映されない。また、データ転送コストや請求の詳細な按分方法によっては、実際の請求額と20〜30%程度の差が出ることがある。あくまで「デプロイ前の目安」として活用することが重要だ。
GitHub ActionsへのCI/CD統合:PRにコストを自動コメントする
Infracostの最大の価値は、CI/CDパイプラインへの統合によるPRへの自動コメント機能にある。
GitHub Actions設定
# .github/workflows/infracost.yml
name: Infracost Cost Check
on:
pull_request:
paths:
- '**.tf'
- '**.tfvars'
jobs:
infracost:
name: Infracost Cost Diff
runs-on: ubuntu-latest
permissions:
contents: read
pull-requests: write
steps:
- name: Checkout base branch
uses: actions/checkout@v4
with:
ref: '$'
- name: Setup Infracost
uses: infracost/actions/setup@v3
with:
api-key: $
- name: Generate base cost estimate
run: |
infracost breakdown --path=. \
--format=json \
--out-file=/tmp/infracost-base.json
- name: Checkout PR branch
uses: actions/checkout@v4
- name: Generate PR cost estimate
run: |
infracost breakdown --path=. \
--format=json \
--out-file=/tmp/infracost-pr.json
- name: Generate cost diff
run: |
infracost diff \
--path=/tmp/infracost-pr.json \
--compare-to=/tmp/infracost-base.json \
--format=json \
--out-file=/tmp/infracost-diff.json
- name: Post PR comment
uses: infracost/actions/comment@v3
with:
path: /tmp/infracost-diff.json
behavior: update # 既存コメントを更新(毎回新規投稿しない)
PRに投稿されるコメントの例:
## Infracost estimate 💰
| | Baseline | Pull Request | Diff |
|--|----------|--------------|------|
| Monthly cost | $125.00 | $325.00 | +$200.00 |
### Cost breakdown
- ✅ aws_instance.api: $60.74/month (unchanged)
- 📈 aws_rds_cluster.main: $175.20/month (added, +$175.20)
- 📈 aws_elasticache_cluster.cache: $89.06/month (added, +$89.06)
コストポリシーチェック(ガードレール)
月額コストの増分が一定額を超えた場合にCIを失敗させる設定も可能だ:
- name: Check cost threshold
run: |
MONTHLY_DIFF=$(jq '.diffTotalMonthlyCost' /tmp/infracost-diff.json)
if (( $(echo "$MONTHLY_DIFF > 500" | bc -l) )); then
echo "::error::Monthly cost increase exceeds $500 threshold: $MONTHLY_DIFF"
exit 1
fi
実践的なユースケース:Infracostが特に効果を発揮する4つのシナリオ
ユースケース1:開発・ステージング環境の無駄なコスト削減
開発環境でプロダクションと同等のインスタンスタイプを使っているケースは多い。Infracostをローカル開発環境に導入することで、「t3.large → t3.small」への変更で月額コストがいくら削減できるかを即座に確認できる。
# 現在の開発環境コスト確認
cd /path/to/dev-terraform
infracost breakdown --path . --log-level info
# インスタンスタイプ変更の影響をdiffで確認
# (.tfファイルを編集してからdiffを実行)
infracost diff --path .
ユースケース2:マルチリージョン展開のコスト試算
同じTerraformコードを複数リージョンにデプロイする場合の総コストを事前に把握できる。AWS ap-northeast-1(東京)とus-east-1(バージニア)では同じインスタンスでも料金が異なるため、リージョン選択のコスト影響を定量的に比較できる。
ユースケース3:マイクロサービスのリソース最適化
マイクロサービスアーキテクチャでは、各サービスのTerraformモジュールが分散している。Infracostのモジュール対応により、個々のサービスのコストを独立して計算し、最もコスト高なサービスを特定できる。
# 特定のTerraformモジュールのコストのみを計算
infracost breakdown \
--path /path/to/terraform \
--include-all-paths \
--exclude-path modules/unused-module
ユースケース4:年間インフラ予算計画の作成
Infracostで現在の全インフラのコスト内訳を取得し、JSON出力を加工して年間予算計画資料を作成するワークフローが構築できる。
# 全Terraformプロジェクトの一括コスト計算
infracost breakdown \
--path /path/to/all-terraform \
--format json | python3 -c "
import json, sys
data = json.load(sys.stdin)
total = data['totalMonthlyCost']
print(f'月額総コスト: \${float(total):.2f}')
print(f'年額総コスト: \${float(total)*12:.2f}')
"
競合ツールとの比較:FinOpsツール選択の整理
| ツール | 分析タイミング | 対象IaC | アプローチ | 料金 | 特徴 |
|---|---|---|---|---|---|
| Infracost | デプロイ前 | Terraform/Terragrunt | CLI + CI/CD | 無料OSS + Cloud有料 | シフトレフトFinOps |
| AWS Cost Explorer | デプロイ後 | AWS専用 | コンソール/API | AWS利用料に含む | 実績分析・予測 |
| Azure Cost Management | デプロイ後 | Azure専用 | コンソール/API | Azure利用料に含む | 実績分析・予測 |
| GCP Cost Management | デプロイ後 | GCP専用 | コンソール/API | GCP利用料に含む | 実績分析・予測 |
| Env0 | デプロイ前後 | Terraform/Pulumi/etc. | プラットフォーム | 有料(月額制) | IaC自動化+コスト |
| Spacelift | デプロイ前後 | Terraform/Pulumi/etc. | プラットフォーム | 有料(月額制) | IaC自動化+コスト |
| CloudHealth by VMware | デプロイ後 | マルチクラウド | SaaS | 有料(高コスト) | エンタープライズFinOps |
| Spot.io(NetApp) | リアルタイム | マルチクラウド | SaaS+自動化 | 有料(成果報酬) | スポットインスタンス最適化 |
Infracostが最も向いているケース:
- Terraformを既に使っており、FinOpsを始めたいチーム
- 既存のGitHub/GitLab/Bitbucket CI/CDに追加できる軽量ツールを探している
- 予算は限られているが、コスト可視化だけは実現したい
Env0/Spaeliftを選ぶべき状況:
- Terraformの実行管理(Remote State、Drift Detection等)も一元化したい
- IaC全体のガバナンスを強化したい
- コスト以外のポリシー管理(コンプライアンス、セキュリティ等)も必要
Infracost Cloudとエンタープライズ機能
無料のCLIツールに加え、チーム向けのInfracost Cloudプランが提供されている:
Infracost Cloud(有料)の機能:
- ダッシュボード:全Terraformプロジェクトのコスト可視化とトレンド分析
- タグポリシー:必須タグの強制とアンタグリソースの検出
- ガードレール:コスト増分の閾値超過でCI/CDをブロック
- チーム管理:複数メンバーへのアクセス権限管理
- コスト通知:週次・月次のコストレポートメール
CLIのみを使う場合、infracost.ioでの無料アカウント登録は必要だが、ツール自体は完全に無料で利用できる。
よくある質問
Q1:TerraformモジュールやTerragruntにも対応しているか?
Terragruntには対応している。--pathにTerragruntの設定ディレクトリを指定し、--terragrunt-hcl-fileオプションを追加することで対応できる。Terraformモジュールは標準のTerraformプロジェクトとして認識され、モジュール内のリソースも正しくコスト計算される。
Q2:Infracostのコスト計算精度はどの程度か?
固定料金(EC2インスタンス、RDS、ECS等)については公開リスト価格と概ね一致する。ただし、Reserved InstancesやSavings Plansの適用後の価格、スポットインスタンス実績価格、データ転送コスト(使用量依存)は自動では計算できない。実際の請求額との乖離は±15〜25%程度が目安だ。
Q3:Azureのリソースは日本円で表示できるか?
Infracostのデフォルト通貨はUSDだが、設定ファイルで通貨を変更することも可能。ただし、為替レートは日次更新のため、円換算の精度は為替変動に依存する。請求レポートにはUSDのまま表示し、社内での換算は別途行うことを推奨する。
Q4:Pulumi や CDK でも使えるか?
現時点ではInfracostはTerraformとTerragruntのみの対応。PulumiはPulumi独自のコスト推定機能(pulumi previewのコスト出力)を持っており、AWS CDKはCFN Guard等の別ツールを組み合わせる必要がある。Infracostの対応拡張はGitHubのIssueでリクエストされているが、対応時期は未定だ。
Q5:セキュリティ上の注意点はあるか?
Infracostはterraformのplanファイルを読み込んでコスト計算するが、planファイルにはインフラの設定値が含まれる。GitHub ActionsのシークレットとしてAPIキーを管理し、planファイル自体を公開リポジトリにコミットしないよう注意すること。Infracost Cloudへのデータ送信内容と範囲については公式のプライバシーポリシーを確認すること。
関連記事: AI自動化ツール完全ガイド2026|ノーコードからコードまで徹底比較
まとめと参照ソース
InfracostはTerraformユーザーがFinOpsを始める最も手軽な方法のひとつであり、12,271スターが示す通り世界中のDevOpsチームに採用されている。brew installと数行のCI設定だけで、コードレビュー段階でのコスト可視化が実現できる。
導入後の効果として最も大きいのは、「エンジニアのコスト意識の向上」だ。PRにコスト情報が表示されることで、チーム全体がインフラの経済的影響を自然に意識するようになる。これはツール単体の効果を超えた、チームの文化変革につながる。
Infracostで見えてきたコストをさらに削減するには、Spot.io等のリザーブドインスタンス管理ツールとの組み合わせや、不要リソースの自動削除ツールの導入も検討したい。
まずローカルで`infracost breakdown`を実行してみることを推奨する。Terraformで管理している既存インフラのコスト内訳が数秒で可視化され、想定外のコスト高リソースが見つかることも多い。その後、CI/CDへの統合を段階的に進めることで、チームへの導入摩擦を最小化できる。