Solana Anchorのtestでdotenvを使って.env.devを読み込みたい

Anchorを一例にしているが、ts-mochaを使っている環境であれば、ほかも同じように対応可能。

やりたいこと

dotenvを使うとデフォルトだと.envファイルが読み込まれるが、開発用に.env.devを読み込むようにしたい。
指定のenvファイルを読み込むために、testファイル内にファイル設定情報を書くことでも対応できるが、ソース内はなるべく汚染したくないため、ts-mochaの引数として.env.devを読み込めるようにしたい。

前提

  • Anchorのセットアップが完了している(anchor init)
  • ts-mochaとdotenvがインストール済み

対応方法

anchor test を実行すると、Anchor.tomlのscriptsが実行される仕組みになっているため、まずここを書き換えていく。

「-r dotenv/config」と「dotenv_config_path=.env.dev」を追記。

Anchor.toml:

[features]
seeds = false
skip-lint = false
[programs.localnet]
hok = "CTgTMTJ2jkCU2TKkWa7FNiLa8aEcsu1knKPahSN9tLD"

[registry]
url = "https://api.apr.dev"

[provider]
cluster = "Localnet" # For Anchor Test(tests/hok.ts)
wallet = "~/.config/solana/id.json"

[scripts]
# test = "yarn run ts-mocha -p ./tsconfig.json -t 1000000 tests/**/*.ts"
test = "npx ts-mocha -r dotenv/config -p ./tsconfig.json -t 1000000 tests/**/*.ts dotenv_config_path=.env.dev"

.evn.devファイルを作成する。

ディレクトリ構成:

.
├── .DS_Store
├── .anchor
├── .env.dev ← これを作成
├── .git
├── .gitignore
├── .prettierignore
├── .vscode
├── Anchor.toml
├── Cargo.lock
├── Cargo.toml
├── app
├── migrations
├── node_modules
├── package-lock.json
├── package.json
├── programs
├── target
├── tests
├── tsconfig.json
└── yarn.lock

.env.dev:

SECRET_KEY="[42,10,22,97,116,115,107,57,226,247,40,179,216,11,216,9,110,233,110,240,85,78,144,173,253,79,75,12,175,216,43,214,245,164,74,111,54,131,150,17,113,31,4,20,159,81,221,64,109,212,188,82,203,134,242,13,210,177,22,8,166,44,126,233]"

これで以下「process.env.SECRET_KEY」のように、.env.devがtestファイル内で利用できるようになる。

testファイル:

  const connection = new Connection('http://127.0.0.1:8899', 'confirmed');

  if (!process.env.SECRET_KEY) throw Error('Not found SECRET_KEY');
  const secretKey = new Uint8Array(JSON.parse(process.env.SECRET_KEY));
  const keypair = Keypair.fromSecretKey(secretKey);
  const wallet = new anchor.Wallet(keypair);

  const provider = new anchor.AnchorProvider(
    connection, wallet, { commitment: 'confirmed' },
  );
  anchor.setProvider(provider);

補足

.env.devファイルは正常に読み込めているが、実行時に以下のWarningが出る。
いろいろ試したが解決できず。

Warning: Cannot find any files matching pattern "dotenv_config_path=.env.dev"