---
title: Health スコア
description: 重み付き Health スコアの仕組みと、--min-health を CI ゲートとして使う方法。
sidebar:
  order: 2
---

**Health スコア**は、分析結果に存在する全カテゴリを通したプロジェクト全体の品質を、0〜100 の単一の数値に要約したものです。`--min-health` フラグはこのスコアで CI パイプラインをゲートします。

## スコアの計算方法

Health は 2 段階で計算されます：

### 1. カテゴリスコア

svelte-vitals は、アクティブなカテゴリ（SEO、パフォーマンスなど）ごとに独立したスコアを計算します。

- 各ルートは、そのカテゴリで測定対象となったチェックのうち、重大度で重み付けした上で合格した割合をスコアとします。
  失敗が1つも無ければ **100** です。ルートが測定される重大度ウェイトには 25 点の下限値があります
  （詳しくは[レポーターガイド](/ja/guides/reporters)を参照）。この下限値が効くのは測定対象がもともと薄いルート
  だけで、1つか2つの検出でスコアがゼロになるのを防ぎます。測定対象がそれ自体で 25 点以上あるルートでは下限値は
  何も変えず、該当するチェックがすべて失敗すればスコアは **0** のままです。
- 失敗したチェックの重みは重大度が決めます：`critical` は 15、`warning` は 5、`info` は 1 です。
- 失敗したチェックは（ルート、ルール）ペアごとに一度だけ数えます。同じペアで重複した場合は、合計せず最大の重大度を適用します。
- ルートスコアを平均してカテゴリの見出しスコアを算出します。
- クリティカルな検出結果が存在する場合、見出しスコアは **79** にキャップされます。

### 2. 重み付き Health

Health は、カテゴリごとの重みを使って**丸める前の**カテゴリスコアを平均します。デフォルトでは、存在する各カテゴリの重みはすべて等しく `1` です。例えば SEO とパフォーマンスだけが存在する場合：

```text
Health = (SEO_score × w_seo + Performance_score × w_perf) / (w_seo + w_perf)
```

この式は簡潔にするため2カテゴリで示していますが、実際には結果に存在する**すべて**のカテゴリ（最大6つ：SEO、Performance、Correctness、Security、Architecture、Accessibility）で同じ加重平均を取ります。

重みは `--weights` フラグまたは設定ファイルの `weights` フィールドで指定します。両方の詳細は [設定ファイル](/ja/guides/configuration) を参照してください。例えば SEO の重みを2倍にするには、次のように設定します。

```bash
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`）。

```bash
svelte-vitals --min-health 80
```

これは `--fail-on` とは別の CI ゲートとして便利です。

- `--fail-on` は個々の検出結果の重大度に反応します。
- `--min-health` は集約された重み付きスコアに反応します。

両方を併用しても構いません。

## 出力例

```text
Health: 82  (SEO: 90 · Performance: 75)
```

SEO ルールのみが発火した場合：

```text
Health: 90  (SEO: 90)
```

## ルートごとの内訳

`--by-route` を追加すると、サイト全体の Health と並んで各ルートのスコアを確認できます。

```bash
svelte-vitals --by-route
```
