テック技報最新号へ →
コード

Terraform: -chdir でディレクトリを移動せずに別のルートモジュールを操作する

terraform -chdir=envs/prod plan のように、サブコマンドの前に -chdir=DIR を付けると、cd せずにそのディレクトリで実行したのと同じになる。

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

いつ使うか

envs/dev・envs/prod のように環境ごとにルートモジュールを分けたリポジトリで、リポジトリのルートに居たまま操作したいとき。Makefile や CI のスクリプトで cd → 実行 → cd - を書かずに済む。

bash
terraform -chdir=envs/prod init
terraform -chdir=envs/prod plan -out=tfplan
terraform -chdir=envs/prod apply tfplan

注意点

  • グローバルオプションなのでサブコマンドより前に書く。 terraform plan -chdir=... の位置では効かない。
  • -out=tfplan や -var-file= などの相対パスは、移動先(envs/prod)からの相対になる。
  • 例外が2つ:
    • CLI 設定ファイル(.terraformrc など)は -chdir を処理する前に読まれる。
    • 設定内の path.cwd は元のディレクトリを指す。ルートモジュールの場所が欲しいなら path.root を使う。
  • 昔の terraform plan DIR のようにディレクトリを引数で渡す書き方は v0.15 で削除済み。その代わりが -chdir。
  • CI で毎回同じフラグを足すなら TF_CLI_ARGS_plan="-input=false" のような環境変数も使える(こちらはサブコマンドの直後に挿入される)。

参考

出典

X の元の投稿を開く