xshoji's blog

Brunoで環境変数を一時的に上書きする方法

目次

以前 Postman を使っていたが、環境変数を一時的に違う値に上書きする機能が地味に便利だった。

Guide on How to Persist Postman Variables | Postman Blog
https://blog.postman.com/how-to-persist-postman-variables/

この機能を使うことで、今だけ

  • 操作対象のアカウントIDを違うIDに切り替える
  • リクエスト先のバージョンを変更する

といったことが可能で、かつ環境変数の元の値は変更しないので作業が終わったら全て元に戻す、ということが可能だった。

現在は Bruno をメインで使っているのですが(以前紹介した こちらの記事 が原因で乗り換えました)、環境変数を設定する画面上では Postman にあるような「Initial Value」と「Current Value」という項目はなかったため、普段書き換える時は環境変数を書き換えたり、頻繁にやるなら環境ごとコピーしたり面倒だった。

実はBrunoでも環境変数の一時的な上書きが可能

できないと思ってたんですが、少し調べたところ、 Bruno の Javascript API にある setEnvVar というAPIで環境変数を書き換えられるみたいで、このAPIはデフォルトでメモリ上にのみ保存され、オプションを指定しない限り永続化されない、と言うことがわかりました。これで良かったんや、という。

JavaScript API Reference | Bruno Docs
https://docs.usebruno.com/testing/script/javascript-reference

setEnvVar(key, value, options?) - By default, environment variables are temporary and do not persist between app restarts.

実際やってみると、見た目上は Environment の値が書き換わったように見える(ちょっと焦ります)が、公式ドキュメントに記載されてる通り、メモリ上の一時的な上書きであり、永続化オプション(例: { persist: true })を指定しない限り、再起動でリセットされる。

このため、Environmentの設定を汚さずに一時的に値を書き換えたい場合は、 Collection や Request の設定にある「Script」内に

// bru.setEnvVar(key, value);
bru.setEnvVar("userId", "hogehoge");

を記述すれば環境変数の一時的な上書きが可能だということがわかった。

ちなみに、永続化オプション { persist: true } を指定すると、環境変数の値を上書きすることもできる。

bru.setEnvVar("userId", "hogehoge", { persist: true });

ちなみに Postman の同機能はなんと廃止済みらしい

この記事を書く時に調べてて気づいたのだが、 Postman にあった、環境変数を一時的に上書きする機能、昨年廃止されていた。

After Postman update no initial and current value anymore - Help Hub - Postman Community
https://community.postman.com/t/after-postman-update-no-initial-and-current-value-anymore/84510

えぇ…この機能は本当にめちゃくちゃ便利だったのに残念。

Postmanから乗り換えて良かった!!!