Terraformでプロバイダー追加・更新後に発生する「Inconsistent dependency lock file」エラーの修正方法

intermediate🏗️ Terraform2026-03-24| Terraform >= 0.14、任意のOS(Linux、macOS、Windows)、任意のクラウドプロバイダー(AWS、GCP、Azure)

Error Message

Error: Inconsistent dependency lock file The following dependency selections recorded in the lock file are inconsistent with the current configuration
#ロックファイル#プロバイダー#terraform-init#terraform

エラーの内容

terraform plan または terraform apply を実行すると、突然止まってしまいます:

Error: Inconsistent dependency lock file

The following dependency selections recorded in the lock file are inconsistent with the current configuration:
  - provider registry.terraform.io/hashicorp/aws: locked version selection 4.67.0 doesn't match the
    constraint "~> 5.0" recorded in the configuration

To update the locked dependency selections to match a changed configuration, run:
  terraform init -upgrade

ほとんどの場合、原因はシンプルです。誰かが versions.tfrequired_providers を編集した — バージョン制約を変更した、プロバイダーを追加した、など — にもかかわらず、その後 terraform init を実行しなかったというケースです。

根本原因

Terraform は .terraform.lock.hcl ファイルを管理しています。これはレシートのようなもので、最後に terraform init を実行した時点で固定された、正確なプロバイダーバージョンと暗号化チェックサムが記録されています。

.tf ファイルがその固定されたピンと矛盾する制約を宣言した瞬間、Terraform は処理を停止します。暗黙的に別のバージョンを選択することはありません。これは意図的な動作です — 暗黙のバージョンドリフトこそが、本番環境を追跡困難な形で壊す原因になるからです。

よくある原因:

  • required_providers のバージョン制約を更新した(例:~> 4.0~> 5.0
  • ロックファイルにエントリが存在しない新しいプロバイダーブロックを追加した
  • チームメンバーがプロバイダー制約またはロックファイル自体を変更したコミットを git から取得した
  • .terraform/ キャッシュを削除したが、古いロックファイルを残してしまった
  • 異なるOS上で実行している — CI が Linux/amd64 で開発機が macOS/arm64 — ロックファイルに一方のプラットフォームのチェックサムしか含まれていない場合

修正方法

方法1:Terraform にロックファイルをアップグレードさせる(最も一般的な修正)

Terraform はエラー出力に実行すべきコマンドを表示しています:

terraform init -upgrade

これにより、現在の制約に対してすべてのプロバイダーが再解決され、.terraform.lock.hcl が最初から書き直されます。すぐにコミットしてください。

git add .terraform.lock.hcl
git commit -m "chore: update terraform provider lock file"

方法2:既存のピンに触れずに新しいプロバイダーを追加する

新しいプロバイダーを追加したばかりで、他のものをバンプするリスクを避けたい場合は、-upgrade フラグを省略してください:

terraform init

通常の terraform init は、ロックファイルに存在しないプロバイダーのみをダウンロードします。すでにピン留めされているバージョンはそのまま維持されます。変更が純粋に追加のみである場合は、こちらの方が安全な選択です。

方法3:クロスプラットフォームのチェックサム不一致を修正する

CI パイプライン(Linux/amd64)では失敗するが、MacBook(macOS/arm64)では正常に動作する場合があります。ロックファイルにはノートパソコンのアーキテクチャ用のチェックサムしかなく、CI ランナー用のものがありません。バージョンを変えずに修正するには:

terraform providers lock \
  -platform=linux_amd64 \
  -platform=darwin_arm64 \
  -platform=darwin_amd64

結果をコミットしてください。これでロックファイルにチームが使用するすべてのプラットフォームのチェックサムが含まれ、CI が文句を言わなくなります。

方法4:ドリフトを防ぐために正確なバージョンをピン留めする

-upgradeaws プロバイダー 5.89.0 を取得したが、まだその準備ができていない場合は、versions.tf で明示的にロックダウンしてください:

terraform {
  required_providers {
    aws = {
      source  = "hashicorp/aws"
      version = "= 5.31.0"  # exact pin, no drift
    }
  }
}

再度 terraform init -upgrade を実行してください。チームメンバーが自分のマシンで -upgrade を使っても、Terraform は 5.31.0 にロックされます。

方法5:ロックファイルを削除してゼロから始める(最終手段)

本当に破損したロックファイルや、ゼロからブートストラップする全く新しい環境の場合に限り使用してください:

rm .terraform.lock.hcl
terraform init

Terraform はすべてをゼロから再生成します。コミットする前に新しいピンを確認してください — 今どのバージョンを実行しているかを把握することが重要です。

修正の確認

上記のいずれかの修正後に、2つの簡単な確認を行います:

# エラーなしで完了するはずです
terraform init

# ロックファイルエラーなしでプランが表示されるはずです
terraform plan

ロックファイルに期待するプロバイダーバージョンが実際に含まれていることを確認します:

grep -A3 'provider "registry.terraform.io/hashicorp/aws"' .terraform.lock.hcl

次のような出力が表示されるはずです:

provider "registry.terraform.io/hashicorp/aws" {
  version     = "5.31.0"
  constraints = "~> 5.0"
  hashes = [

予防策

  • .terraform.lock.hcl は必ずコミットしてください。 package-lock.json と全く同じように扱ってください。オプションではなく、ノイズでもなく、.gitignore に追加するものでもありません。
  • .tf ファイルに触れるすべての pull の後に terraform init を実行してください。 特に versions.tf の変更後は習慣にしてください。
  • 最初の CI コミットの前にプラットフォームのチェックサムを追加してください。 ローカルで terraform providers lock -platform=linux_amd64 を実行しておくことで、初日から CI ランナーが不一致に遭遇しなくなります。
  • 共有環境や本番環境では = x.y.z 形式の正確なピンを使用してください。 ~> 5.0 のような範囲制約は開発では便利ですが、チームメンバーの -upgrade が暗黙的に新しいマイナーバージョンを取得した際に問題を引き起こす可能性があります。
  • versions.tf の YAML ブロックでバージョン制約の構文を検証する必要がある場合は、ToolCraft の YAML ↔ JSON コンバーターが便利です — ブラウザ上で完全に動作し、アップロード不要です。

クイックリファレンス

# 新しいプロバイダーを追加した場合 → 通常の init
terraform init

# バージョン制約を更新した場合 → ロックファイルをアップグレード
terraform init -upgrade

# クロスプラットフォームの CI 不一致 → プラットフォームのチェックサムを追加
terraform providers lock -platform=linux_amd64 -platform=darwin_arm64

# 最終手段(破損したロックファイル)
rm .terraform.lock.hcl && terraform init

# 変更後は必ずロックファイルをコミット
git add .terraform.lock.hcl && git commit -m "chore: update lock file"

Related Error Notes