npm script における --(ハイフン2つ)が意外と便利だった件

2025/04/09 公開

Terraformを使ったインフラ管理を行っていると、複数のTerraformコマンド(init、plan、applyなど)を .env ファイルの環境変数付きで実行する機会が多くあります。
これまではそれぞれのコマンドに対して個別のnpmスクリプトを用意して対応していましたが、今回の改善によって、運用をよりシンプルに、柔軟に行えるようになりました。

これまでの運用

Terraformの各コマンドを実行する際、.env ファイルを読み込ませる必要があったため、以下のように個別のnpmスクリプトを定義していました。

"terraform:init": "dotenv -e .env -- terraform -chdir=./terraform init",
"terraform:import": "dotenv -e .env -- terraform -chdir=./terraform import $npm_config_resource $npm_config_id",
"terraform:plan": "dotenv -e .env -- terraform -chdir=./terraform plan",
"terraform:apply": "dotenv -e .env -- terraform -chdir=./terraform apply"

この方法でも運用は可能ですが、コマンドの種類が増えるたびにnpmスクリプトの数も増加し、メンテナンス性が低下していくという課題がありました。

改善後の運用

今回の見直しにより、Terraform関連のコマンドを1つのnpmスクリプトに集約することができました。

"terraform": "dotenv -e .env -- terraform -chdir=./terraform"

この変更により、以下のように自由な引数を付けてTerraformコマンドを実行できるようになりました。

npm run terraform -- init
npm run terraform -- plan
npm run terraform -- apply
npm run terraform -- import aws_s3_bucket.example my-bucket-id