開発支援・コーディング

Vitestとは|1件0.10%でも、1000件あれば一式が誤って赤くなる割合は62.8%だった

何を前提にした道具なのか件数が増えると何が起きるのか再実行で解けるのか

1件あたり0.10%の確率でたまに落ちるとします。50件なら一式が赤くなるのは4.8%です。

1000件では62.8%になります。1件あたりは変わっていないのに、一式は当てになりません。

この記事の要点

  • 50件で4.8%
  • 1000件で62.8%
  • 再実行1回で86.71%
  • 2回で0.47%

1件0.10%でも、1000件あれば誤って赤くなる割合は62.8%

変更のたびに走らせる前提なら、一式が当てになるかが重要になります。件数が効きます。

Vitestは、変更のたびに走らせることを前提にしています。公式は監視の動作は既定で有効になっており、Viteが押し進める開発を第一とする体験に沿っていると述べています。

頻繁に走らせるなら、赤が本物かどうかが効きます。件数を変えて数えました。

件数を変える

各テストが独立に、決まった確率でたまに落ちるとしました。一式を2万回まわしています。

text
一式を 20000回まわし、本当は問題がないのに赤くなる割合を数える
各テストは独立に、決まった確率でたまに落ちるものとした

たまに落ちる確率           50件        200件       1000件       3000件
0.01%                     0.5%        2.1%        9.0%       26.0%
0.10%                     4.8%       17.8%       62.8%       95.0%
0.50%                    22.1%       62.5%       99.3%      100.0%

1件0.10%の行を見てください。50件なら4.8%、1000件では62.8%です。

1件あたりの確率は変えていません。件数だけで13倍になりました。

この割合が意味すること

62.8%ということは、赤くなった回の多くが本物ではないということです。

そうなると、赤を見ても手が止まりません。まず走らせ直すという動きになります。

変更のたびに走らせる道具ほど、この問題が効きます。回数が多いぶん、赤を見る機会も増えるためです。

1件あたりが同じでも、件数が増えると一式が当てにならなくなる。

誤って赤くなる割合(%)一式の件数(件)→105330050件200件1000件3000件1件あたり0.10%でたまに落ちる場合を2万回試した結果。1件あたりの確率は変えていない。
図1 ── 件数と、誤って赤くなる割合
出典Vitest 公式ドキュメント「Why Vitest」2026-08-18 確認
Watch mode is enabled by default, aligning itself with the way Vite pushes for a dev first experience.
原文Vitest 公式ドキュメント「Why Vitest」 この内容の有効期限2027-02-18

再実行で誤検知は消えるが、同じ式で不具合も見逃す

落ちたら試し直す設定は効きます。ただし、毎回は出ない不具合も同じ割合で消えます。

Vitestは走らせる役を担う道具です。公式はVitestは、Viteを使う企ての選ばれる実行役として、またViteを使わない企てにとっても堅実な代わりとして、自らを位置づけることを目指すと述べています。

走らせる役が持つ設定のひとつが、落ちたら試し直すことです。その効き方を数えました。

再実行の上限を変える

text
一式 1000件。1件あたり 0.20% の確率でたまに落ちる
落ちたテストは決めた回数まで再実行し、すべて落ちたときだけ赤にする(20000回まわした)

再実行の上限  誤って赤くなる割合              不具合100%を捕まえる             不具合50%を捕まえる             不具合20%を捕まえる
1回                        86.71%                  100.0%                   50.0%                   20.0%
2回                         0.47%                  100.0%                   25.0%                    4.0%
3回                         0.00%                  100.0%                   12.5%                    0.8%

上限2回で、誤検知は86.71%から0.47%になります。184分の1です。

ところが右の列も同時に下がります。5割の確率で出る不具合は50.0%から25.0%へ、同じ割合で見逃されます。

同じ式で動いている

偶然の失敗も、毎回は出ない不具合も、「再実行したら通った」という形が同じです。区別できません。

だから再実行は、両方を同じ式で消します。片方だけを消すことはできません。

毎回出る不具合だけは残ります。左から2列目が100.0%のままなのがそれです。

同じ形の釣り合いはE2Eテストの記事でも扱いました。再実行は、確率で出るものすべてに同じように効きます。

出典Vitest 公式ドキュメント「Why Vitest」2026-08-18 確認
Vitest aims to position itself as the Test Runner of choice for Vite projects, and as a solid alternative even for projects not using Vite.
原文Vitest 公式ドキュメント「Why Vitest」 この内容の有効期限2027-02-18

変換の仕組みを共有している

組み立てに使う設定をそのまま使えます。だから、設定を二重に持たずに済みます。

Vitestの土台は明示されています。公式はVitestはViteによって支えられていると述べています。

支えられているので、変換の設定を共有できます。公式もその利点を説明しています。

試験のあいだにファイルを変換するのにViteの開発用の受け口を使う。そうすることで、原始のファイルの変換という込み入った処理を扱わずに済む単純な実行役を作れる、という説明です。

共有できるもの

  1. 変換の設定。同じ書き方が試験でも通る
  2. 別名の解決。取り込みの書き方が揃う
  3. 環境ごとの値。組み立てと試験で同じものを見る
  4. 差し替えの設定。同じ仕組みで置き換えられる

1番目が実務で効きます。組み立てでは通るのに試験では通らない、という状態が起きません

速さと件数

変換を共有すると、走らせ直しが速くなります。変わった分だけを作り直せるためです。

その範囲はViteの記事で測っていて、中央値3個・99%点282個でした。速い場合と遅い場合の幅が大きい形です。

速くなると走らせる回数が増えます。そのぶん、前の節の誤検知に当たる機会も増えます。速さと当てになることは別の話です。

余談 この計測での注意

各テストが独立に、決まった確率で落ちるという前提を置いています。実際には、同じ原因で複数のテストが同時に落ちることが多く、その場合は一式が赤くなる割合がここより低くなります。1件あたりの確率も置いた値です。再実行の右3列は、捕まえる確率を繰り返し乗じた計算で出しています。ここで見せているのは、件数が増えると一式が当てにならなくなること、再実行が誤検知と不具合を同じ式で消すことの2つです。

出典Vitest 公式ドキュメント「Why Vitest」2026-08-18 確認
Vitest is powered by Vite.
原文Vitest 公式ドキュメント「Why Vitest」 この内容の有効期限2027-02-18

よくある質問

Vitestは何を前提にしていますか
変更のたびに走らせることです。監視の動作が既定で有効になっていると説明されています。
件数が増えると何が起きますか
誤って赤くなる割合が上がります。1件0.10%でも、1000件なら62.8%でした。
再実行で解けますか
誤検知は減ります。上限2回で86.71%が0.47%になりました。
再実行の代償は何ですか
毎回は出ない不具合も見逃します。5割の確率で出る不具合は、2回にすると25.0%しか捕まりません。

まとめ

  • 変更のたびに走らせる前提
  • 件数が増えると誤検知が増える
  • 再実行で誤検知は減る
  • 同じ式で不具合も見逃す

今日から始められること

  1. 一式の件数を数える
  2. 赤くなった回のうち、再実行で緑になる割合を測る
  3. 再実行の上限を決める
  4. 毎回は出ない不具合がないか確かめる

実務で組んだVitestのワークフローには、値段が付きます

同じ課題を持つ会社にとって、動いている設定は「作る時間」を買えるということです。ServiceDockは自作のワークフローやテンプレートを出品できるマーケットプレイスです。手数料や出品の流れは出品者向けページにまとまっています。

出品の仕組みを見る