セットアップ手順
vitestインストール
mkdir vitest-parallel && cd vitest-parallel
npm init -y
npm install -D vitest
package.json のスクリプト設定
"scripts": {
"test": "vitest run",
}
vitest.config.ts 設定
以下は例です。
import { defineConfig } from 'vitest/config'
export default defineConfig({
test: {
// テストファイル単位で並列実行するか。true にすると複数ファイルを同時に実行します。
fileParallelism: true,
// ワーカー数の上限を指定します。数値か CPU に対する割合(例: '50%')が使えます。
// CIやローカルの CPU 数に応じて調整してください。
maxWorkers: '50%',
// 1つの describe(スイート)内で同時に実行するテストの最大数。
// 大きくするとスイート内の並列性が上がりますが、副作用のあるテストは注意。
maxConcurrency: 5,
// ファイル内のテストを並列実行するかどうかの設定。
// ここでは false にしてファイル内は逐次実行にしています(安全策)。
sequence: { concurrent: false },
// 各テストファイルを隔離して実行するか。true の場合はファイル毎に独立した環境で実行されます。
// 共有グローバルの影響を避けたいときは true を推奨。
isolate: true,
},
})
これにより、以下コマンドで並列にテストを動かせるようになります。
npm run test
並列化の実行結果
ローカル環境で実行時間がおおよそ 100ms / 400ms / 800ms の3ファイルを用意し、並列と直列それぞれで動かしました。
# 並列(デフォルト)
npm run vitest
# 直列(ファイル並列を無効化)
npm run vitest --no-file-parallelism
結果として、並列実行は直列実行より所要時間を短縮しました。以下の表は3回実行の平均を中心にまとめたものです。
| 実行モード | 3回実行の平均 |
|---|---|
| 並列(デフォルト) | 0.966s |
直列(--no-file-parallelism) |
1.670s |
実測では、並列化によって約 1.73× の速度改善が得られました。効果の大きさはテストの粒度や重いテストの割合、実行環境(CPU数や I/O 特性)に依存します。導入前にプロジェクト固有のベンチマークを取ることを推奨します。