この記事では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のシフトレフト」とは何か
ソフトウェア開発において「シフトレフト」はテストや品質チェックを開発の早い段階(左側)で行うことを指す。FinOpsのシフトレフトとは、クラウドコストの確認をデプロイ後ではなく、設計・コーディング・コードレビューの段階(左側)で行うことを意味する。Infracostはこのアプローチを実現するツールであり、コスト管理をDevOpsパイプラインに統合する。

Infracostのアーキテクチャと動作原理

Infracostがどのようにしてコストを計算するかを理解しておくと、ツールの制限と可能性を正確に把握できる。

CLI

JSON

HTML

Terraform コード
.tf ファイル

terraform plan
または planファイル

infracost breakdown
コマンド実行

リソース解析エンジン
(Go言語実装)

クラウドプロバイダーAPI
価格データ取得

AWS Pricing API

Azure Retail Prices API

GCP Cloud Billing API

コスト計算エンジン
1,100+リソース対応

出力形式

ターミナル表示
テーブル形式

JSON出力
CI/CD連携用

HTMLレポート
人間向け可視化

infracost comment
PRコメント投稿

GitHub PR

GitLab MR

Bitbucket PR

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で費用対効果が最も高い使い方 最も効果が高いのは、インフラエンジニアだけでなくアプリケーションエンジニアも含めた全開発チームのCI/CDパイプラインへのIntegrationだ。コスト意識がないエンジニアが意図せず高額リソースをデプロイするミスを防ぐ「セーフティネット」として機能し、FinOpsチームがすべてのTerraform変更を事前確認する負担を削減できる。PRコメントによるコスト表示は、エンジニアのコスト学習にも効果がある。

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への統合を段階的に進めることで、チームへの導入摩擦を最小化できる。

参照ソース