テック技報最新号へ →
インフラ

Terraform: -chdir= でディレクトリを移動せずに plan / apply する

terraform -chdir=foo/bar plan のように書くと、cd せずに別ディレクトリのルートモジュールを操作できる。環境ごとにディレクトリを分けた構成で便利。

@zaru · 2026-10-16
#infra#terraform#iac#cli

どんなときに使う?

  • envs/dev、envs/prod のように環境別ディレクトリを持つリポジトリで、ルートから操作したいとき
  • Makefile・CI・エージェントからコマンドを流すとき(cd の失敗や戻り忘れがなくなる)

やり方

terraform -chdir=envs/dev init
terraform -chdir=envs/dev plan
terraform -chdir=envs/prod apply
  • -chdir は サブコマンドより前 に書くグローバルオプション(terraform plan -chdir=... は不可)
  • 指定したディレクトリに移動したのと同じように動く。.terraform/ やロックファイルもそのディレクトリのものが使われる

注意点

  • 例外が 2 つある。CLI 設定ファイル(.terraformrc など)は -chdir より先に読まれる。また設定内の path.cwd は 元の ディレクトリを返すので、ルートモジュールの場所が欲しいときは path.root を使う
  • 公式ドキュメントでも、スクリプトや自動化から Terraform を呼ぶ用途を想定したオプションとして紹介されている

参考: developer.hashicorp.com

出典

X の元の投稿を開く