Health スコア
重み付き Health スコアの仕組みと、--min-health を CI ゲートとして使う方法。
Health スコアは、分析結果に存在する全カテゴリを通したプロジェクト全体の品質を、0〜100 の単一の数値に要約したものです。--min-health フラグはこのスコアで CI パイプラインをゲートします。
スコアの計算方法
Health は 2 段階で計算されます:
1. カテゴリスコア
svelte-vitals は、アクティブなカテゴリ(SEO、パフォーマンスなど)ごとに独立したスコアを計算します。
- 各ルートは、そのカテゴリで測定対象となったチェックのうち、重大度で重み付けした上で合格した割合をスコアとします。 失敗が1つも無ければ 100 です。ルートが測定される重大度ウェイトには 25 点の下限値があります (詳しくはレポーターガイドを参照)。この下限値が効くのは測定対象がもともと薄いルート だけで、1つか2つの検出でスコアがゼロになるのを防ぎます。測定対象がそれ自体で 25 点以上あるルートでは下限値は 何も変えず、該当するチェックがすべて失敗すればスコアは 0 のままです。
- 失敗したチェックの重みは重大度が決めます:
criticalは 15、warningは 5、infoは 1 です。 - 失敗したチェックは(ルート、ルール)ペアごとに一度だけ数えます。同じペアで重複した場合は、合計せず最大の重大度を適用します。
- ルートスコアを平均してカテゴリの見出しスコアを算出します。
- クリティカルな検出結果が存在する場合、見出しスコアは 79 にキャップされます。
2. 重み付き Health
Health は、カテゴリごとの重みを使って丸める前のカテゴリスコアを平均します。デフォルトでは、存在する各カテゴリの重みはすべて等しく 1 です。例えば SEO とパフォーマンスだけが存在する場合:
Health = (SEO_score × w_seo + Performance_score × w_perf) / (w_seo + w_perf)
この式は簡潔にするため2カテゴリで示していますが、実際には結果に存在するすべてのカテゴリ(最大6つ:SEO、Performance、Correctness、Security、Architecture、Accessibility)で同じ加重平均を取ります。
重みは --weights フラグまたは設定ファイルの weights フィールドで指定します。両方の詳細は 設定ファイル を参照してください。例えば SEO の重みを2倍にするには、次のように設定します。
svelte-vitals --weights seo=2
結果に存在するカテゴリだけが平均に入ります。 例えば、パフォーマンスルールに1件も該当しないプロジェクトでは、パフォーマンスカテゴリは結果を生成せず、Health は残りのカテゴリだけから算出されます。
スコアは最も近い整数への丸めではなく、切り捨てられます。したがってカテゴリスコアが 100 であれば、そのカテゴリの減点が正確にゼロだったことを意味します。検出結果が1件でもあれば(info 1件であっても)、そのカテゴリのスコアは 99 以下になります。
重みが影響するのは Health だけで、カテゴリ自身のスコアには影響しません。 カテゴリスコアはそのカテゴリの検出結果だけから算出されるので、重みを 0 にしてもスコアが上がることはありません。0 が行うのは、そのカテゴリを Health の平均からまるごと除外することです。だからこそ、重み 0 のカテゴリが critical を含むスコアを表示していても、Health は 100 のままになりえます。
Health の切り捨ては、丸める前のカテゴリスコアから一度だけ行われます。そのため Health は、画面に表示されるカテゴリスコアの平均と必ずしも一致せず、それらより最大1ポイント高くなることがあります。表示される各カテゴリスコア自体がすでに切り捨て済みであり、そこにもう一度切り捨てを重ねると、その分だけ余計に値を失ってしまうからです。
--min-health ゲート
Health スコアが閾値を下回った場合に実行を失敗させます(終了コード 1)。
svelte-vitals --min-health 80
これは --fail-on とは別の CI ゲートとして便利です。
--fail-onは個々の検出結果の重大度に反応します。--min-healthは集約された重み付きスコアに反応します。
両方を併用しても構いません。
出力例
Health: 82 (SEO: 90 · Performance: 75)
SEO ルールのみが発火した場合:
Health: 90 (SEO: 90)
ルートごとの内訳
--by-route を追加すると、サイト全体の Health と並んで各ルートのスコアを確認できます。
svelte-vitals --by-route