0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

セットアップ手順

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 特性)に依存します。導入前にプロジェクト固有のベンチマークを取ることを推奨します。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?