JestのmaxWorkersをコマンドラインから確認する

JestのmaxWorkersをコマンドラインから取得する方法及び活用例をまとめました
2024.01.10

こんにちは😃、 CX事業本部のmorimorikochanです。
年末年始はひたすら実家でダラダラしてました。
今回は、Jestでテストを並列実行させるためにmaxWorkersを機械的に取得する必要があったので調べてまとめてみました。

先に結論

# あらかじめjqのインストールが必要です
npx jest --showConfig | jq .globalConfig.maxWorkers
# `npm run`経由なら`--silent`が必要です
npm run test --silent -- --showConfig | jq .globalConfig.maxWorkers

私の環境では、7と出力されました。これは同時に、私のローカルマシンではコア数が8であることも表してます

maxWorkersとは

Jestが実行される際、Jestは複数あるテストファイルを効率よく処理するため、並列にテストを実行します。
そのために、ワーカー(worker)が作成され、各ワーカーがテストファイルを順次実行していきます。
JestのオプションであるmaxWorkersは、このワーカーの最大数を制限することができるオプションです。

デフォルトではこのmaxWorkersは以下のような設定になっています。

  • ファイルの変更をwatchしない場合、{マシンで使用可能なコア数}-1
  • ファイルの変更をwatchする場合、 {マシンで使用可能なコア数の半分}

Jest CLI オプション · Jest

どういう場面で役立つ?

例えば、Jestの実行前にワーカー数分だけ外部環境(データベースやオブジェクトストレージ)を用意しないといけない場合に役立ちます。
用意する外部環境の数をハードコードしてしまうと、開発者によってコア数が異なる場合にうまく動作しなくなります。かといってユーザーごとにenvファイルなどで設定するのは面倒です。
そのような場合に、上記コマンドを使って自動で外部環境を用意できると良いでしょう

maxWorkerCount=`npm run test --silent -- --showConfig | jq .globalConfig.maxWorkers`

for i in $(seq 1 $maxWorkerCount); do
  echo "awsome prepare command in $i"
done

環境

  • Jest: 26.6.3