コンテンツにスキップ

機能

heal のオブザーバは 3 つの機能ファミリに分かれています。Code は常にオンで、heal init がどのプロジェクトでも有効にします。Test と Docs はオプトインです。コードのメトリクスと並べてそれらのシグナルも見たくなったら、.heal/config.toml で有効にしてください。各ファミリは、独自のメトリクスと設定セクション、そして修正を提案して承認されたものを適用する専用の Claude スキルを持っています。

「コードベースのどこが変更しにくいか?」

デフォルトのオブザーバファミリで、7 つのメトリクスを扱います。LOC、CCN、Cognitive Complexity、Churn、Change Coupling、Duplication、LCOM です。どれもコードベース自身の分布に合わせて calibration し、heal status で表示します。🔥 の Hotspot 装飾は、複雑で、しかもよく書き換えられるファイルを目立たせます。過去にリグレッションが集中してきたのは、こうしたファイルです。

ページ こんなときに読む
設定 しきい値を調整したい、モノレポの workspace を追加したい、解消ポリシーを変えたい
メトリクス 各メトリクスの意味と、Severity の決まり方を知りたい
スキル Claude のセッションから heal を使いたい(セットアップ、レビュー、リファクタ)

Code を有効にするフラグはありません。heal init が、すべてのオブザーバを有効にした設定を書き出します。

Test(オプトイン: [features.test])

Section titled “Test(オプトイン: [features.test])”

「テストから見えていない本番コードはどれか? ずれたテストや、黙って skip されているテストはどれか?」

テストの質を見る 3 つのオブザーバを追加し、報告するすべての項目に is_test_file フラグを付けます。中心になるシグナルは行カバレッジで、既存のリポータ(cargo llvm-cov、pytest --cov、nyc、scoverage)が出力した lcov.info から読みます。Hotspot のスコアには、カバレッジの足りないファイル向けの係数が加わります。そのため、よく変わり、しかもカバレッジが足りず、しかも複雑なファイルが、解消キューの上位に来ます。post-commit の通知には「N uncovered hotspot」の行が加わり、次にテストを書くべき場所が分かります。

ページ こんなときに読む
設定 ファミリを有効にしたい、lcov.info を読ませたい
メトリクス テストの各シグナルが何を見つけるかを知りたい
スキル Claude にテストスイートを見直させたい、カバレッジの穴を埋めさせたい

有効にするには、次のように書きます。

[features.test]
enabled = true
[features.test.coverage]
enabled = true

セットアップ用のスキルに任せることもできます。スキルはファミリを有効にし、使っている技術スタックを調べ、lcov.info がまだなければカバレッジのリポータを設定します(CI の変更は提案にとどめます)。Claude Code で次を実行します。

/heal:setup tests

Docs(オプトイン: [features.docs])

Section titled “Docs(オプトイン: [features.docs])”

「説明している実装から、ずれてしまったドキュメントはどれか?」

ペアになったドキュメントをそのソースと比べる、ドキュメントの質を見る 7 つのオブザーバを追加します。鮮度の遅れ、存在しない識別子の参照、ペアの欠落、内部リンク切れ、孤立ページ、TODO マーカーの密度、そして docs 用の Hotspot の計算です。各ドキュメントがどのソースを説明しているかは、小さな JSON ファイル(.heal/doc_pairs.json。/heal:setup docs が最初に 1 度生成します)で管理します。Markdown / RST の重複検出も、このファミリで有効になります。Hotspot のスコアには、ペアのドキュメントが古くなっているファイル向けの係数が加わります。

ページ こんなときに読む
設定 ファミリを有効にしたい、ペアのファイルの中身を知りたい
メトリクス ドキュメントの各シグナルが何を見つけるかを知りたい
スキル Claude にペアを見つけさせたい、ドキュメントを点検させたい、修正を適用させたい

有効にするには、次のように書きます。

[features.docs]
enabled = true

そのあと、セットアップ用スキルの docs の手順を 1 度実行してください(上のスイッチもあわせてオンにできます)。ソースとドキュメントのツリーを調べてドキュメントとソースの対応を推測し、.heal/doc_pairs.json に書き出します。この対応表がないと、docs ファミリはペアのドキュメントを何と比べればいいか分かりません。この手順は任意のおまけではなく、有効化の一部です。Claude Code で次を実行します。

/heal:setup docs

Semantic(オプトイン: [features.semantic])

Section titled “Semantic(オプトイン: [features.semantic])”

「このコード、テスト、ドキュメントは、書いてあるとおりの意味になっているか?」

メトリクスでは答えられない問いを TypeSafe の分類モデル Jev に投げ、その答えを Code・Test・Docs の各ファミリに加えます。heal の中でネットワークに内容を送るのはこの機能だけで、それも heal semantic ask を実行したときに限ります。何が送られるか、API キー、料金については Semantic (Jev) を参照してください。

[features.semantic]
enabled = true

よくある導入の順番は次のとおりです。

  1. まず Code から。 heal init を実行し、/heal:refactor で Finding を片付けます。Critical 🔥 がゼロになれば、それが基準線になります。
  2. 次に Test。 lcov.info がある(または用意できる)なら有効にします。coverage_pct と skip_ratio のレポートで、「テストを足したほうがいい」という感覚が、順位の付いたキューになります。
  3. 最後に Docs。 ドキュメントのずれにたびたび驚かされるようになったら有効にします。Layer A のペアを作るには、最初に 1 度 /heal:setup docs を通す必要があります。その後は heal status を実行するたびに docs ファミリも動きます。

オプトインのファミリは、あとから無効にもできます。enabled = false にすると、次の heal status --refresh でその項目が TODO リストから消えます。もう一度有効にすれば、calibration をやり直さなくても戻ってきます。