コマンドラインの Coverage Studio 2.2026.4 — 2 つのエンジンが測定したファイルは、どこからコマンドを実行しても 1 回だけ数えられます
2026-10-04
修正
- コマンドを実行するフォルダーがレポートの意味を決めることはありません。 2.2026.3 はレポートの相対パスを、そのレポートが書かれたディレクトリに基準付けます — ただし、別の場所から実行されたコマンドに限られていました。測定対象のツリーのルートから、つまりカバレッジのコマンドが普通に実行される場所から実行すると、相対パスは依然としてそのフォルダーを基準に解決され、llvm-cov がすでに完全なパスで示していたファイルが 2 回目に数えられていました。5,258 行のツリーが 5,836 行として読まれたのです。いまは
--cwd とレポート自身の場所だけが決めます。同じ修正は両エディターにも入っており、そこでのフォルダーは VS Code や Visual Studio が起動されたフォルダーでした。 export --format json が実行結果を設定ファイルに上書きしていました。 その出力先は fucini-coverage.json — 設定が読み込まれるファイル名そのもの — でした。普通に設定されたフォルダーでは、エクスポートが直前に判定の基準としたしきい値を壊していたことになります。実行結果は coverage-run.json に書き出され、export と badge は設定ファイルを指す --out を拒否します。 --cwd は書き方を問わずフォルダーとして受け取ります。 相対指定 — --cwd .、--cwd ../tree — は入力されたまま扱われ、誤ったパス規則で読まれていました。Windows では、半分 POSIX・半分 Windows の設定ファイルが読めないと答え、レポートをまったく見つけられませんでした。末尾の区切り文字もフォルダーの一部ではなくなりました。 - 誰も宣言していないフラグはレポートではありません。
summary -o out.json は -o をレポートと受け取り、そのようなファイルはないと答えていました。短い形は -h と -v だけです。-- はダッシュで始まる名前のファイルをこれまでどおり渡し、コマンドより前に書かれたフラグは、ヘルプ全文ではなくエラーの中で名指しされます。 check --json は終了コードと同じことを言います。 しきい値が何も設定されていないとき、終了コード 0 の横に "passed": false と書いていたため、終了コードではなく JSON を読むパイプラインが、コマンドとしては合格した実行を失敗にしていました。passed は終了コードを一語で表したもので、ゲートがなかったことを示すのは configured です。空の --lines "" は、そのゲートを黙って無効にする代わりに拒否されます。 - 比較はベースラインを、実行結果と同じ場所に置きます。
pathRemap とレポートが宣言するルートは実行結果には適用され、ベースラインには適用されていませんでした。そのためビルドサーバーで書かれたベースラインは何とも対応せず、合計は明らかに動いているのに「何も動いていない」と報告していました。
コマンドラインの Coverage Studio 2.2026.3 — 2 つのエンジンが測定したファイルが再び 1 つのファイルに
2026-10-04
修正
- レポートの相対パスは、そのレポートが書かれた場所を基準にします。 llvm-cov はファイルの完全なパスを書き、gcovr はレポートが置かれているビルドフォルダーからの相対パスを書きます。1 つのツリーの両方のレポートを与えると、
summary は両者に共通するすべてのファイルを 2 回— それぞれのエンジンの数値で 1 回ずつ— 列挙し、両方を合計に加えていました。相対パスには解決の基準となるルートがなく、たまたまシェルがいたフォルダーを基準に解決されていたからです。5,258 行のツリーが 5,836 行として報告され、その超過分は 1 つもファイルを含まないパスの下のファイルに属していました。各レポートは、両エディションがすでにそうしているように、コマンドが実行されるフォルダーまで、自身のディレクトリとその上位ディレクトリを基準に解決されます。これにより、ビルドディレクトリごとの pathRemap ルールなしで、両者が 1 つのファイル集合として出会います。 - バイトオーダーマークで始まる設定ファイルも拒否されていました。 Windows のエディターはテキストの前にそれを書き込むことがあります。もう JSON の一部とは見なされません。
- 早く読み取りを止めた相手へのパイプ出力は静かに終わります。
summary を head や PowerShell の Select-Object -First にパイプすると、未処理の EPIPE とスタックトレースで異常終了していました。読み取り側がパイプを閉じるのはその側の選択であり、コマンドの失敗ではありません。到達していた終了コードで終了します。
コマンドラインの Coverage Studio 2.2026.1 — パターンを含む設定ファイルが読み込まれます
2026-10-04
修正
- パターンを含む設定ファイルが拒否されていました。
fuciniCoverage.coverageFile.paths のあるパスに **/*.lcov.info があり、次のパスに **/coverage.json があると、どのコマンドも is not JSON で終了していました。両者の間にある部分がコメントと見なされていたためです。現在は、値の後のコメントや閉じ括弧の前のカンマも含め、エディターと同じようにファイルを読み込みます。
コマンドラインの Coverage Studio 2.2026.0 — fucini-coverage、最初のリリース
2026-10-04
追加
- コマンドラインのリーダー、無料。
npm install -g fucini-coverage — 2 つのエディションと同じリーダーを、エディターのない場所に。1 つのパッケージ、1 つの振る舞いで、Windows、Linux、WSL、macOS、Node 20 以降。
check、ゲート。行、分岐、関数、MC/DC、条件、リージョン、ミューテーション、加重スコアのしきい値を設定またはコマンドラインから取り、下回れば終了コード 1。--new-code 80 --base-ref origin/main はブランチが変更した行を、ツールが実行する git diff から判定し、--require-reasons は理由のない除外マーカーを不合格にします。
summary、export、report、badge、compare。合計とすべてのファイル。実行をファイル単位または関数単位の CSV、Markdown、LCOV、Cobertura、SARIF、除外一覧、バッジ、または Fucini の JSON として。複数ページの HTML レポート。設定のスケールで色付けされたバッジ。この実行とベースラインとの比較、リグレッションを先頭に、プル リクエストのチェック用の --fail-on-regression 付き。
mcp、AI エージェント向け。エディションの 6 つのツールを、実行の上で 127.0.0.1 にトークン付きで提供し、クライアントの mcp.json 用のエントリを表示します。
- Visual Studio 版の設定ファイル。コードの横の
fucini-coverage.json に、VS Code 設定の fuciniCoverage.* キーで。その下位に .vscode/settings.json。レポートはファイル、フォルダー、パターンで指定でき、.gz は展開され、すべてのコマンドが自分自身を説明します:fucini-coverage help <command>。
Coverage Studio for VS Code 2.2026.2 — トライアルはライセンスサーバーの応答とともに始まります
2026-10-04
変更
- 新しいインストールのトライアルは、ライセンスサーバーからの最初の応答とともに始まります。 拡張機能が fucini.software に一度到達するまでは Community ティアで動作し、その理由を表示します。すでにトライアル中、またはライセンスをお持ちのインストールには何の変化もありません。
- 開発コンテナーや Codespace ではトライアルは始まりません。 そこでは拡張機能は Community ティアで起動し、サブスクリプションコード、キー、または 7 日間パスですべてが利用できます。
- 使用量台帳は 2 つ目のハッシュでもマシンを識別します。 これはオペレーティングシステム自身の識別子のハッシュで、送信されるのはハッシュだけです。プライバシーポリシーをご覧ください。
Coverage Studio for Visual Studio 2.2026.1 — 小さな修正
2026-10-04
修正
- 小さな修正。 メンテナンスリリースです。内部の小さな修正のみで、表示される内容や使い方は変わりません。
Coverage Studio for VS Code 2.2026.1 — 小さな修正
2026-10-04
修正
- 小さな修正。 メンテナンスリリースです。内部の小さな修正のみで、表示される内容や使い方は変わりません。
Coverage Studio for Visual Studio 2.2026.0 — 画面上のカバレッジを AI エージェントに
2026-10-04
追加
- 画面上のカバレッジを AI エージェントに。テストを書くエージェントは、テストを実行してパーセンテージを読むことはできても、Visual Studio が知っていることを尋ねることはできませんでした。6 つのツールが、エージェントが行動に移せる言葉でそれに答えます:
coverage_summary、coverage_gaps、tests_for_line、patch_coverage、coverage_delta、test_run_command。MCP を話すエージェントは、fuciniCoverage.mcp.enabled がオンのときに Visual Studio が実行するサーバーを通じて利用します — 既定ではオフ、127.0.0.1 のみ、自分専用のトークンで守られ、Web ページからは閉ざされています。Copy MCP Server Configuration は、クライアント用のエントリをクリップボードに入れます。 - 画面と同じ数値。ツールは、読み込まれている実行から答えます — 同じ除外、同じリマッピングで — そのため、ある関数のギャップをカバーするよう指示されたエージェントと、余白を見ているレビュアーは、同じ行について話していることになります。
変更
- キーのプランは、VS Code で決めることを Visual Studio でも決めます。ある機能 — MC/DC、HTML レポート、行を実行したテストの名前 — を含まないプランは、VS Code ではその機能を外していましたが、こちらでは外していませんでした。両方のエディションが同じ表を読むようになりました:プランに含まれない機能は提供されず、そのコマンドがその旨を伝えます。
- ライセンスサーバーが求める最低バージョンが、こちらでも守られます。2.2026.0 以降は両方のエディションが同じバージョンを持つため、その最低バージョンより古いビルドは、VS Code エディションと同じように更新を求めます。
Coverage Studio for VS Code 2.2026.0 — 画面上のカバレッジを AI エージェントに
2026-10-04
追加
- 画面上のカバレッジを AI エージェントに。テストを書くエージェントは、テストを実行してパーセンテージを読むことはできても、エディターが知っていることを尋ねることはできませんでした。6 つのツールが、エージェントが行動に移せる言葉でそれに答えます:
coverage_summary、coverage_gaps、tests_for_line、patch_coverage、coverage_delta、test_run_command。VS Code 自身のエージェントはこれらを言語モデルツールとして持っていて、設定するものは何もありません。MCP を話すそれ以外のエージェントは、fuciniCoverage.mcp.enabled がオンのときに拡張機能が実行するサーバーを通じて利用します — 既定ではオフ、127.0.0.1 のみ、自分専用のトークンで守られ、Web ページからは閉ざされています。Copy MCP Server Configuration は、クライアント用のエントリをクリップボードに入れます。 - 画面と同じ数値。ツールは、読み込まれている実行から答えます — 同じ除外、同じリマッピングで — そのため、ある関数のギャップをカバーするよう指示されたエージェントと、余白を見ているレビュアーは、同じ行について話していることになります。
Visual Studio 版 Coverage Studio 1.2026.22 — 2 つのエンジンが測定したファイルは 1 つのファイルです
2026-10-04
修正
- 2 つのエンジンが測定したファイルは 1 つのファイルです。 llvm-cov はファイルの完全なパスを書き、gcovr はレポートが置かれているビルドフォルダーからの相対パスを書きます。相対パスはレポート自身のディレクトリとその上位ディレクトリに基準付けられますが、その前にリゾルバーが「そのパスはそのままで存在するか」を尋ねており、この問いに答えるのは Visual Studio 自身が起動されたフォルダーです。そのフォルダーにファイルがあると、パスは相対のままになりました。ファイルは 2 つの名前を持ち、Coverage ウィンドウに 2 回並び、合計に 2 回数えられます。5,258 行のツリーが 5,836 行として読まれました。自分自身の場所を示さないパスは、もはやまったく尋ねられません。レポートが書かれた場所に基準付けられ、行がそれを示します。
VS Code 版 Coverage Studio 1.2026.23 — 2 つのエンジンが測定したファイルは 1 つのファイルになり、選んだ余白モードは設定ファイルに書き込まれません
2026-10-04
修正
- 2 つのエンジンが測定したファイルは 1 つのファイルです。 llvm-cov はファイルの完全なパスを書き、gcovr はレポートが置かれているビルドフォルダーからの相対パスを書きます。相対パスはレポート自身のディレクトリとその上位ディレクトリに基準付けられますが、その前にリゾルバーが「そのパスはそのままで存在するか」を尋ねており、この問いに答えるのは拡張機能ホストが起動されたフォルダー、つまり
code . の後ではプロジェクトのルートです。そのときパスは相対のままになりました。ファイルは 2 つの名前を持ち、Coverage ビューに 2 回並び、合計に 2 回数えられます。5,258 行のツリーが 5,836 行として読まれました。自分自身の場所を示さないパスは、もはやまったく尋ねられません。レポートが書かれた場所に基準付けられ、行がそれを示します。 - 選んだ余白モードはセッションのあいだ保たれ、設定は書いたままに残ります。 ステータスバー、選択メニュー、Toggle Coverage Painting でモードを選ぶと、それが
settings.json に書き込まれていました。多くのプロジェクトでバージョン管理下にあるファイルを、1 分に 2 回は押されるようなボタンが書き換えていたことになります。選択はいまセッションのあいだだけ生き、設定に自分で書いたモードはウィンドウを開いたときに引き続き優先されます。
Coverage Studio for Visual Studio 1.2026.21 — テストは気づくか? キャレット位置でミューテーション実行
2026-10-03
追加
- Run Mutation Tests Here. カバレッジは行が実行されたことを示し、ミューテーションツールは、その行が間違っていたらテストが気づくかどうかを示します。キャレットがある関数 — または選択した行、あるいはファイル — が、フォルダーのランナーに変異させる対象として渡され、そのレポートは画面上のカバレッジの横に読み込まれます:C# には Stryker.NET、JavaScript と TypeScript には StrykerJS、Java には Maven を使った PIT です。プロジェクト全体のミューテーション実行は 1 時間かかりますが、関数 1 つなら 1 分です。
Coverage Studio for VS Code 1.2026.22 — テストは気づくか? キャレット位置でミューテーション実行
2026-10-03
追加
- Run Mutation Tests Here. カバレッジは行が実行されたことを示し、ミューテーションツールは、その行が間違っていたらテストが気づくかどうかを示します。キャレットがある関数 — または選択した行、あるいはファイル — が、フォルダーのランナーに変異させる対象として渡され、そのレポートは画面上のカバレッジの横に読み込まれます:C# には Stryker.NET、JavaScript と TypeScript には StrykerJS、Java には Maven を使った PIT です。プロジェクト全体のミューテーション実行は 1 時間かかりますが、関数 1 つなら 1 分です。
Coverage Studio for Visual Studio 1.2026.20 — アプリそのものをカバレッジ付きで
2026-10-03
追加
- Run App with Coverage… は、テストが行うことだけでなく、人が到達するところを計測します。フォルダーの .NET アプリが Microsoft の
dotnet-coverage のもとで、専用のコンソールで起動され、閉じられるまで動きます。その間に通った箇所は、ほかの実行と同じように読み込まれ、カバレッジセッションではテストが実行したものに加算されます。dotnet tool install --global dotnet-coverage が必要です。
Coverage Studio for VS Code 1.2026.21 — アプリそのものをカバレッジ付きで
2026-10-03
追加
- Run App with Coverage… は、テストが行うことだけでなく、人が到達するところを計測します。フォルダーの .NET アプリが Microsoft の
dotnet-coverage のもとで、専用のコンソールで起動され、閉じられるまで動きます。その間に通った箇所は、ほかの実行と同じように読み込まれ、カバレッジセッションではテストが実行したものに加算されます。dotnet tool install --global dotnet-coverage が必要です。
Coverage Studio for Visual Studio 1.2026.19 — GitHub と GitLab の zip アーティファクト
2026-10-03
追加
- zip アーティファクトからの CI ベースライン。GitHub と GitLab は、アーティファクトをアーカイブとして公開します。
baseline.report がそれを指定していれば — URL でも、ディスク上の zip でも — 開かれて、その中のレポートが保持されます:# の後に指定されたメンバー (ci/artifact.zip#coverage/lcov.info)、それがなければアーカイブ内の唯一のファイル、それもなければレポートらしく見える唯一のファイルです。
Coverage Studio for VS Code 1.2026.20 — GitHub と GitLab の zip アーティファクト
2026-10-03
追加
- GitHub と GitLab の zip アーティファクト。CI はアーティファクトを公開し、アーティファクトはアーカイブです。取得した zip は開かれ、その中のレポートが保持されるようになりました — URL の
# の後に指定されたメンバー (…/zip#coverage/lcov.info)、それがなければアーカイブ内の唯一のファイル、それもなければレポートらしく見える唯一のファイルです。coverageFile.paths の URL、baseline.report、そしてディスク上の zip であるベースラインが対象です。
修正
- Cobertura ベースラインのファイルが、レポート自身の
<source> の下で見つかっていませんでした。合計が動いているその横で、比較は 0 file(s) moved と表示していました。読み込まれるレポートと同様に、レポートが指定するルートが使われるようになりました。
Coverage Studio for Visual Studio 1.2026.18 — 作成者別・日付別の新規コード
2026-10-03
追加
- 作成者別・日付別の新規コード。新規コードとは、git の ref に対して変更された行でした。ref では答えられないことを、2 つの設定が尋ねます:
fuciniCoverage.gitDiff.author — ある 1 人が書いた行 — と fuciniCoverage.gitDiff.since — ある日以降に書かれた行 — です。どちらも git blame から読み取られ、差分カバレッジと新規コードのゲートに適用されます。
Coverage Studio for VS Code 1.2026.19 — 作成者別・日付別の新規コード
2026-10-03
追加
- 作成者別・日付別の新規コード。新規コードとは、git の ref に対して変更された行でした。ref では答えられないことを、2 つの設定が尋ねます:
fuciniCoverage.gitDiff.author — ある 1 人が書いた行 — と fuciniCoverage.gitDiff.since — ある日以降に書かれた行 — です。どちらも git blame から読み取られ、差分カバレッジと新規コードのゲートに適用されます。
Coverage Studio for Visual Studio 1.2026.17 — Go と Rust でも 1 つのテストをカバレッジ付きで
2026-10-02
追加
- Run This Test with Coverage が Go と Rust を読みます。Go のファイルでは、キャレット位置の
func TestXxx が、そのパッケージの中で、正確な名前で単独で実行されます — go test ./pkg/calc -run "^TestTotal$"。Rust のファイルでは、#[test] 関数がクレート内のパスで --exact 付きで実行されます。mod の中ではそのモジュールのテストが、tests/ 以下の結合テストはそれ自身のバイナリで実行されます。
Coverage Studio for VS Code 1.2026.18 — Go と Rust でも 1 つのテストをカバレッジ付きで
2026-10-02
追加
- Run This Test with Coverage が Go と Rust を読みます。Go のファイルでは、キャレット位置の
func TestXxx が、そのパッケージの中で、正確な名前で単独で実行されます — go test ./pkg/calc -run "^TestTotal$"。Rust のファイルでは、#[test] 関数がクレート内のパスで --exact 付きで実行されます。mod の中ではそのモジュールのテストが、tests/ 以下の結合テストはそれ自身のバイナリで実行されます。
Coverage Studio for Visual Studio 1.2026.16 — GCC 14 の条件カバレッジを行ごとに
2026-10-02
追加
- GCC 14 の条件カバレッジを行ごとに。
-fcondition-coverage は、ファイルごとに 2 つのカウントとして読まれていました。現在は各条件がその行にマークされ、ホバーに名前が出ます — 条件 1 は一度も真にならず、条件 0 はどちらにもならず — gcov の JSON からも、そのテキスト出力からも読み取ります。threshold.conditions がそのゲートになり、Copy Coverage Summary には Conditions 列があり、badge.metric は conditions を受け付け、検索は conditions < 80 を受け付けます。
修正
- 関数の分岐の数値に、条件の結果まで数えられていました。ツールが 6 のうち 4 と言っているところで、
branches 8/12 でした。ファイルの数値や実行の数値と同様に、そこでも条件は除かれます。
Coverage Studio for VS Code 1.2026.17 — GCC 14 の条件カバレッジを行ごとに
2026-10-02
追加
- GCC 14 の条件カバレッジを行ごとに。
-fcondition-coverage は、ファイルごとに 2 つのカウントとして読まれていました。現在は各条件がその行にマークされ、ホバーに名前が出ます — 条件 1 は一度も真にならず、条件 0 はどちらにもならず — gcov の JSON からも、そのテキスト出力からも読み取ります。threshold.conditions がそのゲートになり、Copy Coverage Summary には Conditions 列があり、badge.metric は conditions を受け付け、検索は conditions < 80 を受け付けます。
修正
- 関数の分岐の数値に、条件の結果まで数えられていました。ツールが 6 のうち 4 と言っているところで、
branches 8/12 でした。ファイルの数値や実行の数値と同様に、そこでも条件は除かれます。
Coverage Studio for Visual Studio 1.2026.15 — Coverage ビューがエディターに追従
2026-10-02
追加
- Coverage ビューがエディターに追従します。見ているファイルがツリーで強調表示され、その上のフォルダーが開かれ、その行が見える位置までスクロールされます。
fuciniCoverage.coverageView.followActiveEditor でオフにできます。
Coverage Studio for VS Code 1.2026.16 — Coverage ビューがエディターに追従
2026-10-02
追加
- Coverage ビューがエディターに追従します。見ているファイルがツリーで強調表示され、その上のフォルダーが開かれ、その行が見える位置までスクロールされます。
fuciniCoverage.coverageView.followActiveEditor でオフにできます。
Coverage Studio for Visual Studio 1.2026.14 — 分岐だけの除外マーカー、そして .NET レポートの分岐カバレッジ
2026-10-02
追加
- 分岐だけの除外マーカーと gcovr の除外マーカー。
LCOV_EXCL_BR_LINE と LCOV_EXCL_BR_START … LCOV_EXCL_BR_STOP は、その行の分岐をカウントから外し、行は残します。LCOV_EXCL_EXCEPTION_BR_LINE は、例外が到達する分岐先だけを外します。どのマーカーも gcovr のプレフィックスで書いたものも読まれます:GCOVR_EXCL_LINE、GCOVR_EXCL_START、GCOV_EXCL_BR_LINE など。
修正
- .NET のレポートに分岐カバレッジが表示されていませんでした。Coverlet と
dotnet-coverage は Cobertura の行の branch 属性を True と書きますが、読まれていたのは小文字の true だけでした — そのため、そのようなレポートの判定はすべて捨てられていました。現在はどちらの表記も読みます。数値が動きます:.NET プロジェクトの分岐カバレッジがこれまでなかったところに現れ、それに伴ってスコアも変わります。 - 複数のツリーから結合された Cobertura レポートで、最初のツリーのファイルしか見つかっていませんでした。そのようなレポートは、ツリーごとに 1 つの
<source> を挙げます。現在は、レポートの順にそれぞれが試されます。
Coverage Studio for VS Code 1.2026.15 — 分岐だけの除外マーカー、そして .NET レポートの分岐カバレッジ
2026-10-02
追加
- 分岐だけの除外マーカーと gcovr の除外マーカー。
LCOV_EXCL_BR_LINE と LCOV_EXCL_BR_START … LCOV_EXCL_BR_STOP は、その行の分岐をカウントから外し、行は残します。LCOV_EXCL_EXCEPTION_BR_LINE は、例外が到達する分岐先だけを外します。どのマーカーも gcovr のプレフィックスで書いたものも読まれます:GCOVR_EXCL_LINE、GCOVR_EXCL_START、GCOV_EXCL_BR_LINE など。
修正
- .NET のレポートに分岐カバレッジが表示されていませんでした。Coverlet と
dotnet-coverage は Cobertura の行の branch 属性を True と書きますが、読まれていたのは小文字の true だけでした — そのため、そのようなレポートの判定はすべて捨てられていました。現在はどちらの表記も読みます。数値が動きます:.NET プロジェクトの分岐カバレッジがこれまでなかったところに現れ、それに伴ってスコアも変わります。 - 複数のツリーから結合された Cobertura レポートで、最初のツリーのファイルしか見つかっていませんでした。そのようなレポートは、ツリーごとに 1 つの
<source> を挙げます。現在は、レポートの順にそれぞれが試されます。
Coverage Studio for Visual Studio 1.2026.13 — すべての行を実行できる最少のテスト
2026-10-01
追加
- Show Minimal Test Set… は、スイートが実行するすべての行を実行できる最少のテストを見つけ、その下に、独自の行を 1 つも加えないテストを一覧にします。コミット前の手早い実行のため、そしてスイートを整理する人のためのものです — ただし、行の上で冗長であることは、テストが検証する内容の上で冗長であることとは違う、という注意書きが付きます。
Coverage Studio for VS Code 1.2026.14 — すべての行を実行できる最少のテスト
2026-10-01
追加
- Show Minimal Test Set… は、スイートが実行するすべての行を実行できる最少のテストを見つけ、その下に、独自の行を 1 つも加えないテストを一覧にします。コミット前の手早い実行のため、そしてスイートを整理する人のためのものです — ただし、行の上で冗長であることは、テストが検証する内容の上で冗長であることとは違う、という注意書きが付きます。
Coverage Studio for Visual Studio 1.2026.12 — 理由を示す除外
2026-10-01
追加
- 理由を添えた除外。コードの中でカウントから外されたコードは、その理由を書けます —
// LCOV_EXCL_LINE: defensive, unreachable by construction、[ExcludeFromCodeCoverage(Justification = "…")] — そして、その理由は報告されます。Export Coverage Report… は、除外とその理由を Markdown と CSV で一覧にします。fuciniCoverage.exclusions.requireReason を使うと、理由のない除外はその行の警告になり、Check Coverage Thresholds を不合格にします。
Coverage Studio for VS Code 1.2026.13 — 理由を示す除外
2026-10-01
追加
- 理由を添えた除外。コードの中でカウントから外されたコードは、その理由を書けます —
// LCOV_EXCL_LINE: defensive, unreachable by construction、[ExcludeFromCodeCoverage(Justification = "…")] — そして、その理由は報告されます。Export Coverage Report… は、除外とその理由を Markdown と CSV で一覧にします。fuciniCoverage.exclusions.requireReason を使うと、理由のない除外はその行の警告になり、Check Coverage Thresholds を不合格にします。
Coverage Studio for Visual Studio 1.2026.11 — 新規コードへのゲート、そして編集なしに動いたカバレッジ
2026-10-01
追加
- 実行全体へのゲートと並ぶ、新規コードへのゲート。
fuciniCoverage.threshold.newCode は、gitDiff.baseRef に対して変更された行の最低行カバレッジで、パーセントで指定します。Check Coverage Thresholds はこれを独立した一文で不合格とし — New code 72.00% < 80% (18 of 25 line(s) changed against origin/main ran) — 実行全体は画面に残ります。 - Show Indirect Coverage Changes… は、誰も編集していないのにカバレッジが動いた行を一覧にします — テストがなくなったため、あるいは上流の分岐が早期リターンするようになったために、実行されなくなったコードです。
baseline.report が CI ベースラインを指定していればそれと、そうでなければ前回の実行と比較します。
Coverage Studio for VS Code 1.2026.12 — 新規コードへのゲート、そして編集なしに動いたカバレッジ
2026-10-01
追加
- 実行全体へのゲートと並ぶ、新規コードへのゲート。
fuciniCoverage.threshold.newCode は、gitDiff.baseRef に対して変更された行の最低行カバレッジで、パーセントで指定します。Check Coverage Thresholds はこれを独立した一文で不合格とし — New code 72.00% < 80% (18 of 25 line(s) changed against origin/main ran) — 実行全体は画面に残ります。 - Show Indirect Coverage Changes… は、誰も編集していないのにカバレッジが動いた行を一覧にします — テストがなくなったため、あるいは上流の分岐が早期リターンするようになったために、実行されなくなったコードです。
baseline.report が CI ベースラインを指定していればそれと、そうでなければ前回の実行と比較します。
Coverage Studio for Visual Studio 1.2026.10 — 変更が触れるテストだけを実行
2026-10-01
追加
- Run Tests Affected by My Changes… は、作業ツリーが
fuciniCoverage.testImpact.baseRef (既定は HEAD) に対して変更した行を実行したテストを、変更を最も多く実行したものから順に一覧にします。テストを選ぶとそれが開きます。レポートがテストごとの実行 (testRun.perTest) によるものであれば、最初の項目がそれらのテストだけを実行します。
修正
testRun.skipWhenTestsFail が、実行の後も守られます。失敗した実行が書き出したレポートがディスクに残り、ウォッチャーが直後にそれを読み込んでいました。現在は削除されます。- TRX ロガーが作るカバレッジレポートのコピーが、トレースファイルと見なされることはありません。
Coverage Studio for VS Code 1.2026.11 — 変更が触れるテストだけを実行
2026-10-01
追加
- Run Tests Affected by My Changes… は、作業ツリーが
fuciniCoverage.testImpact.baseRef (既定は HEAD) に対して変更した行を実行したテストを、変更を最も多く実行したものから順に一覧にします。テストを選ぶとそれが開きます。レポートがテストごとの実行 (testRun.perTest) によるものであれば、最初の項目がそれらのテストだけを実行します。
修正
testRun.skipWhenTestsFail が、実行の後も守られます。失敗した実行が書き出したレポートがディスクに残り、ウォッチャーが直後にそれを読み込んでいました。現在は削除されます。- TRX ロガーが作るカバレッジレポートのコピーが、トレースファイルと見なされることはありません。
Coverage Studio for Visual Studio 1.2026.9 — マークでわかるテストの成功と失敗、そして Visual Studio 自身のコードカバレッジファイル
2026-09-30
追加
- マークでわかる成功と失敗。失敗したテストが実行した行は先頭に赤いバーが付き、ホバーに失敗したテストの名前が出ます。Show Tests That Ran This Line は、どのテストが失敗したかを示します。必要なのは、どのテストが行を実行したかを記録しているレポートと、ランナーの結果ファイル — TRX または JUnit XML — で、結果ファイルはレポートのフォルダーに置くか、
fuciniCoverage.testResults.paths で指定します。Run Tests with Coverage は、dotnet test に結果ファイルを要求するようになりました。 - Visual Studio 自身のコードカバレッジを読み込みます。Visual Studio の Analyze Code Coverage が書き出す
.coverage ファイルは、dotnet-coverage で変換され、自動で読み込まれます。Coverage Studio は組み込みのコレクターと競合するのではなく、その上に成り立ちます。
Coverage Studio for VS Code 1.2026.10 — マークでわかるテストの成功と失敗
2026-09-30
追加
- マークでわかる成功と失敗。失敗したテストが実行した行は先頭に赤いバーが付き、ホバーに失敗したテストの名前が出ます。Show Tests That Ran This Line は、どのテストが失敗したかを示します。必要なのは、どのテストが行を実行したかを記録しているレポートと、ランナーの結果ファイル — TRX または JUnit XML — で、結果ファイルはレポートのフォルダーに置くか、
fuciniCoverage.testResults.paths で指定します。Run Tests with Coverage は、dotnet test に結果ファイルを要求するようになりました。
Coverage Studio for Visual Studio 1.2026.8 — 再読み込みしても、検索もセッションも前回の実行もそのまま
2026-09-30
修正
- カバレッジが再読み込みされても、検索ボックスのクエリとフォーカスはそのままです。再読み込みのたびに空になっていて、クエリを入力している最中であることもよくありました。
< 80% のようなクエリでは、それに一致するリスクホットスポットも残ります。 - カバレッジセッションが同じ実行を 2 回数えることはなくなりました。変更のないレポートを再読み込みするたびにそれらがもう一度加算され、すべての実行回数が 2 倍になっていました。セッションは、レポートの各セットを 1 回だけ保持するようになりました。
- CI ベースラインが読み込みを待たせることはなくなりました。まず読み込んだ結果が描画され、比較はその後に続きます。ベースラインは 1 回だけ準備され、そのレポートと設定が変わらない間は保持されます。URL に到達できないときは、以前に取得したコピーが使われます。
- 「前回の実行以降」が、変更のないレポートを再読み込みしても保たれます。設定の変更や更新によって、画面上の実行がそれ自身の前回の実行になり、その前の実行以降の変化がすべて消えていました。このような読み直しは、履歴にも残らなくなりました。
- 読み込みは一度に 1 つ。同時に要求された 2 つの再読み込みは並行して実行され、遅い方が勝っていました。読み込み中に要求された再読み込みは、その後の 1 回の読み込みにまとめられるようになりました。
- HTTP 経由の CI ベースラインは、VS Code と同じように取得されます。クライアントは 1 つで、サーバーに到達できないときのために最後のコピーを保持し、
remote.headers はそれが書かれた対象のアドレスにだけ送られます — 平文の HTTP で送られることは決してありません。 - 処理に失敗したコマンドは、そのことを伝えます。コマンドやタイマーでの失敗は握りつぶされていましたが、出力ウィンドウに 1 行として出るようになりました。
- UI スレッドでの処理を削減。ファイルウォッチャーはバックグラウンドで作成され、エラー一覧の項目は読み込みごとに 1 回だけ算出され、ログは 1 行ずつではなくまとめて書き込まれます。
- Visual Studio のウィンドウが 2 つあっても、実行履歴が壊れなくなりました。履歴のインデックスは、両方が共有するロックのもとで一度に置き換えられ、失われたときは実行から作り直されます。
- Run Native Project with Coverage はプロジェクト自身のプラットフォームをビルドし、
llvm-cov と llvm-profdata をコンパイラーの LLVM から一組で取得します。 - Coverage ウィンドウの警告、エラー、成功の色が、ライトテーマにも従います — ダークテーマと同じように。
- 未保存の変更があるまま開いている設定ファイルは、上書きされません。設定ページが、先に保存するよう伝えます。
変更
- 選んだカバレッジファイルと、テスト実行が書き出すレポートは、自動的に記憶されます —
.vscode/settings.json に書き込まれることはなくなりました。このファイルはコミットされることが多いため、テスト実行が、誰も頼んでいない変更をリポジトリに残していました。すでに coverageFile.paths にあるパスは、引き続き機能します。
Coverage Studio for VS Code 1.2026.9 — 再読み込みしても、検索もセッションも前回の実行もそのまま
2026-09-30
修正
- カバレッジが再読み込みされても、検索ボックスのクエリとフォーカスはそのままです。再読み込みのたびに空になっていて、クエリを入力している最中であることもよくありました。
< 80% のようなクエリでは、それに一致するリスクホットスポットも残ります。 - カバレッジセッションが同じ実行を 2 回数えることはなくなりました。変更のないレポートを再読み込みするたびにそれらがもう一度加算され、すべての実行回数が 2 倍になっていました。セッションは、レポートの各セットを 1 回だけ保持するようになりました。
- CI ベースラインが読み込みを待たせることはなくなりました。まず読み込んだ結果が描画され、比較はその後に続きます。ベースラインは 1 回だけ準備され、そのレポートと設定が変わらない間は保持されます。URL に到達できないときは、以前に取得したコピーが使われます。
- レポートファイルの変更の確認は、一度に 1 回ずつ実行されます。遅いネットワークドライブでは 2 回の確認が同じ変更を検出し、カバレッジが 2 回読み込まれていました。
- 「前回の実行以降」が、変更のないレポートを再読み込みしても保たれます。設定の変更や更新によって、画面上の実行がそれ自身の前回の実行になり、その前の実行以降の変化がすべて消えていました。このような読み直しは、履歴にも残らなくなりました。
変更
- 選んだカバレッジファイルと、テスト実行が書き出すレポートは、自動的に記憶されます —
.vscode/settings.json に書き込まれることはなくなりました。このファイルはコミットされることが多いため、テスト実行が、誰も頼んでいない変更をリポジトリに残していました。すでに coverageFile.paths にあるパスは、引き続き機能します。
Coverage Studio for Visual Studio 1.2026.7 — 名指したものだけを正確に実行するテスト実行
2026-09-30
修正
- テストプロジェクトが 2 つ以上ある .NET ソリューションで、1 つを除くすべてのプロジェクトのカバレッジが失われることはなくなりました。
dotnet test はプロジェクトごとに 1 つのレポートを書き出しますが、そのすべてが同じ coverage/coverage.cobertura.xml に移されていたため、最後の 1 つしか読み込まれていませんでした。このようなフォルダーでは dotnet test をテストプロジェクトごとに 1 回実行するようになり、各レポートは coverage/<Project>/ に入り、1 つのプロジェクトの実行はそのプロジェクトのレポートだけを置き換えます。 - 複数のファイルを一度に保存すると、保存したすべてのファイルのテストが実行されます。
testRun.onSave では最後のファイルのテストしか実行されていませんでした。実行中に行われた保存は保持され、その実行の後にまとめて実行されます。 - Run This Test with Coverage とテストごとの実行は、名指したものだけを正確に実行します。.NET のフィルターは部分文字列で一致させていたため、
Total は TotalTax も実行していました。テストは正確な名前で、クラスは名前にドットを続けた形で実行されるようになり、入れ子のクラスのテストも見つかります (Outer+Inner)。 - タイトルに
(、+、$ を含む jest や vitest のテストが実行されます。タイトルは正規表現を読む -t に渡されていたため、そのようなテストは何にも一致せず、何も実行されませんでした。 - Run This Test with Coverage が VB と F# のテストファイルを読みます。
Public Sub の上の <Fact> や、let や member の上の [<Fact>] は、これまで認識されていませんでした。 - テスト実行をキャンセルすると、それが開始したすべてのプロセスが終了します。終了していたのはシェルだけで、その裏で
dotnet test が動き続けていました。Visual Studio を閉じたときも実行はキャンセルされます。 - 保存後の実行中に入力しても、マークがずれなくなりました。マークは、実行が計測したテキストに固定されます。
- ネットワーク共有上のソリューションは、その場所でテストを実行します。コマンドシェルは
\\server\share のパスをフォルダーとして受け付けないため、実行は C:\Windows で始まっていました。
Coverage Studio for VS Code 1.2026.8 — 名指したものだけを正確に実行するテスト実行
2026-09-30
修正
- テストプロジェクトが 2 つ以上ある .NET ソリューションで、1 つを除くすべてのプロジェクトのカバレッジが失われることはなくなりました。
dotnet test はプロジェクトごとに 1 つのレポートを書き出しますが、そのすべてが同じ coverage/coverage.cobertura.xml に移されていたため、最後の 1 つしか読み込まれていませんでした。このようなフォルダーでは dotnet test をテストプロジェクトごとに 1 回実行するようになり、各レポートは coverage/<Project>/ に入り、1 つのプロジェクトの実行はそのプロジェクトのレポートだけを置き換えます。 - 複数のファイルを一度に保存すると、保存したすべてのファイルのテストが実行されます。
testRun.onSave では最後のファイルのテストしか実行されていませんでした。実行中に行われた保存は保持され、その実行の後にまとめて実行されます。 - Run This Test with Coverage とテストごとの実行は、名指したものだけを正確に実行します。.NET のフィルターは部分文字列で一致させていたため、
Total は TotalTax も実行していました。テストは正確な名前で、クラスは名前にドットを続けた形で実行されるようになり、入れ子のクラスのテストも見つかります (Outer+Inner)。 - タイトルに
(、+、$ を含む jest や vitest のテストが実行されます。タイトルは正規表現を読む -t に渡されていたため、そのようなテストは何にも一致せず、何も実行されませんでした。 - 引用符を含むテストのタイトルが、欠けることなくターミナルに届きます。引用符の中に
\" を含むコマンドは、最初の引用符で壊れていました。 - Run This Test with Coverage が VB と F# のテストファイルを読みます。
Public Sub の上の <Fact> や、let や member の上の [<Fact>] は、これまで認識されていませんでした。 - プロセスを開始せずに終わるテストタスクがあっても、Run Tests with Coverage が永遠に待ち続けることはなくなりました。コマンドは終了し、実行が何も書き出さなかったことを伝えます。
Coverage Studio for Visual Studio 1.2026.6 — 行を実行したテスト、保存のたびのカバレッジ、CI ベースライン
2026-09-29
追加
- この行を実行したテスト。レポートがそれを記録している場合 —
--show-contexts 付きの coverage.py、OpenCover の追跡メソッド、テストごとに書かれた lcov トレースファイル — 関数の CodeLens が何件のテストがそれを実行したかを示し、Show Tests That Ran This Line が実行回数の多い順に一覧にして、選んだテストを開きます。dotnet test の実行では、testRun.perTest がテストをクラスごとに実行するので、各レポートがどのクラスによって書かれたかがわかります。
- 保存のたびにカバレッジ。
testRun.onSave を有効にすると、ソースを保存したときにそれをカバーするテストがカバレッジ付きで実行され、ガターが追従します。.NET ソリューションでは、保存したファイルのプロジェクトを参照するテストプロジェクトだけが実行されます。続けて何度か保存しても 1 回の実行です。
- Run This Test with Coverage. キャレットがテストメソッド、テストクラスや
describe、あるいはテストファイルにあるとき、1 つのコマンドでそれだけをカバレッジ付きで実行し — dotnet test --filter、jest/vitest -t、または pytest のノード ID — 書き出された結果を読み込みます。テストはテキストから読み取るので、言語サービスなしで C#、VB、F#、JavaScript、TypeScript、Python に対応します。
- Exclude from Coverage と 2 つの .NET フィルター。カバレッジツリーの行を右クリックするか、開いているファイルで Exclude This File from Coverage を使うと、そのファイルまたはフォルダーが
fuciniCoverage.ignore に追加され、すべての合計から外れます。ignore.namespaces は名前空間のファイルを除外し (*.Migrations)、ignore.attributes は属性の付いたクラス、メソッド、プロパティを除外します — 既定は ExcludeFromCodeCoverage で、OpenCover、dotCover、変換された lcov はこれを考慮しません。
- Exclude Selection from Coverage. 行を選択し、電球またはエディターのコンテキストメニューから実行します。.NET のクラス、メソッド、プロパティの上には
[ExcludeFromCodeCoverage] を書き — ファイルがすでに System.Diagnostics.CodeAnalysis をインポートしていれば短い形で — それ以外では言語自身のコメントで LCOV_EXCL_LINE か LCOV_EXCL_START/STOP の組を書きます。すでにあるマーカーは二重になりません。
- 名前空間、クラス、メソッド。クラス名を記録している .NET レポート — Cobertura、Coverlet、OpenCover — では、Folders / Namespaces ドロップダウンで同じ実行を名前空間、クラス、メソッド別に、同じ並べ替えとフィルターで表示できます。メソッドの行を開くとファイルのそのメソッドに移動します。
<>c や async のステートマシンなどコンパイラーが生成した型は、生成元のクラスに畳み込まれます。
- カバレッジツリーの上の検索ボックス。単語を入力すると名前やパスにそのすべてを含む行が残り、比較 —
< 80%、lines >= 90、branches = 0 — を入力すると数値が条件を満たす行が残ります。両方を入力すれば両方を満たす行です。メソッド行とリスクホットスポットも検索対象です。Escape でクリアします。
- Run Native Project with Coverage. Tools メニューからスタートアップの C++ プロジェクトを対象に実行します。ClangCL プロジェクトは clang のカバレッジ計装付きで
coverage/native/ に再ビルドされ、実行されてレポートが読み込まれます。それ以外のツールセットは、インストールされていれば OpenCppCoverage のもとで実行され、どちらもできない場合は何をインストールすべきかが一文で示されます。
- カバレッジセッションと推移。Start Coverage Session を実行すると、それ以降に読み込まれる実行はそれまでの実行に加算されます — 行、分岐、関数のいずれも、どれかの実行が通ったものはカバー済みです。これにより、単体テスト、結合テスト、アプリケーションの手動操作で合わせてどこまで届いたかがわかります。ツールバーの下には、保存された履歴の行カバレッジが実行ごとに 1 点の推移として描かれます。
- Compare Two History Runs — VS Code と同様に、保存された 2 つの実行を選ぶと、その間に変化したファイルが、どちらを先に選んでも古い方から新しい方へ一覧になります。
- Compare with CI Baseline.
baseline.report にメインブランチのビルドが公開するレポートを指定します — remote.headers で取得する URL、またはダウンロードしたファイル。以降の読み込みはすべてそれと比較され、ステータスバーのカードがこの実行の位置を示し、Compare with CI Baseline が変化したファイルを一覧にします。ベースラインは実行と同じ除外リストを通るので、合計は同じ条件で比較されます。
- コマンドの場所。新しいコマンドは Tools > Coverage Studio とエディターのコンテキストメニューにあります。Show Tests That Ran This Line は Ctrl+Shift+U, T でも呼び出せ、Exclude Selection from Coverage は電球のアクションです。
修正
- テスト実行のレポートにユーザー名とマシン名が入らなくなりました。Microsoft の Code Coverage コレクターはレポートを
<user>_<machine>_<stamp>.cobertura.xml と名付け、その名前がツリーとそのすべてのスクリーンショットに出ていました。現在は読み込む前に coverage.cobertura.xml に名前を変更します。
- 生成されたファイルが
fuciniCoverage.ignore によって除外されたと表示されていました。除外されたファイルは、除外した設定 — ignore、ignore.generated、ignore.namespaces — ごとに数えられるようになり、表示される名前が変更すべき設定になります。
- テストごとに書かれた lcov トレースファイルを、ファイルごとに 1 つのレコードとして読みます — VS Code と同様に、テストのセクションを合算します。以前は各テストのレコードが別々のファイルになっていました。
- パーサーが除いたものをログに記録します。パーサーが計装対象を何も見つけなかったファイル (
FUCINI_PARSE_030) と、レポート自身が記した欠落 (FUCINI_PARSE_031、OpenCover の MissingPdb) を、VS Code と同様にログに書きます。
- マクロだけのヘッダーがツリーに 100% で表示されなくなりました。llvm-cov と gcov はマクロの使用をそれを定義する行に計上します。除外された行上の分岐と関数は行と一緒に除かれるようになり、計測対象が何も残らないファイルは実行から外されて出力に名前が示されます (
FUCINI_EXCLUDE_001)。
- 未対応の形式として拒否されていた 5 種類のレポートを認識します。Kover の JaCoCo XML、Stryker.NET のレポート、NCover のレポート、旧形式の SimpleCov resultset、空のファイルが多い SonarQube のレポートを、先頭にある内容で見分けるようになりました。パスに
cobertura という語を含む Clover や SonarQube のレポートは、もう Cobertura として読まれません。
- 書き出したツールと一致する数値。MC/DC ビルドの分岐の値が
llvm-cov report と一致します。LCOV 2 の例外分岐 (BRDA:12,e0,1,3) が数えられます。llvm-cov の関数は定義しているファイルでのみ宣言されます。2 つのテストバイナリが挙げる Go のブロックはカウントを合算します。2 つのクラスが報告する Cobertura の判定と、2 回挙げられた JaCoCo の行は、すべての分岐を 1 回だけ保持します。
- 細かな修正。書き込み途中で途切れたトレースファイルでファイルが失われなくなりました。複数の
.gcda ファイルに対する gcov -t はそれぞれ別のファイルになり、テンプレートのインスタンスは 1 回だけ読まれ、gcov -H の 1.20k のようなカウントも保持されます。GNATcoverage のファイルがすべてカバレッジ以降に変更されたと報告されることはなくなりました。保留中の Stryker ミュータントや中断された PIT の実行はスコアを下げなくなりました。
- 設定ファイルを手で編集すると、保存したときに適用されます — VS Code が設定の変更を適用するのと同じです。
Coverage Studio for VS Code 1.2026.7 — 行を実行したテスト、保存のたびのカバレッジ、CI ベースライン
2026-09-29
追加
- この行を実行したテスト。レポートがそれを記録している場合 —
--show-contexts 付きの coverage.py、OpenCover の追跡メソッド、テストごとに書かれた lcov トレースファイル — 関数の CodeLens が何件のテストがそれを実行したかを示し、Show Tests That Ran This Line が実行回数の多い順に一覧にして、選んだテストを開きます。dotnet test の実行では、testRun.perTest がテストをクラスごとに実行するので、各レポートがどのクラスによって書かれたかがわかります。
- 保存のたびにカバレッジ。
testRun.onSave を有効にすると、ソースを保存したときにそれをカバーするテストがカバレッジ付きで実行され、ガターが追従します。.NET ソリューションでは、保存したファイルのプロジェクトを参照するテストプロジェクトだけが実行されます。続けて何度か保存しても 1 回の実行です。
- Run This Test with Coverage. キャレットがテストメソッド、テストクラスや
describe、あるいはテストファイルにあるとき、1 つのコマンドでそれだけをカバレッジ付きで実行し — dotnet test --filter、jest/vitest -t、または pytest のノード ID — 書き出された結果を読み込みます。テストはテキストから読み取るので、言語サービスなしで C#、VB、F#、JavaScript、TypeScript、Python に対応します。
- Exclude from Coverage と 2 つの .NET フィルター。カバレッジツリーの行を右クリックするか、開いているファイルで Exclude This File from Coverage を使うと、そのファイルまたはフォルダーが
fuciniCoverage.ignore に追加され、すべての合計から外れます。ignore.namespaces は名前空間のファイルを除外し (*.Migrations)、ignore.attributes は属性の付いたクラス、メソッド、プロパティを除外します — 既定は ExcludeFromCodeCoverage で、OpenCover、dotCover、変換された lcov はこれを考慮しません。
- Exclude Selection from Coverage. 行を選択し、電球またはエディターのコンテキストメニューから実行します。.NET のクラス、メソッド、プロパティの上には
[ExcludeFromCodeCoverage] を書き — ファイルがすでに System.Diagnostics.CodeAnalysis をインポートしていれば短い形で — それ以外では言語自身のコメントで LCOV_EXCL_LINE か LCOV_EXCL_START/STOP の組を書きます。すでにあるマーカーは二重になりません。
- 名前空間、クラス、メソッド。クラス名を記録している .NET レポート — Cobertura、Coverlet、OpenCover — では、Folders / Namespaces ドロップダウンで同じ実行を名前空間、クラス、メソッド別に、同じ並べ替えとフィルターで表示できます。メソッドの行を開くとファイルのそのメソッドに移動します。
<>c や async のステートマシンなどコンパイラーが生成した型は、生成元のクラスに畳み込まれます。
- カバレッジツリーの上の検索ボックス。単語を入力すると名前やパスにそのすべてを含む行が残り、比較 —
< 80%、lines >= 90、branches = 0 — を入力すると数値が条件を満たす行が残ります。両方を入力すれば両方を満たす行です。メソッド行とリスクホットスポットも検索対象です。Escape でクリアします。
- カバレッジセッションと推移。Start Coverage Session を実行すると、それ以降に読み込まれる実行はそれまでの実行に加算されます — 行、分岐、関数のいずれも、どれかの実行が通ったものはカバー済みです。これにより、単体テスト、結合テスト、アプリケーションの手動操作で合わせてどこまで届いたかがわかります。ツールバーの下には、保存された履歴の行カバレッジが実行ごとに 1 点の推移として描かれます。
- Compare with CI Baseline.
baseline.report にメインブランチのビルドが公開するレポートを指定します — remote.headers で取得する URL、またはダウンロードしたファイル。以降の読み込みはすべてそれと比較され、ステータスバーのカードがこの実行の位置を示し、Compare with CI Baseline が変化したファイルを一覧にします。ベースラインは実行と同じ除外リストを通るので、合計は同じ条件で比較されます。
修正
- テスト実行のレポートにユーザー名とマシン名が入らなくなりました。Microsoft の Code Coverage コレクターはレポートを
<user>_<machine>_<stamp>.cobertura.xml と名付け、その名前がツリーとそのすべてのスクリーンショットに出ていました。現在は読み込む前に coverage.cobertura.xml に名前を変更します。
- ターミナルが PowerShell のとき、Windows でテスト実行が失敗していました。
Code Coverage;Format=cobertura を囲む引用符が pwsh に渡る途中で失われ、; がコマンドの終わりとして読まれていました。レシピは単語ごとにターミナルへ渡され、起動するシェルに合わせて引用されるようになりました。
- 生成されたファイルが
fuciniCoverage.ignore によって除外されたと表示されていました。除外されたファイルは、除外した設定 — ignore、ignore.generated、ignore.namespaces — ごとに数えられるようになり、表示される名前が変更すべき設定になります。
- マクロだけのヘッダーがツリーに 100% で表示されなくなりました。llvm-cov と gcov はマクロの使用をそれを定義する行に計上します。除外された行上の分岐と関数は行と一緒に除かれるようになり、計測対象が何も残らないファイルは実行から外されて出力に名前が示されます (
FUCINI_EXCLUDE_001)。
- 未対応の形式として拒否されていた 5 種類のレポートを認識します。Kover の JaCoCo XML、Stryker.NET のレポート、NCover のレポート、旧形式の SimpleCov resultset、空のファイルが多い SonarQube のレポートを、先頭にある内容で見分けるようになりました。パスに
cobertura という語を含む Clover や SonarQube のレポートは、もう Cobertura として読まれません。
- 書き出したツールと一致する数値。MC/DC ビルドの分岐の値が
llvm-cov report と一致します。LCOV 2 の例外分岐 (BRDA:12,e0,1,3) が数えられます。llvm-cov の関数は定義しているファイルでのみ宣言されます。2 つのテストバイナリが挙げる Go のブロックはカウントを合算します。2 つのクラスが報告する Cobertura の判定と、2 回挙げられた JaCoCo の行は、すべての分岐を 1 回だけ保持します。
- 細かな修正。書き込み途中で途切れたトレースファイルでファイルが失われなくなりました。複数の
.gcda ファイルに対する gcov -t はそれぞれ別のファイルになり、テンプレートのインスタンスは 1 回だけ読まれ、gcov -H の 1.20k のようなカウントも保持されます。GNATcoverage のファイルがすべてカバレッジ以降に変更されたと報告されることはなくなりました。保留中の Stryker ミュータントや中断された PIT の実行はスコアを下げなくなりました。
変更
- 読み込みのたびの
FUCINI_ENCODING_001 がなくなりました。バイトオーダーマークのないレポートは、どのツールもそう書くとおり UTF-8 として読み、その旨の通知は出しません。
Coverage Studio for Visual Studio 1.2026.5 — レポートが現れる場所を監視
2026-09-28
追加
- ワイルドカードを含む相対エントリは任意の深さで検索されます。
coverageFile.paths の *.lcov.info は、基準フォルダー以下のどこにあってもそのファイルを見つけます — VS Code が以前からそう読んできたとおりです。絶対パスのエントリ — ${workspaceFolder}/build/coverage-merged/*.lcov.info、任意の深さには ** — は、これまでどおり書かれた場所そのものを探します。
- レポートが現れる場所を監視。 監視は設定が名指すフォルダーを、そこにまだレポートがあるかどうかにかかわらず対象にします:絶対パスのファイルのフォルダー、ワイルドカードより前のフォルダー — パターンがサブフォルダーに及ぶときはその配下すべて — そして相対ワイルドカードの場合は基準フォルダーです。ビルドがそこに書いたレポートは自動で読み込まれ、それらのフォルダー内の他のファイルへの書き込みは無視されます。
修正
- llvm-cov の JSON レポートが未対応の形式として拒否されていました。 形式は先頭 4096 文字から認識されますが、llvm-cov は
"type": "llvm.coverage.json.export" マーカーを最後尾に書きます。最初のファイル レコードに多数のブランチと入れ子のマクロ展開を含むエクスポートには、その先頭部分に他に認識できるものがありませんでした。このようなレポートは今後、他のどの形式にもない書き出し {"data":[{"files":[ で識別されます。
gcov --json-format も同様です。 gcov はファイルの関数を行より先に書くため、十数個の関数を持つファイルでも検査される先頭部分に行のエントリがありません。今後はドキュメント自身の gcc_version キーで識別されます。
Coverage Studio for VS Code 1.2026.6 — フルパスにワイルドカード、レポートが現れる場所を監視
2026-09-28
追加
- 絶対パスの
coverageFile.paths エントリにワイルドカード。 ${workspaceFolder}/build/coverage-merged/*.lcov.info はそのフォルダーにあるそのようなファイルをすべて読み込み、** は任意の深さを表します:最初のワイルドカードより前のフォルダーが検索され、残りはその配下のパターンです — Visual Studio エディションが以前からそのようなエントリをそう読んできたとおりです。以前は絶対パスのエントリは書かれたとおりに探されていたため、星を含むものは何にも一致せず — しかもワイルドカードであるがゆえに、何にも一致しないとも報告されませんでした。後からそこに現れたレポートは、リテラルのエントリと同じくウォッチャーまたはポーリングによって読み込まれます。何にも一致しないワイルドカードは、ビルドを待っている可能性があるため報告されません。
修正
- llvm-cov の JSON レポートが未対応の形式として拒否されていました。 形式は先頭 4096 文字から認識されますが、llvm-cov は
"type": "llvm.coverage.json.export" マーカーを最後尾に書きます。最初のファイル レコードに多数のブランチと入れ子のマクロ展開を含むエクスポートには、その先頭部分に他に認識できるものがありませんでした。このようなレポートは今後、他のどの形式にもない書き出し {"data":[{"files":[ で識別されます。
gcov --json-format も同様です。 gcov はファイルの関数を行より先に書くため、十数個の関数を持つファイルでも検査される先頭部分に行のエントリがありません。今後はドキュメント自身の gcc_version キーで識別されます。
Coverage Studio for Visual Studio 1.2026.4 — 2 つのレポートに 1 つの答え、そしてカバー済みの箇所は緑に
2026-09-26
追加
- ファイルのレポートを選ぶ、または結合する。 Coverage ウィンドウでファイルを右クリックして Choose Coverage Source... を選ぶ(読み込み済みの複数のレポートがそのファイルを計測しているときに表示されます)か、Tools > Coverage Studio > Choose Coverage Source for This File... を使います。各レポートがそれぞれの数値とともに並び、続いて Combine them — agree(すべてのレポートが実行した行だけがカバー済み:1 つのコードベース、2 つのコンパイラー)と — union(いずれかが実行した行がカバー済み:1 つのビルドの複数のテストスイート)が、ファイル、そのフォルダー、またはパターンに対して選べます。レポート間で結果が食い違う行は、余白と Annotated Source で青緑色になり、各レポートが何と言ったかが示されます。ファイルの行にはレポート名と食い違う行の数が表示され、ステータスバーと両方のカードが数値の出所を示します。
- 赤、琥珀色、そして緑。 Gutter: Coverage は、赤と琥珀色に加えて、カバー済みのすべての行を緑で塗ります — 100% のファイルは緑であるはずだと思っていた人のためのモードです。ヒートマップの 5 つの色合いは設定(
heatmap.colors、heatmap.colorsDark)で、設定ウィンドウでは色を選んでいる間にそれぞれの色がプレビューされます。
修正
- ステータスバーのファイルの数値が、そのカードの数値と同じになりました。 中身のない指標 — 判定のないファイルの MC/DC — が、項目では 100% と数えられ、それが開くカードではまったく数えられていませんでした。
- 定数だけのヘッダーが 0% や 100% と表示されなくなりました。
excludeComments がオンのとき、プリプロセッサ ディレクティブはコメントと同様にコードなしとして数えられます。
Coverage Studio for VS Code 1.2026.5 — 2 つのレポートに 1 つの答え、そしてカバー済みの箇所は緑に
2026-09-26
追加
- ファイルのレポートを選ぶ、または結合する。
coverageFile.sources は、読み込み済みの複数のレポートのうちどれがそのファイルの数値を示すかをファイルごとに決めます — あるいはそれらを結合します:agree はすべてのレポートが実行した行だけをカバー済みと数え、食い違う行を青緑色で示します。union はいずれかが実行した行をカバー済みとします。Coverage ビューの行、または開いているファイルに対する Choose Coverage Source... が、ルールを代わりに書き込みます。有料プランの機能で、Community では最新のレポートが決定します。
- 赤、琥珀色、緑、そしてワンクリックのガター モード。
coverage モードはカバー済みの行を緑で塗ります。ヒートマップの色合いは設定で、設定パネルでライブ プレビューできます。ステータスバーのボタンと Alt+G で、ガターをオフ、未カバー、カバレッジ、ヒートマップの順に切り替えられます。
修正
- ステータスバーのファイルの数値が、そのカードの数値と同じになりました。 中身のない指標 — 判定のないファイルの MC/DC — が、項目では 100% と数えられ、それが開くカードではまったく数えられていませんでした。
- 定数だけのヘッダーが 0% や 100% と表示されなくなりました。
excludeComments がオンのとき、プリプロセッサ ディレクティブはコメントと同様にコードなしとして数えられます。
Coverage Studio for Visual Studio 1.2026.3 — コード以外に選ぶものはない
2026-09-24
変更
- Licence ダイアログが尋ねるのはコードだけになりました。4 つのプラン ボタンはなくなりました:サブスクリプション コードや招待コードはプールを指し、プールは自分のプランを知っているため、コード自体より良い答えを人が返せることはなく — しかも Pro を選択したまま貼り付けた Business の招待は、プランが違うとして拒否されていました。コードを貼り付けて Activate を押してください。
Coverage Studio for VS Code 1.2026.4 — コード以外に選ぶものはない
2026-09-24
変更
- Enter Subscription Code が尋ねるのはコードだけになりました。プランの質問はなくなりました:コードはプールを指し、プールは自分のプランを知っているため、あとはサーバーが引き継ぎ、コードをプランが違うとして拒否することはもうありません。メール内のワンクリック リンクは変わらず、アクティベーション メールには「プランを選ぶ」ステップがなくなり、同じコードで VS Code なしに Visual Studio 版 Coverage Studio をアクティベートできます。
Coverage Studio for Visual Studio 1.2026.2 — テストを実行するたびに、あらゆるレポート、そして何が動いたか
2026-09-24
追加
- テストを実行するたびにカバレッジを。Collect Coverage in Test Explorer… は、Microsoft の Cobertura コレクターを含む 1 つの
.runsettings をソリューションの隣に置きます — Tools → Options → Test → Auto detect runsettings files がオンなら自動的に拾われ、そうでなければ Test → Configure Run Settings で一度だけ選択します。以後は Test Explorer のすべての実行がテスト プロジェクトの下にレポートを書き、現れた瞬間に、設定が指定するものとマージして読み込まれます。Test Explorer には何もフックしないので、Visual Studio 2026 と Microsoft.Testing.Platform はそのまま動作します。Run Tests with Coverage は dotnet test、vitest、jest、pytest、go、cargo、maven、gradle、phpunit、ctest を認識し、Output ウィンドウでカバレッジをオンにして実行し、書き出されたものを読み込みます。coverlet.collector のないテスト プロジェクトは、テスト SDK に同梱のコレクターで実行されます。
- 前回の実行以降。すべての読み込みは前回のものと比較されます。実行され始めた行、または実行されなくなった行のそれぞれにマージンの三角形、スコアの隣に傾向、数値が動いたファイルには Compare with Last Run。
history.enabled は再起動をまたいで実行を保持し、gitDiff.enabled は実行をブランチで変更した行だけに絞り込みます。
- ゲートと Error List。Check Coverage Thresholds は
threshold.* に対して実行を判定します。compliance.diagnostics、problems.enabled、problems.perLine、deadCode.enabled があれば、検出結果はコンパイラ自身のものと並んで Error List に置かれ、それぞれがそのファイルを開きます。
- レポート、エクスポート、バッジ。Show Annotated Source はアクティブなファイルをドキュメント ウェルのページとして開き — すべての行がその色で、検出結果がその隣に — エディターと双方向に同期してスクロールします。Open HTML Report と Generate Full HTML Report は実行を
htmlReport.outputDir に書き出してブラウザーを開きます。Export Coverage Report… はファイルごとまたは関数ごとの CSV、Markdown、LCOV、Cobertura、SARIF、SVG バッジ、Fucini JSON を書き出します。Generate Coverage Badge はバッジをリポジトリ内に保ち、badge.autoUpdate があれば読み込みのたびに更新します。
- Risk hotspots と行のフィルターが VS Code と同様に Coverage ウィンドウに: 複雑なコードとわずかなカバレッジが重なる関数を最悪のものから順に、そして並べ替えの隣のドロップダウンで、すべてのファイル、ギャップのあるファイル、未テストのファイル、または前回の実行以降に変更されたファイル。
- ソリューション ルートの設定ファイル。ソリューションの隣の
fucini-coverage.json は .vscode/settings.json の後に読み込まれ、それが存在するファイルであれば設定ウィンドウが書き込みます — .vscode フォルダーを置きたくないチームのために。両エディションが読みます。
- 手間のない .NET。
ignore.generated はデザイナー ファイル、生成されたファイル、obj\、マイグレーション ファイルをすべての合計から除外し、testRun.skipWhenTestsFail は実行が失敗で終わったときに最後の正常なカバレッジを画面に残します。
このエディションにはまだないもの
- Test Coverage パネルは VS Code の API であり、ソリューション エクスプローラーはバッジを表示できません。Compare Two History Runs は購読者からの要望があれば続きます。
Coverage Studio for VS Code 1.2026.3 — ホットスポット、フィルター、そしてパッケージなしの .NET
2026-09-24
追加
- どのファイルを表示するか。Coverage ビューのツール バーで並べ替えの隣にある 2 つ目のドロップダウン: すべてのファイル、ギャップのあるファイル、未テストのファイル、または前回の実行から数値が動いたファイル。フォルダーはそのファイルに従い、自身の数値を保ちます。すべてのプランで。
- Risk hotspots。ツリーの下に: 複雑なコードとわずかなカバレッジが重なる関数を最悪のものから順に、それぞれがその関数の位置でファイルを開きます。関数は CRAP スコア —
hotspots.crapThreshold、既定で 30、この指標の考案者が提案した値 — か、循環的複雑度のみ — hotspots.complexityThreshold、既定ではオフ — によって該当します。Community では件数と最悪のスコアが見え、順位付きの一覧は Pro です。
- パッケージなしの
dotnet test。Run Tests with Coverage はまずプロジェクト ファイルを読みます。どれも Coverlet を参照していなければ、実行は Microsoft 自身のコレクター — --collect:"Code Coverage;Format=cobertura"、Microsoft.NET.Test.Sdk に同梱 — を使い、そのレポートは Coverlet のものと同様に読み込まれます。
- 生成された .NET ファイルは除外されます。既定でオンの
ignore.generated は、*.Designer.cs、*.g.cs、*.generated.cs、*.razor.g.cs、AssemblyInfo、グローバル using、Migrations/ 以下と obj/ 以下のすべてを、すべての合計、ページ、エクスポートから外します。誰もテストしないデザイナー ファイルのせいでソリューションがゲートを失うことはもうありません。
- 失敗した実行は最後の正常なカバレッジを保ちます。
testRun.skipWhenTestsFail を使うと、失敗したテストで終わった実行はカバレッジを画面にそのまま残し、Output ペインでそのことを伝えます。既定ではオフ。
変更
- Test Explorer の実行は自動的に見つかります。何も設定しなくても、既知の名前にはワークスペース フォルダー自身のものだけでなく、各テスト プロジェクトの
TestResults/<run>/ フォルダーが含まれ、Coverlet のものの隣に Microsoft のコレクターの <user>_<machine>_<date>.cobertura.xml も含まれます。Visual Studio でテストを実行した .NET ソリューションは最初に開いた時点でカバレッジを表示し、すべての実行フォルダーが読み込まれ、マージでは各ファイルについて最新の実行の結果が優先されます。
Visual Studio 版 Coverage Studio 1.2026.1 — もう一方の IDE に同じカバレッジを
2026-09-23
追加
- Visual Studio 2022 と 2026 向けの 2 つ目の拡張機能 — Community、Professional、Enterprise。VS Code 版と同じリーダーなので、同じレポートから両方のエディターで桁まで同じ数値が得られます。同じ
fuciniCoverage.* 設定を .vscode/settings.json から、またマシンに VS Code があればその ユーザー設定からも読みます。Visual Studio 自身のコード カバレッジは使いません。Visual Studio 2022 ではそれは Enterprise の機能で、Community と Professional ではこれが IDE で見られる唯一のカバレッジです。 - エディター内:行ごとの余白のバー — 赤は未実行、琥珀色は一部、実行回数によるヒートマップ — インライン ヒット数、各関数の上にカバレッジ・複雑度・CRAP スコア・MC/DC を示す行、スクロール バーのストライプ、通らなかった分岐を示すホバー、レポート後に編集した行のドット。
- Coverage ウィンドウ(View → Other Windows → Coverage):各ファイルの指標と全体で 1 つのスコア、並べ替え可能、計測されなかったファイルはその下に。ステータス バーの
Coverage と File 項目からはそれぞれ完全なカードが開きます。 - コマンドは Tools → Coverage Studio 配下、
Ctrl+Shift+U に続く 2 打鍵のコードで:N/P で次と前の未カバー行、B で次の部分的にしかテストされていない判定、R で再読み込み。ウォッチ モードはビルドが書き出すファイルが変わると再読み込みします。 - Getting Started、各ステップにボタンのある 6 つのステップ、18 言語対応。初回は自動的に開きます。
- 設定は Coverage ウィンドウのツール バーの歯車から。このエディションのユーザー設定またはフォルダーの
.vscode/settings.json に書き込み、編集するファイルのコメントを保持します。 - ライセンス:すべての有料プランに含まれます。VS Code 版 Coverage Studio がアクティベート済みのマシンではそれ以上何も必要ありません — キーは自動的に見つかります。それ以外の場所では Tools → Coverage Studio → Licence… にアクティベーション メールのサブスクリプション コードを入力します。サブスクリプションなしではカバレッジは読み込まれません。Visual Studio に無料枠はありません。
このエディションにはまだないもの
- Run Tests with Coverage と Test Coverage パネルは VS Code の API で、ソリューション エクスプローラーはバッジを表示できません。Annotated Source ビュー、HTML レポートとエクスポート、Check Thresholds、Error List への項目、履歴とトレンド、差分カバレッジは、購読者からの要望の順に追加されます。
Coverage Studio for VS Code 1.2026.2 — はじめに、そして 1 つのサブスクリプションで 2 つのエディター
2026-09-23
追加
- ウォークスルー。Get started with Coverage Studio — Help → Welcome → Walkthroughs にあり、インストール後に自動的に開きます — は新しいユーザーをカバレッジ レポートから誰もテストしていない行まで 6 つのステップで案内し、各ステップには関係するコマンドのボタンがあります。18 言語すべてで。
- インストール ID を、Visual Studio 版 Coverage Studio が読む場所に残します。Visual Studio 版は
license.key のキーを同じフィンガープリントで検証しますが、この拡張機能の状態ストアは読めません。アクティベートのたびに ID を拡張機能のグローバル ストレージの隣にも書き出すので、VS Code でアクティベート済みのマシンでは Visual Studio での 2 回目のアクティベーションは不要です。ランダムな UUID で、何にも紐づかず、どこにも送信されません。
変更
- 返金はサブスクリプションを終了させます。承認された返金またはチャージバックは、サブスクリプションを直ちにキャンセルし、そのアクティベーション コードは新たなキーを発行しません。返金はお客様ごとに 1 回です。マシンにすでにあるキーは、従来通り自身の有効期限まで使えます。返金ポリシーに正確な内容があります。
Coverage Studio for VS Code 1.2026.1 — いつでも読めるファイル名
2026-09-21
修正
- Coverage ビューのファイル名は、どの幅でも読めます。 これまでは行の中で名前だけが縮み、普通のサイドバーでは 7 文字まで切り詰められていました。今は名前が全体で描かれ、メトリクスの列、スコア、バーが左からその下に入り込み、切れ目でフェードします。数値の半分が完全な数値に見えることはありません。すべての数値は引き続き行のツールチップにあります。
- 「ファイルが変更されました」のマークがファイルに追従します。 読み込みの後、最初の編集と最初の復元には追従しましたが、その後は次の読み込みまで何をしても動きませんでした。今は保存のたび、ディスク上の変更のたびに反映されます。
- Coverage ビューのツールバーがボタンのラベルを途中で折り返さなくなりました。 狭いサイドバーではツールバーがコントロールの間で折り返し、並べ替えボックスは独立した行に移ります。
- カバレッジバッジはエクスポートの選択画面でも無料です。 Generate Coverage Badge はどのプランでも SVG バッジを書き出してきましたが、Export Coverage Report… は Community で同じファイルを拒否していました。今はどちらも書き出します。
- Show Worst-Covered Folders は他の 2 つのリストと同じようにライセンスされます。 3 つとも無料で回数に数えられない Community でも、発行済みのキーでも、何も変わりません。
追加
- サポートされる最小バージョン。 拡張機能は、およそ週に 1 回、ライセンスサーバーから署名付きの小さなポリシーを読み込むようになりました。ビルドがまだサポートされている最も古いバージョンより古い場合、試用版と無料プランは停止して更新を求めます。有料ライセンスには日付が示され、まず猶予期間のあいだは動作を続けます。この読み込みはお客様やインストールについて何も送信せず、サーバーに到達できないインストールがそれを理由に停止されることはありません。現時点で最小バージョンは設定されていません。
変更
- このリリースからライセンスはプロプライエタリです。 この拡張機能は MIT 条件で公開されていましたが、サブスクリプションで販売する製品には合っていませんでした。公開されたビルドは、プランの範囲内で商用も含めてインストールして使用できます。複製、改変、再配布、リバースエンジニアリングはできません。お客様のデータから生成されるもの(レポート、エクスポート、バッジ)はお客様のものであり、以前の帰属表示の条件はなくなりました。以前のリリースのコピーには、入手時の条件が引き続き適用されます。
- パス操作ボタン(⋯)は、行をポイントするまで場所を取りません。 すべての行で確保していた 25 ピクセルはファイル名に回ります。ホバーすると名前のすぐ後ろに現れ、行の中は何も動きません。
Coverage Studio for VS Code 1.2026.0 — 条件、ミュータント、そして行を走らせたテスト
2026-09-20
修正
- LCOV 2 のトレースファイルで各関数が一度だけ並びます。
FN:<行>,<終了行>,<名前> を lcov 2.0 が書くとおりに読みます。以前は各関数が二度現れ、一方は未呼び出し、もう一方は 0 行目でした。lcov 2.2 の FNL:/FNA: の対も併せて読みます。
- C++ のテンプレートは、ある実体化が動かなかったというだけで未実行として塗られなくなりました。マクロだらけの関数も、マクロごとに一つではなく再び一つの関数です。
- 同意のテキストは、インストールが実際に送るものを述べます。ソースの月次ページはありません。利用状況の要約は、あなたのキーが発行されたリクエストコードを伴います。
追加
- 条件網羅が独立した指標になりました。
a && b は一つの判定で二つの条件です。両方の分岐を通っても b が偽になる場面を一度も見ないテストがあり得ます。いまは独自の行・列・エクスポート・バッジ、スコアでの重み(3。分岐と MC/DC の間)、そしてゲートを持ちます。BullseyeCoverage、TRACE32 の cond エクスポート、GCC 14 の -fcondition-coverage から読み取ります。
- ミュータントを、その場所に。 PIT と Stryker のレポートをミュータント単位で読み、生き残ったものをエディターのその行に印を付けます。ホバーには何が書き換えられ、どのテストが通ったかが出ます。HTML レポートと注釈付きソースにも一覧が載ります。
- この行を走らせたテスト。
--show-contexts 付きの coverage.py と -coverbytest で採取した OpenCover は、どのテストが行に届いたかを記録します。ヒット数のホバーがその名前を挙げます。
- 実行された行のうち一度も走らなかった部分がエディターで色づきます。また C と C++ の関数には、llvm-cov がすでに持つ分岐データから数えた複雑度と CRAP スコアが付きます。
- JaCoCo・Cobertura・Coverlet のプロジェクトが初回オープンで読み込まれます。設定は不要で、Maven・Gradle・
dotnet test が既定で書き出す場所も探します。
- どの幅でも、すべてのファイルの隣にすべての指標。スコアでの重み順に並び、収まらない分は消えずに横へスクロールします。別の場所を見ている間にトレースファイルが再読み込みされると、Coverage アイコンに件数が出ます。
- 志願できるプレリリースチャネルと、カバレッジの着色をまとめて消し、元どおりに戻すエディタータイトルバーのボタン。
変更
- Bullseye と TRACE32:分岐網羅に条件が含まれなくなりました。判定は分岐網羅、条件は条件網羅になります。そのためこうしたプロジェクトの分岐の数値は変わり、総合スコアも変わります。以前のスコアに戻すには
whmWeights.conditions を 0 にしてください。
- 無料の Community には週ごとの枠があります。計測対象の各操作が週に 5 回(以前は 1 日 20 回)で、上限に達したときはサブスクリプションか 7 日パスを案内します。すでに使われているインストールは 30 日間これまでの上限のままで、日付を添えて一度だけ知らされます。
- 試用と無料枠はライセンスサーバーに利用台帳を残します。VS Code のマシン ID のハッシュ、エディション、評価を始めた日、計測対象の操作の件数——それだけです。有料ライセンスでは残さず、台帳を待つこともありません。テレメトリーとの交換は 1 回かぎりの 30 日になりました。
- ソースコードの月次ページは廃止されました。誰についても収集も保持も送信もせず、以前のビルドが保持していたものは、このビルドの初回起動時に削除されます。
0.2026.82 — プロジェクトに合ったしきい値、そしてレポートが持つすべての情報
2026-09-17
修正
- ダークテーマでヒートマップが正しい向きで読めるようになりました。 これまでのグラデーションは淡い黄色から濃い茶色へと変化していたため、最も頻繁に実行されるループのバーが最も暗く表示されていました。ダークテーマには専用のグラデーションが用意され、くすんだオリーブから鮮やかなオレンジへと変化します。
- MC/DC のホバーに詳細が再び表示されるようになり、 llvm-cov の判定で条件が正しく数えられるようになりました。現行の VS Code ではホバーが 1 行に折りたたまれていました。また
(a && b) || c は、見出しが正しく「3 ペア中 2 ペア」と示しているのに、100% の条件が 1 つだけ列挙されていました。 - C++ の関数は、書いたとおりの名前で表示されます:
clamp_to<int> や gearbox::next_gear のように表示され、リンカーの ??$clamp_to@H@@YAHHHH@Z にはなりません。llvm-cov、lcov、gcov が対象です。 - Istanbul の行数が nyc と一致するようになり、
dotnet-coverage の XML を読み込めるようになりました。SimpleCov の :nocov: 行は壊れることなく除外され、サマリーしか持たないレポートは、レポートをどの順序で読み込んでもその数値を保ちます。 - マルチルートワークスペース: HTML レポートが同じフォルダー名を 2 回表示しなくなり、Coverage ビューはワークスペースフォルダーをその名前で見出しに表示し、
pathRemap ルールでは ${workspaceFolder} も ${workspaceRoot} と同じように使えるようになりました。
追加
- レポートが持つ情報はすべて表示されます。 関数呼び出し、オブジェクトコード、ミューテーションスコアには、Coverage ビュー、HTML レポート、CSV および Markdown エクスポートの列、ステータスバーのカードの行、注釈付きソースのバッジが用意されます。レポートに含まれていないメトリクスは、ゼロと表示されるのではなく省略されます。
- 複雑度と CRAP。 レポートに循環的複雑度が含まれている場合(OpenCover、JaCoCo、Clover、Cobertura)、すべての関数の CodeLens に CRAP スコアが表示され、ファイルには該当メソッドへリンクする Max CRAP が付き、HTML レポートには Riskiest Methods の一覧が表示されます。
- あらゆる形式からより多くの情報を: 名前付きの分岐アーム、除外された行、行内の列範囲、レポートを生成したツールとそのバージョンおよび日付、そしてツールがレポートに書き込んだ警告。
- 任意の重みをオブジェクトコードとミューテーションスコアに対して複合スコアで設定できます。どちらも、設定しない限り
0 です。
変更
- 既定のしきい値は 100% ではなくなりました。 設定していないしきい値は、行 80、関数 80、リージョン 75、分岐 70、複合スコア 75 となり、MC/DC、インスタンス化、関数呼び出し、オブジェクトコードにはゲートがありません。これは一般的なプロジェクトに求められる水準です。
fuciniCoverage.threshold.profile: "safety" を指定すると、これまでとまったく同じようにすべてのゲートが 100 に戻ります。また、自分で設定したしきい値はどちらのプロファイルよりも優先されます。以前の既定値に頼っていた場合は、safety を選択するまで、より緩い基準で判定されます。 以前から使用されているインストールには、その旨が一度だけ通知され、設定用のボタンも表示されます。 - ゲートのないメトリクスは、カードでチェックマークやバツ印の代わりに中立のダッシュで表示され、設定パネルでは実際に有効なゲートに基づく判定結果がプレビューされます。
0.2026.81 — 正確なパーセンテージと、送信できるレポート
2026-09-16
修正
- 未保存の変更があるバッファーでもカバレッジが揃います。 ファイルに未保存の編集があるときに読み込んだ実行は、すべてのマーク、ホバー、CodeLens をその編集がずらした分だけ行をずらして表示していました。編集内容はディスク上のファイルから復元されるようになり、ある行の上に丸ごと貼り付けた行は、その行を編集済みとして数えなくなりました。
- マージと重複する LCOV レコードが正しく合算されます。 新しいトレースファイルが古い実行の分岐と MC/DC の集計を残さなくなり、1 つのトレースファイルに 2 回列挙されたファイルは genhtml と同じ方法で結合されます。
- ライセンスキーは自分のマシンに留まります。 Settings Sync が他のインストールへキーを運んでカバレッジを妨げることがなくなりました。期限切れの Business、Enterprise、Pro Plus キーは期限後 45 日まで自動で更新されます。
- リモートのトレースファイルをより慎重に取得します。
remote.headers はリダイレクトをまたいでも元のオリジンに留まり、取得は 30 秒で諦め、サインインページはキャッシュせずに拒否し、オフラインで開いたウィンドウは最後にダウンロードしたコピーを読み込みます。自己更新は自分のエディションだけをインストールします。 - パーサー: llvm-cov の行カウントが
llvm-cov show と一致し、別メソッドの OpenCover 判定が互いを上書きしなくなり、xccov、TRACE32、EMMA は行の数値を保ち、ファイルを共有する Cobertura クラスは 1 つのファイルになり、JaCoCo の集約レポートが読めるようになり、パスマッピングは .. を解決してセグメント全体で照合します。 - エディターで: 履歴はワークスペースごとに保持され、マークは差分エディターの HEAD 側ではなく実際のファイルに留まり、ファイル末尾を超える行は描画されず、Windows のエクスプローラーバッジは
C:\… パスで動作し、大きな実行の検索が速くなりました。
追加
- 診断レポートの送信。 読み込み、リモート取得、マージ、履歴比較、チャットの失敗通知から利用できます。送信される JSON をそのままプレビューし、任意で 4 KB のファイルサンプル、コメント、返信先アドレスを添え、送信をクリックするまで何も送りません。
- エラーレポート。 VS Code のテレメトリレベルが
all または error のとき、FUCINI_* エラーはファイル内容、パス、名前を含めずに報告されます。3 つのログ行に固有のコードが付きました: FUCINI_REMOTE_002、FUCINI_REMOTE_003、FUCINI_GITDIFF_002。それぞれユーザーガイドで説明しています。
変更
- すべてのカバレッジ率が小数点以下 2 桁になりました。 四捨五入ではなく切り捨てです:
87.43%、100.00% はカバレッジがちょうど 100 のときだけ。 - ゲートは正確な値で判定します。 これまでは各パーセンテージを先に整数に丸めていたため、89.6% が 90% のゲートを通過していました。丸めのおかげでだけ通過していたプロジェクトは、カバレッジが本当にしきい値に達するまで NON-COMPLIANT と表示されます。
- テレメトリは毎日になりました。 すべてのインストールは VS Code のテレメトリレベル
all で小さなライセンスメッセージを毎日送信します。telemetry.enabled がオンの場合、使用状況の概要は月次ではなく日次で送られます。テレメトリと引き換えに機能を解放したインストールには、条件が変わる前に確認があります。
0.2026.80 — 見逃さない更新通知
2026-09-14
追加
- Coverage ビューが、更新があることを知らせ続けるようになりました。ライセンス バナーの上のバーに、お使いのバージョンと並べて新しいバージョンが表示され、更新通知と同じ 3 つのボタン「ダウンロード & インストール」「変更履歴を表示」「このバージョンをスキップ」が並びます。アクティビティ バーのビュー アイコンにもバッジが付くので、ビューを閉じていても気づけます。これまで通知は自動チェックのときに一度だけ表示され、ほかの場所をクリックすると翌日の次のチェックまで消えていました。バーは、更新をインストールするか、スキップするか、
fuciniCoverage.update.checkForUpdates をオフにするまで表示され続け、ウィンドウを再読み込みしても残ります。
0.2026.79 — ping は 1 日 1 回
2026-09-14
変更
- 小さな ping は、まとめて 1 日 1 回までしか送信されなくなりました。アップデート、ライセンスの変更、新しいカバレッジ形式、読み込めなかったファイルは、これまでそれぞれ別の ping として、気づいた時点ですぐに送信されていました。しかも一部のインストールでは毎セッション改めて検出されていました。取り消されたシートは起動のたびに取り消しを報告し、異なる形式を使うワークスペースを切り替えるたびに「新しい」形式の組み合わせが報告されていました。現在はこれらを収集し、1 つの ping として 1 日 1 回まで送信します。報告することがない日は何も送信しません。
- 実際に変わったことだけを報告します。1 日のうちに変わって元に戻ったライセンスは何も報告せず、形式は直近のワークスペースのものではなく、そのインストールがこれまでに読み込んだすべての形式です。インストール時の ping とアンインストールの通知はこれまでどおりすぐに送信され、新たに収集されるものはありません。
- VS Code 自体のテレメトリー設定が、小さな ping にも適用されるようになりました。
telemetry.telemetryLevel が off の場合、日次 ping のために何も収集されず、何も送信されません。これまでこの設定に従っていたのは、月次サマリーと削除通知だけでした。1 回限りのインストール時の ping は変わりません。
- エディターを使っていない間に終わった月も報告されるようになりました。月次サマリーはカバレッジを読み込んだ後にしか確認されなかったため、使われなくなったインストールは最後の月を送信しないままでした。現在は VS Code を開いている間、1 時間ごとにも確認します。引き続きテレメトリーがオンの場合に限り、30 日に 1 回までです。
修正
- サーバーに拒否された ping は、送信済みとして扱われなくなりました。エラーを含むサーバーからのあらゆる応答が配信済みとみなされていたため、拒否された日次 ping は収集した内容を失い、拒否されたインストール時の ping は再試行されませんでした。現在は成功した応答だけを送信済みとみなします。拒否された日次 ping や月次サマリーは保持され、1 日後に再試行されます。
0.2026.78 — 新たな 14 日間
2026-09-13
変更
- すべての評価に、一度だけ新たな 14 日間が与えられます。本リリースの初回起動時に、有料ライセンスのないすべての Pro インストールで試用期間が再度開かれます。とうに終了していた場合も、まだ数日残っていた場合も同様で、その日から 14 日間続きます。その際には短いお知らせが表示されます。有料ライセンスは影響を受けません。また、試用期間のない Community エディションも変わりません。
- 有料ライセンスでは緑色で「有効化済み」と表示されます。ライセンスバナーはこれまで、サブスクリプションの利用者に「有効化済み — 残り 30 日」と表示していました。サブスクリプションキーは支払い済みの期間が終わるまで有効で、その期間とともに更新されるため、このカウントダウンはいつまでも期限切れ間近の試用期間のように読めてしまいます。見出しは単に「有効化済み」とだけ表示し、日付は詳細欄に「有効期限」として示されます。カウントダウンが戻ってくるのはキーの期限が切れる前の最後の 1 週間だけで、以前からある更新時期のお知らせの横に表示されます。
0.2026.77 — コードを貼り付けるだけ
2026-09-12
追加
- 「Enter Subscription Code」— ほかには何も尋ねません。プランを選び、購入確認メールのコードを貼り付けて確認するだけで、ライセンスキーが発行され、設定に反映されます。これまでエディター内からの唯一の道は評価用のアンケート — 名前、メールアドレス、アカウントの種類、会社名、そして質問票 — でした。すでに購入した人の前に出すには間違ったフォームです。もう一つの道はメールに書かれた
vscode:// のリンクで、それをクリックするのをためらうのは臆病ではなく妥当な判断です。この種のリンクは訪れたどのページからでも起動できてしまうからで、アクティベーションが確認を求めるのはまさにそのためです。このコマンドはコマンドパレットにあり、カバレッジパネルのライセンスバナーとアクティベーションのダイアログにもボタンとして置かれています。どの状態でも、です。ライセンスはマシンの間を移動しますし、試用期間の途中で購入するのは例外ではなく通常のことだからです。
- 試用期間からそのままプランを見る方法。料金ページは無償エディションの画面からは開けましたが、アクティベーションのダイアログやライセンスバナーからは開けませんでした。「残り3日」を見ている人が実際に目を向ける、ただ一つの場所です。その読者に示されていたのはアンケートと
settings.json のヒントで、価格はまったく示されませんでした。
変更
- アクティベーションのダイアログとライセンスバナーは、もう
FCK1 から始まりません。どちらもこれまではリクエストコードと「鍵を settings.json に貼り付ける」案内で始まっていました。これは当社のライセンスサーバーにまったく到達できない場合のための道筋です。最初に示されれば、それが手順として読まれます。そのため FCB1… のサブスクリプションコードを手にした顧客が、それを確実に拒否する唯一の入力欄である「Enter Activation Key」へ送られていました。どちらも引き続き、購入した人に合う道筋の下に置かれ、実際にどういうものなのかを添えて説明されています。
0.2026.76 — メールが案内していたコマンド
2026-09-12
修正
- 「Request Activation Key」が本当にコマンドになりました。購入確認メール、そしてすべての言語のアクティベーションページは、ワンクリックのリンクがメールアプリを通り抜けられなかった場合、コマンドパレットから Fucini Coverage: Request Activation Key を実行し、プランを選んでコードを貼り付ければよいと案内しています。ところがこの名前はパネルのタイトルバーとリンク自体のものであって、コマンドのものではなく、パレットで探しても何も出てきませんでした。名前が最も近い Enter Activation Key は、当社のサーバーが発行する
FCK1… の鍵を受け取るもので、メールに書かれた FCB1… のコードを受け取るものではありません。案内どおりに操作すると、手元にあるものを確実に拒否する唯一の入力欄にたどり着くことになっていました。いまは本物のコマンドです。
- アクティベーションのダイアログは、試用期間や鍵がまだ有効なうちでも ライセンスをリクエスト… を提示します。以前はどちらかが期限切れになるまで表示されませんでした。動作しているインストールにライセンスサーバーへ問い合わせる理由はない、という考えからです。しかし試用期間の途中で購入するのは例外ではなく通常のことで、その立場の購入者には、ダイアログからコードを入力する欄へ至る道がありませんでした。残っていた二つのボタンは、コードを引き換えて初めて手に入る鍵を求めていたのです。
0.2026.75 — 色覚多様性に配慮したパレット
2026-09-12
追加
- 色覚多様性に配慮したパレット。
colorScale.preset を colorblind にすると、カバレッジは赤・琥珀・緑ではなく朱色・オレンジ・青(Okabe–Ito パレット)で描かれます。グラデーション、ガターバー、行のハイライト、エクスプローラーのバッジ、前回実行からのマークすべてが対象です。自分で設定した色が優先されます。
0.2026.74 — テストごとに絞り込めるカバレッジ
2026-09-12
追加
- VS Code 自身の Test Coverage ビューで、カバレッジをテストごとに絞り込めるようになりました。 トレースファイルがテスト名を持つ場合(lcov の
TN: セクション)、各テストが Test Explorer の Fucini Coverage の下に項目として表示され、Test Coverage ビューの各ファイルにはその中で何かを実行したテストが一覧され、1 つを選ぶとそのテストが到達した行が表示されます。 - パス設定での
${command:…}。 ${command:cmake.buildDirectory}/coverage.info は選択中の CMake キットに追従します。コマンドは検出のたびにその前に、最大 5 秒間、信頼されたワークスペースでのみ実行されます。失敗したコマンドは変数を書かれたままにし、理由を出力に記録します。 - 30 秒のクイックスタートと他の選択肢との比較が、Marketplace のページとホームページの冒頭に加わりました。
修正
- ファイルをテストごとに記録したトレースファイルで、そのファイルがテストの数だけ数えられていました。 現在は genhtml と同じく、トレースファイルごとに記録を合算します。合計ではファイルが 1 回だけ数えられ、複数のトレースファイルを読み込んでもどのテストの行も失われません。
0.2026.73 — 署名付きアップデートと、エディションを切り替えても有効なキー
2026-09-11
修正
- インストール ID は、何かが使う前に保存されるようになりました。 0.2026.72 ビルド 2 で ID が呼び出しのたびに算出し直されることはなくなりましたが、起動時にはまだ書き込みの完了を待っていませんでした。そのため、開いた直後に閉じたウィンドウが ID を失うことがあり、それとともにアクティベーションキーが紐づくマシンのフィンガープリントも失われていました。現在は起動時に書き込みを待ちます。
- Pro から Community に切り替えても、アクティベーションキーが無効になりません。 エディションごとに拡張機能のストレージが別々なため、Community は新しいインストール ID と新しいフィンガープリントで始まっていましたが、設定にあるキー(切り替え時に無料アンロック用として要求したばかりのキーを含む)は古い ID に紐づいていました。現在は切り替え時に ID を引き継ぎます。
セキュリティ
- fucini.software からのアップデートは署名され、インストール前に検証されます。 更新フィードの各
.vsix には、Web サーバーには一切置かれていないキーによる SHA-256 ハッシュと Ed25519 署名が付いています。組み込みのアップデーターと Community への切り替えは、ダウンロードしたファイルに対して両方を検証し、それ以外のもの(プロキシのエラーページ、途中で切れたダウンロード、キャッシュされた古いビルド、当社のものではないファイル)を拒否します。HTTPS だけでは足りません。TLS を検査する企業プロキシは、通過するすべての接続を署名し直すからです。 - リリースごとに固有のファイル名になりました。 更新フィードは、リリースのたびに上書きされるファイルではなく、バージョン番号付きの
.vsix を指すようになりました。そのため、Cache-Control を無視するキャッシュが先月のビルドを今月のものとして配信することはありません。ダウンロードページのリンクは変わりません。
0.2026.72 — 片側しかテストされていない分岐
2026-09-10
追加
- 片側しかテストされていない分岐へ移動。 Next Partly-Tested Decisionと前の対になるコマンドが、一部のアームは実行され一部は一度も実行されていない判定をたどります。これは未カバー行の移動では示せない欠落です。文が実行された行はカバー済みとされ、アームがいくつ実行されないままでもカバー済みのままです。
a が偽の状態で一度だけ到達した if (a && b) は、行カバレッジ 100% で、テストは半分です。アーム単位ではなく判定単位で停止します。if/else のアームは何ページも離れていることがあり、switch の 5 番目のアームへ飛ぶことは switch 自体へ飛ぶことより情報が少ないからです。どのアームにも到達していない判定は、もともとそこで止まる未カバー行コマンドに任せます。分岐がまったく記録されていないレポートのファイルは、すべての判定が両方向でテストされたと主張するのではなく、そのことを伝えます。
Reload Coverage は、すでに読み込まれているものを読み直します。 監視をオフにしていると、テストを再実行したあとに最新の数値へ戻る唯一の方法はLoad Coverageで、これは検出をやり直すため画面に出ているものとは別の組み合わせが返ることがあります。このコマンドは今読み込まれているものを正確に読み直します。検出では二度と見つからない、手動で選んだトレースファイルも含みます。
Copy Coverage Summary は実行結果を Markdown の表にします。 カバレッジが最も低いファイルを先頭に、合計行付きで、プルリクエストにそのまま貼り付けられます。分岐と MC/DC の列は、実行内でそれらを測定したものがある場合にのみ表示されます。ダッシュだけの列は「未測定」ではなく「カバレッジ 0」と読まれてしまい、事実と正反対になるからです。
修正
- インストール ID がセッションごとに変わることがありました。ライセンスのフィンガープリントはこの ID から作られます。 呼び出しのたびに算出し直され、書き込みを誰も待たずに保存していたため、2 回目の呼び出しや、起動直後に閉じられたエディターのウィンドウが新しい ID を作ってしまうことがありました。ID が変わるということは、アクティベーションキーが一致しなくなるということです。インストール単位で数える指標もすべて水増しされていました。現在はセッションごとに一度だけ確定し、何かが使う前に保存します。ビルド 2。
0.2026.71 — この行をカバーしたのはどのトレースファイルか
2026-09-08
追加
- 行単位のカバー元表示。 複数のトレースファイルを読み込んでいるとき、実行回数のホバーの最後に カバー元: とその行で実行を記録したレポートが並ぶようになりました。Coverage ビューでトレースファイルの行をクリックすると、そのファイルが測定した行が、開いているすべてのエディターで光ります(これまでは測定した「ファイル」だけが光っていました)。これはマージされた実行だけが答えられ、単一のレポートには答えられない問いです。同じファイルを測る 2 つのトレースファイルはその行について食い違い、これまでマージはその食い違いをならして一度も見せませんでした。マージは今もファイル単位で、最新のレポートが共有ファイルを丸ごと勝ち取ります。だから行ごとのカバー元はマージの前に索引化されます。数えるのはカバーされた行だけです。ある行を
0 と記録したレポートは、その行をカバーしていません。
- lcov の
TN: レコードをついに読みます。 スイート名を書いているトレースファイル(TN:integration)は、カバー元が示されるあらゆる場所で coverage.info (integration) と表示され、その名前は lcov への書き出しでも空にならずに残ります。多くのツールは TN: を空で書くため変化はありません。埋めているのは、まさにトレースファイルがマージされる側のツールであり、そのときどれがどれかを示すのは名前だけです。
fuciniCoverage.lineHighlight は行そのものを色付けします。 off/uncovered/heatmap、既定はオフ。未実行行と部分的にしか実行されていない行の背後に半透明の色を敷き、heatmap では実行された行の背後にも、回数が多いほど濃く敷きます。editorGutter.mode の 4 つ目の値ではなく独立した設定にしたのは、求められる組み合わせが違うからです。ガターは何も描かず未実行行だけ色付ける、あるいは色を敷かずバーだけ、のどちらもできます。テキストの下に敷くため半透明で、ガターと同じ理由から、カバー済みの行ではなく欠けている行を色付けます。
fuciniCoverage.overviewRuler はスクロールバーの線を単独で決めます。 follow(既定)は従来どおり、ガターが未実行・部分実行のバーを描く場所に線を引き、ヒートマップでは引きません。uncovered は editorGutter.mode がオフでも線を引くので、コードの横には何も出さず、スクロールバーにファイルのギャップの地図だけが出ます。off はバーを残して線をやめます。ルーラーは以前ガターに固定されていたため、この 2 つの組み合わせはできませんでした。
修正
- 解析できないトレースファイルが、何として読まれたかを言うようになりました。「…整形式ではありません」だけでは、そもそもそのファイルが思っている形式として認識されたのかどうか分かりませんでした。VectorCAST のパーサーに拒否された Cobertura 文書と、本当に途中で切れた Cobertura 文書はまったく別の問題です。いずれかのパーサーがファイルを引き受けた場合、通知は このファイルは cobertura として読み込まれました。 で終わります。どのパーサーも引き受けなかった場合は何も足しません。「この拡張機能が読める形式ではありません」がすでにそれを言い切っています。
0.2026.70 — 古いデータの通知がアイコンを再び表示
2026-09-08
修正
- ステータスバーのホバーに出る「データが古い」通知が、
$(history) という文字列ではなく時計アイコンを再び表示します。 その下の数値がファイルの古い版を表していると告げる通知には、ステータスバー自身と同じ $(history) の印が付いています。 ステータスバーでは StatusBarItem.text がアイコンを自動的に置き換えるためこの印は時計アイコンとして描かれますが、ホバーは MarkdownString であり、supportThemeIcons で明示的に有効にする必要があるのに、それがされていませんでした。カバレッジを信用できない理由を説明する唯一の行が、生の記法で始まっていたわけです。 現在はホバーでも有効にしています。
0.2026.69 — ガターモード、リモートのトレースファイル、マルチルート ワークスペース、未計測ファイル
2026-09-08
追加
- エディター自身のガターが、未カバー行やヒット数のヒートマップを表示できるようになりました。 既定では引き続き所見だけ — MC/DC のバー、前回の実行以降の三角形、編集行のドット — を示し、ファイル全体の色分け表示は Annotated Source のままです。
fuciniCoverage.editorGutter.mode でさらに表示を選べます。uncovered は一度も実行されなかったすべての行にバーを、分岐のアームが一度も通らなかったすべての行に琥珀色のバーを置き、カバー済みの行には何も置きません。緑の壁が 3 本の赤を隠さないためです。heatmap は実行されたすべての行に暖色を加え、実行回数が多いほど濃くなります。Choose Editor Gutter Mode... がパレットまたはステータスバーのメニューから 3 つを切り替えます。README はこれまで「ネイティブガター」と言い切っていましたが、実際にあるものを述べるようになりました。 - インラインのヒット数。
fuciniCoverage.hitCounts.inline は、文が始まる各行の後ろに ×12 を書き込みます。×0 も含めて — ホバーすれば以前から見えていた数値を、ホバーせずに。Toggle Inline Hit Counts で切り替え、ステータスバーのメニューではその時点に応じて Show または Hide として提示されます。 - すべてのパス設定で
${env:NAME}、${config:section.key}、${userHome}、${workspaceFolderBasename} が使えます。以前からあった ${workspaceFolder} に並ぶものです。拡張機能が知らない変数は書かれたとおりに残されるため、打ち間違いは消えてなくなるのではなく、探したパスとして検出ログに現れます。 coverageFile.paths の項目に http(s):// URL を書けます。 アーティファクトは読み込みのたびに拡張機能のストレージへ取得され、そこから読み込まれます。Coverage ビューはキャッシュのパスではなく URL を表示します。各取得は条件付き(ETag / Last-Modified)なので、変わっていないアーティファクトの再取得は何もダウンロードせず、取得に失敗したときは最後にダウンロードしたコピーが代わりに読み込まれ、理由が出力に記録されます。fuciniCoverage.remote.headers は変数を展開した Name: value ヘッダーを追加し — Authorization: Bearer ${env:CI_TOKEN} ならトークンを settings.json の外に置けます — fuciniCoverage.remote.refreshMinutes はタイマーで再取得します。URL 自体がファイル名で終わらない場合は、形式が分かるように URL フラグメントとして #lcov.info(または別のファイル名)を付けてください。 - 読み込みと Generate Full HTML Report が進行状況を表示し、キャンセルできるようになりました。 10 個以上、または合計 8 MB 以上のトレースファイルの読み込みは、読み込み中のファイル名と段階(読み取り、次にソースの確認)を示す、「キャンセル」ボタン付きの進行状況の通知の下で走ります。それより小さい読み込みは従来どおりステータスバーが回るだけです。キャンセルすると前回の実行が読み込まれたまま残り、そう伝えます。HTML レポートも、描画して書き出すページごとに同じことをします。
- 再読み込みの理由が 2 つ増えました。 ワークスペース外の絶対パスによる
coverageFile.paths の項目 — チェックアウトの隣のビルドツリー、Bazel の出力ルート — もポーリングされるようになったため、ウィンドウを開いた後にそこへ現れたファイルは、二度と見られないままではなく読み込まれます。ウォッチャーはワークスペースしか見ていなかったのです。また、fuciniCoverage.watch.reloadAfterTasks にタスク(tasks.json の label、または Run Task の一覧に表示されるとおりの source: name、例: npm: test)を挙げると、その終了時に watch.enabled のオン・オフにかかわらずカバレッジを再読み込みします。ウォッチャーが追えないビルド — シンボリックリンクされた出力ツリーを置き換える実行、ネットワーク共有上のレポート、ファイルを後処理するカバレッジのステップ — のためのものです。 - マルチルート ワークスペース。 ワークスペースの各フォルダーは、それぞれの条件で検出されるようになりました。
coverageFile.defaultLocation、coverageFile.paths、pathRemap、ignore、watch.*、remote.*、badge.*、レポートのディレクトリ、gitDiff.*、problems.perLine、editorGutter.mode、hitCounts.inline はフォルダーごとに読まれるため、フォルダー自身の .vscode/settings.json や .code-workspace の項目が適用されます。${workspaceFolder} はその項目自身のフォルダーを意味し、すべてのフォルダーで見つかったトレースファイルは 1 つの実行にマージされ、Coverage ビューはファイルをフォルダーごとにまとめます。pathRemap ルール内の ${workspaceRoot} は、まずトレースファイル自身のフォルダーを試し、次にほかのフォルダーを試します。1 つのフォルダーを必要とするもの — ファイルダイアログ、レポートとバッジの出力、git のメタデータ、Run Tests with Coverage — はアクティブなエディターのフォルダーを使い、複数のフォルダーがあってエディターが開かれていなければ、テスト実行はどれかを尋ねます。ワークスペースへのフォルダーの追加や削除は、それ自体でカバレッジを再読み込みします。これまでは 12 か所が最初のフォルダーを取っており、2 つ目のルートはすべてについて誤った基準を得ていました。 - 実行が VS Code 自身の Test Coverage ビューに公開されます。
fuciniCoverage.testCoverage.publish(既定でオン)により、読み込まれたすべての実行はネイティブの Test Coverage パネル、Explorer でのファイルごとのパーセンテージ、エディター自身の「Show Inline Coverage」トグルにも届きます — 行、分岐のアーム、関数が、詳細はオンデマンドで読み込まれます。Show in Test Coverage View は設定にかかわらずアクティブな実行を公開してパネルを開きます。ステータスバーのメニューでは quickActions.showTestCoverage の背後で提供されます。 - ファイルが一致しないときに、パス再マッピングのルールが提案されます。 「読み込まれたのに何も点灯しない」の最も多い原因は、ワークスペースには
src/a.c があるのに、トレースファイルのパスがコンテナや CI のチェックアウト(/build/src/a.c、/home/runner/work/repo/repo/src/a.c、C:\agent\_work\1\s\src\a.c)に由来していることです。読み込みで一致しないファイルが残ると、拡張機能はそのファイル名をワークスペースで探し、最も多くを説明するプレフィックスのルールを推定し、[FUCINI_REMAP_002] として記録し、読み込み結果に Apply Suggested Remap を提示します — 1 クリックでルールが fuciniCoverage.pathRemap に追記され、再読み込みされます。Suggest Path Remap Rule は同じ解析をオンデマンドで実行します。クリックしなければ何も書き込まれません。 fuciniCoverage.ignore: 決して数えないファイル。 ベンダー由来、生成済み、サードパーティのファイル(vendor/**、**/*.generated.ts、build/**)は読み込み時に実行から外されるため、Coverage ビュー、ステータスバー、しきい値、バッジ、CodeLens、履歴、エクスポートのすべてがそれら抜きで数えます。読み込み結果はいくつ外されたかを述べ、出力がその名前を挙げます。パターンはワークスペース相対パスと絶対パスに照合され、/ を含まないパターンは .gitignore と同様に任意の深さのフォルダー名またはファイル名に一致します。ファイル単位のものです — ファイル内の行は引き続きツール自身の除外マーカーを使います。 - 行ごとの Problems 項目、オプトイン。
fuciniCoverage.problems.perLine(off、uncovered、uncoveredAndPartial。既定ではオフ)は、一度も実行されなかった連続する行のブロックごとに Information 診断を置き — 40 行のデッド関数は 40 項目ではなく 1 項目です — 2 つ目のモードではさらに、分岐のアームが一度も通らなかった各行にも置きます。開いているドキュメントに限られるので、2,000 ファイルの実行がパネルを溢れさせることはありません。項目はバッファの編集に合わせて行に追従し、ドキュメントを閉じると消えます。problems.enabled の背後にあるファイルごとの項目は変わりません。 - README 用のカバレッジバッジ。 Generate Coverage Badge はアクティブな実行の shields 風 SVG をワークスペースに書き出します(
fuciniCoverage.badge.outputPath、既定は coverage-badge.svg)。README は  で、ホストされたサービスなしに埋め込めます。badge.metric が行、分岐、MC/DC、加重スコアのどれかを選び、色は colorScale の段階に従い、badge.autoUpdate は読み込みのたびに書き直します。Export Coverage Report がすでに提供していた SVG バッジも同じレンダラーを共有するようになりました。 - 未計測と未カバー。 どのテストも読み込まなかったファイルはトレースファイルにまったく含まれないため、拡張機能はこれまでもそれを 0 ヒットの計測済みファイルとは区別し — 数値からも外してきました。モジュールの半分にテストがないプロジェクトが「92%」と読める理由はまさにそこにあります。この区別が見えるようになりました。そのようなファイルを開くとステータスバーに
not measured が出て、ほかに何が起きるかは fuciniCoverage.unmeasured.mode が決めます。list は Coverage ビューに Unmeasured グループを加え、実行が計測した種類でありながら実行に含まれないワークスペースのすべてのファイルを挙げ、読み込み結果でそれらを数え、バッジがオンなら Explorer で ? を付け、threshold.unmeasuredFiles により選んだ数を超えたときに Check Coverage Thresholds を失敗させられます。count はさらに進みます。そのような各ファイルは 0% として — コード行 1 行につき未カバー行 1 行として — 実行に加わるため、ステータスバー、しきい値、バッジ、履歴、エクスポート、Test Coverage ビューのすべてが正直な数値を見ます。ファイルはどこでも未計測として描かれ、「カバレッジと一致しなくなった」とは決して扱われません。unmeasured.exclude はヘッダーなどを対象外にします(既定で **/*.h、**/*.hpp、**/*.hh、**/*.inl、**/*.d.ts)。既定ではオフで、ステータスバーの状態だけが常にオンの唯一の変更です。 - カバレッジビューが統合の結果を示すようになりました。 0.2026.63 以降、プロジェクト全体の実行の上に読み込まれたモジュール単体の再実行は、そのモジュールのファイルについて全体実行の数値を置き換え、各行は表示元のレポート名を示していました。しかし、古いレポートの数値を上書きした行は、複数レポートのうち一つだけが計測した行とまったく同じに見え、レポートのどれだけが上書きされたかを示すものもありませんでした。今後は、そのような行のトレースファイルバッジに枠線が付きます。ツリー上部の各トレースファイル行には統合がそのファイルに何をしたかが表示され(「42 件のファイル · 7 件が新しいレポートに上書き」「7 件のファイル · 古いレポートの 7 件を上書き」)、トレースファイル行をクリックすると、それが計測したファイルが完全なツリーの中で強調表示され、残りは薄くなります(もう一度クリックで解除)。
fuciniCoverage.coverageView.mergedMarks(既定でオン)で枠線と強調表示をオフにできます。件数は残ります。
0.2026.68 — チームのシートでは招待コードを求めるように
2026-09-07
修正
- Business または Enterprise のユーザーには、会社コードではなく招待コードを求めるようになりました。 9 月 2 日以降、ライセンスサーバーは Business または Enterprise のシートに対して共有の会社コードを受け付けません。そのコードで確保したシートは誰のものでもなかったため、チームの各シートは招待を受けたメールアドレスに結び付けられ、シートを有効化するコードはそのメールに記載された
FCI1… の招待コードになりました。ところがアンケートの項目は依然として「会社コード」と表示され、管理者に尋ねるようにと案内し、FCB1… のプレースホルダーを示していました。もはや使えない唯一のコードを貼り付けるよう促し、空欄のままにすると会社コードを入力するよう求めていたのです。チームプランではこの項目が「招待コード」となり、ヒントにはコードの入手先と、共有の会社コードではシートを有効化できないことが書かれ、プレースホルダーは FCI1… の形を示し、検証メッセージは招待コードを求めます。Pro ではサブスクリプションコードをその名前で求めます。Pro Plus は変更ありません。意図して共有コードのままにしています。表示言語 17 種すべてに新しい文言が入っています。
0.2026.67 — ${workspaceFolder} が両方のパス設定で使えるように
2026-09-05
修正
${workspaceFolder} が coverageFile.paths でも使えるようになりました。coverageFile.defaultLocation では以前から使えていたものです。 2 つの設定は隣り合っていながら、変数を説明していたのは片方だけだったため、両方に書く人がいました。ところが ${ で始まる項目は絶対パスではないので、ベースフォルダー配下のリテラルとして検出グロブに入り、何にも一致せず、拡張機能は「カバレッジなし」と報告していました。そのような項目はまず展開されて絶対パスになり、そのまま存在が確認されます。設定には書かれたとおりに残り、同じファイルを選んでも別の形で二重に書き込まれず、Coverage ビューからアンロードすれば設定からも自動的に外れます。- 設定されているのに存在しないトレースファイルを、出力で知らせるようになりました。 誤ったパスを指す項目は、何も報告されない唯一の形で失敗していました。「カバレッジが見つかりません」という、本当にカバレッジのないプロジェクトと区別のつかない結果です。
[FUCINI_DISCOVERY] がファイルの見つからなかった各項目と探したパスを、再読み込みのたびではなく項目ごとに一度だけ示します。ワイルドカードの項目は、ビルドが何かを書くのを待っている可能性があるため報告しません。
0.2026.66 — 関数の CodeLens に分岐、MC/DC、スコアを表示
2026-08-29
追加
- 関数ごとの CodeLens が、行とヒット数だけでなく分岐、MC/DC、総合スコアも示すようになりました — 「add: 92% カバー (12/13 行、52 ヒット、スコア 88%、分岐 3/4 (75%)、MC/DC 2/3 (66%))」。トレースファイルにその関数について報告すべきものがない場合 — 分岐データのないプレーン C のビルドや、
-fcoverage-mcdc で計装されていないもの — は、誤解を招く 0/0 を示す代わりに、その項目を省きます。スコアも同様に、他の 2 つのうち少なくとも 1 つと並ぶときにだけ表示されます。行が唯一の指標であれば、定義上、レンズが先頭に示しているのと同じ数値になるからです。
- 測定元バッジのツールチップが、各トレースファイルがどれくらい前に書かれたかを示します。タイムスタンプだけではありません — 「module.info (2026-08-15 14:32 · 3 時間前) による測定。lcov.info (2026-08-01 09:10) がこのファイルについて述べていた内容を置き換えます。」区切りは「たった今」まであり、30 日を過ぎると絶対日付のみが表示されます。
- トレースファイルの mtime が同じでも、黙って処理されなくなりました。 同じビルドステップで書き出された 2 つのレポートや、mtime の分解能が 1 秒より粗いファイルシステムでは、両方が測定したファイルに対して同一のタイムスタンプが報告されることがあります — 以前は勝者が
coverageFile.paths の順序で決まり、画面上にはそれを説明するものが何もありませんでした。出力チャネルがそれを伝えるようになりました。[FUCINI_MERGE_TIE] が両方のトレースファイルと、共有しているファイルの数を挙げます。
- 「Show What Changed Since Last Run」がファイル行の
… メニューに加わりました。比較対象となる前回の実行がある場合に使えます — Compare with Last Run がすでに計算しているファイルごとの差分と同じものを、ツリー全体ではなく、尋ねたその 1 ファイルに向けたものです。何も動いていないファイルは、何も出さないのではなく、そのとおりに告げます。
- Tune Colour Scale コマンド:
colorScale.* の色としきい値を、確定する前に実際の Coverage ビューで試せます。各編集は設定へ直接書き込まれます — ビューは colorScale/threshold の変更があればすでに再描画されるので、値を書くことがプレビューです — 最後に「保持」か「元の値に戻す」で締めくくります。
- Problems パネルにファイルごとのカバレッジのギャップを、
threshold.statement を下回る読み込み済みソースファイル 1 つにつき 1 項目ずつ表示します。新しい fuciniCoverage.problems.enabled の背後にあります(既定ではオフ — 既定のステートメントしきい値は 100 です)。各項目は未カバーの内容を要約し(「62% の行をカバー — 未カバー 14 行、未カバー 2 関数」)、インストールされているチャット拡張機能(Copilot、Claude Code など)を、そのギャップのテストを書くよう促すプロンプトとともに開くクイックフィックスを備えます — 行ごとの診断は実際のコードベースでは Problems を溢れさせるため、読み手が実際に対処できる粒度であるファイル単位にとどめています。
修正
- Coverage ビューで、欠落・不一致・検証済みファイルの理由を選択してコピーできるようになりました。 以前は行のネイティブな
title ツールチップにしか存在せず、それはブラウザー自身のものなので選択できません。正確な理由をバグ報告に貼り付けたい人は、手で打ち直すしかありませんでした。ホバーすると同じテキストが本物のスタイル付きパネルに表示され、ほかのページ内容と同じようにドラッグで選択できます。通常のファイルのツールチップ(パスのみ)は変わりません。
- 引数リストが複数行にまたがる関数が、移動したと誤って報告されなくなりました。
detectMismatch は、宣言の記録された行と、その名前が実際に見つかる行との差を最大 2 行まで許容していました — シグネチャ行、戻り値の型の行、開き波括弧のあいだの通常のずれには十分ですが、複数行の引数リストには足りません。それらは両者をいくらでも引き離せます。void LOG_Emit(...) — 7 つの引数が 1 行に 1 つずつ — は開き波括弧の 163 行目で記録されており、"LOG_Emit" is at line 3 と報告されました。最も近いテキスト上の一致で、たまたまファイルのヘッダーコメントに書かれた関数自身の名前であり、163 行目からも 156 行目の実際の宣言からも遠く離れていました。チェックは、名前と記録された行のあいだのすべての行が途切れない 1 つの宣言として読める場合 — 空行がなく、前の文やブロックを終える行もない場合 — に、さらに手前で見つかった名前も受け入れるようになりました。引数リストは常にそうであり、実際に移動した関数がそうであることはほとんどありません。不一致が本物である場合、報告される行は、ファイル内で最初に見つかったものではなく、記録された行に最も近い一致になります。
- 測定元バッジが「+N」を示さなくなりました。 より広い実行の上にモジュール自身のレポートを読み込むと、ファイルのバッジにモジュール名と、そのファイルをカバーしているほかのトレースファイルの数が付いていました — 「これだけの数が覆された」という意味でしたが、「これらのレポートは一致している」と読め、ツリーからは n のうちどれを指すのか分かりませんでした。バッジは、画面に表示されている数値の元となるトレースファイルだけを挙げます。ツールチップは引き続き、何がいつ覆されたかを示します。
- 測定元バッジが、隣のファイル名をパネルの端から押し出さなくなりました。 バッジの幅は固定(
flex: none)だったため、行に余裕がなくなると、バッジのほうが重要度が低いにもかかわらず、ファイル名が不足分をすべて引き受けて先に省略されていました。バッジは、ファイル名が 1 文字も失う前に自分の幅を譲ります。ファイル名より優先度の高いパーセンテージとバーは影響を受けません。
0.2026.65 — モジュールの再実行が、より広い実行の結果を置き換える
2026-08-15
変更
- モジュール自身の再実行が、より広い実行がそのモジュールについて述べた内容に加算されるのではなく、置き換えるようになりました。 プロジェクト全体のレポートを読み込み、その上に 1 つのモジュール自身のレポートを読み込むと、以前は両者が共有するすべてのファイルについてヒット数が合算されていました — そのモジュールのテストだけを再実行すると、より広い、いまや古くなった実行がすでに報告していた数値を、更新するのではなく水増ししていたのです。ディスク上の mtime が最も新しいトレースファイルが、測定したすべてのファイルについて完全に勝つようになりました。ステートメント、分岐、宣言、そしてファイルごとのロールアップ(分岐、MC/DC、関数、関数呼び出し、オブジェクト、ミューテーションの各サマリー)はすべて、そのレポートだけから得られます。どちらのパスが
coverageFile.paths のどこにあるかは関係ありません — モジュールの再実行が勝つのは、たまたま最後に読み込まれたからではなく、実際に新しいからです。あるファイルについてステートメントをまったく報告しないトレースファイル — TRACE32 のオブジェクトコードのエクスポートや、本物のレポートの横に読み込まれた Stryker のミューテーションレポート — は、引き続き実際に持っているサマリーだけを提供し、先のレポートの行/分岐の詳細には触れません。このケースは影響を受けません。また、2 つの実行が測定したファイルごとの MC/DC(または関数、関数呼び出し、ミューテーション)ロールアップで、分子とともに分母まで合算され、実際のパーセンテージを低く見せていた長年の欠陥も解消されます。測定元バッジのツールチップは「合算」ではなく「_ がこのファイルについて述べていた内容を置き換えます」と述べます。
修正
- Coverage ビューの長いファイル名が、はみ出す代わりに省略されるようになりました。 行の名前の span に
min-width: 0 がなく、これは flex アイテムの overflow/text-overflow: ellipsis を実際に働かせる唯一の宣言です — それがないと、パネルが十分に狭くなったとき長い名前は全幅を保ち、その後ろに続く測定元バッジ、パーセンテージ、バーの下に潜り込んでいました。
0.2026.64 — Coverage ビューをスコアで並べ替え
2026-08-01
追加
- Coverage ビューを名前だけでなくスコアで並べ替えられます。 すべての行にはすでに WHM スコアと指標ごとの内訳がありますが、大きなツリーで最悪のファイルを見つけるには、アルファベット順のリストを読み下すしかありませんでした。Collapse all / Expand all の隣のドロップダウンで、ファイル名、総合スコア、行、分岐、MC/DC を選べます — ファイル名 以外のすべてのモードは、フォルダーとファイルを一緒に混ぜ、その指標自身のパーセンテージで最悪のものを先頭にします。テストの乏しいフォルダーは、テストの乏しいファイルから離れてまとめられるのではなく、それとまったく同じように順位付けされます。表示中の指標のデータがないファイル(分岐を一切報告しない形式など)は、0% と読まれるのではなく末尾に並びます。選択は、行われた時点で新しい
fuciniCoverage.coverageView.sortBy 設定に書き込まれるため、ウィンドウの再読み込み後も維持され、毎回 ファイル名 に戻ることはありません。
修正
- 複数行にまたがる関数シグネチャが「移動した」と誤って印付けられなくなりました。 Istanbul の
fnMap は関数に 2 つの行参照を与えます — 名前のある行と、本体が始まる行 — そしてパーサーは、後でソーステキストから名前を探す不一致チェックのために本体の行を優先していました。引数リストが 2 行を超える関数(100 桁で折り返すコードベースでは日常的です)では、名前の実際の行が記録された行から離れすぎており、ファイルは Coverage ビューで暗くなり、「カバレッジと一致しなくなりました」という誤った警告が出ていました。パーサーは名前自身の行を優先するようになりました。不一致チェックが常に探していたのはそれです。
0.2026.63 — すべての行が測定元のトレースファイルを示す
2026-07-20
追加
- 各行が、どのトレースファイルで測定されたかを示します。 プロジェクト全体の実行の上に 1 つのモジュールのレポートを読み込むことは、同じファイルを 2 回測定することであり、ツリーはその行がどのレポートを読んでいるかを何も語りませんでした。複数のトレースファイルが読み込まれているとき、各ファイル行は測定元のレポート名 — 複数ある場合は最後に読み込まれたもの — を表示し、ほかのレポートごとに
+1 と、それらを挙げるツールチップが付きます。統合はどちらかを勝たせるのではなくヒット数を合算し、ツールチップがそう述べます。トレースファイルが 1 つだけなら、区別すべきものがないため何も描かれません。
変更
- 拡張機能自身のページが、すべての設定を実際の既定値とともに挙げます。 20 の設定にはそもそも行がなく — 言語、3 つのしきい値、1 つの重み、15 のクイックアクションの切り替え — テレメトリの行は、しばらく前からオフであるにもかかわらず既定でオンだと述べていました。テストがページとマニフェストを、既定値も含めて突き合わせます。
修正
- 前のリリースで加えた
files.watcherExclude 配下のソースの再チェックが、独自の設定名ではなく、このチェックの他の部分と同じ staleWarning.enabled に従うようになりました。
0.2026.62 — エクスプローラーはそのまま、監視されないソースも再チェック
2026-07-06
変更
- エクスプローラーはそのままにします。 エクスプローラーでファイル横に出るカバレッジのバッジは既定でオフになりました。あの列は使う人のもので — VS Code は git の M や U をそこに置き、バッジは 1 つしか入りません — カバレッジ ビューが同じファイルを同じ数値で、そのために用意された場所に並べます。
explorerBadges.enabled で元どおり戻せます。
修正
files.watcherExclude 配下のソースも再チェックします。 ファイルとカバレッジの一致は保存とファイルシステム監視で確かめますが、その監視は除外されたものについては何も言いません — とりわけ build/ 配下の生成ソースで、古い印に最も気づきにくい場所です。これらのファイルはトレースファイルと同じ 2 秒間隔で調べられ、実際に変わったときだけ読み直されます。200 を超える場合は、その間隔を使う代わりに出力でそう伝えます。
0.2026.61 — テストランナーの確認は一度だけ、実行のたびではなく
2026-06-09
追加
- テストランナーの確認は一度だけで、実行のたびではありません。 認識されるランナーが複数ある — たとえば jest の設定と
go.mod — ワークスペースでは、Run Tests with Coverage のたびに選択画面が出て、すでに済んだ決定にキー操作を求めていました。答えはワークスペースごとに記憶され、プロンプトもそう伝えます。Forget the Test Runner で質問が戻り、ワークスペースにもう存在しない記憶済みのランナーは実行されず無視されます。
変更
- 拡張機能自身のページが、すべてのコマンドを挙げます。 34 のうち 14 が表から抜け落ちていました — ここやユーザーガイドには載っていても、インストール前に読まれるページにはありませんでした。いまはすべて記載され、テストがその状態を保ちます。
0.2026.60 · ビルド 3 — 取り消しでドットがまた消える
2026-06-01
修正
- 取り消しで、編集行のドットがまた消えます。 実行後に編集されたバッファは書き換えた行に灰色のドットを表示し、カバレッジはその行から退きます。編集を取り消してもドットは残っていました — すべての変更が数えられ、テキストを元に戻す変更も同じだったからです。誰かが入力する前にバッファが保持していた内容を覚えるようになり、再びその内容になった瞬間にドットは消え、数値がまた当てはまります。
- リリース番号どうしを突き合わせます。 マニフェスト、変更履歴の先頭の項目、リリースタグはいずれもバージョンとビルドを持ち、3 つとも手で入力するため、過去にずれたことがあります。テストがそれらを比較し、項目が新しい順に並び、それぞれに実在の日付があることを確かめます。
0.2026.59 — アンロードは次の朝も続く
2026-05-12
変更
- アンロードしたトレースファイルはアンロードされたままです。 カバレッジ ビューの一覧からファイルを外しても、有効なのはそのウィンドウのあいだだけでした。何も設定していなければ検出はよく知られた名前に戻り、翌朝また
lcov.info を見つけます。それを避ける唯一の方法は、1 つを除くためにパスを設定することでした。この判断はワークスペースごとに記憶されます。ファイルを選び直すか coverageFile.paths に書けば元に戻ります — 設定が名前を挙げたファイルは決して抑えられないので、誰も言っていないのに何かが欠けることはありません。
修正
- 編集中バッファの再描画が速くなりました。 書き換えられた行の一覧は、再描画のたびに記録済みの全編集から計算し直されていたため、午後じゅう編集した長いファイルは、最後の入力から変わっていない答えに対して行数×編集数を払っていました。いまは 1 打鍵につき一度だけ計算します。
0.2026.58 · ビルド 2 — テスト実行が自分のトレースファイルを覚える
2026-05-01
変更
- テスト実行が、手で選んだときと同じように自分のトレースファイルを覚えます。 Run Tests with Coverage は実行が書き出したものを読み込み、そのあとで
coverageFile.paths に追加するか尋ねていました。手で選んだファイルは 0.2026.56 以降ひとりでにそこへ書かれており、テスト実行は同じ行為の別の入り口です。したがって同じように書きます。両方を coverageFile.rememberPicks という 1 つの設定が司り、カバレッジ ビューのトレースファイルの行が、どちらも外せる場所です。
修正
- バックグラウンドのタイマーが、拡張機能とともに止まります。 トレースファイルの監視はウィンドウとともに破棄されていましたが、その裏にある 2 秒間隔のポーリングと保留中のソース再チェックはただのタイマーで、破棄してくれるものがありません。拡張機能を無効にしたり、無効のままウィンドウを再読み込みしたりすると、それらは動き続け、もはや読む理由のないワークスペースを読み続けていました。
0.2026.57 · ビルド 4 — ラベル付きライブプレビュー、描画された国旗、選択ダイアログにすべての形式
2026-04-24
追加
- ライブプレビューが何を表示しているかを示します。 設定パネルのプレビューは 実行: coverage/lcov.info · 12 ファイル で始まり、アクティブなエディターが実行結果のカバーするファイルを表示していれば、実行結果の判定の下に アクティブなファイル: src/a.c とそのファイル自身の判定を示します。エディターとすべての読み込みに追従し、フォームの現在の内容 — 未保存の編集を含む — で判定します。パネルが前面にあるとき、カバレッジビューでのクリックはファイルを開く代わりにプレビューをそのファイルに切り替えます。
- 選択ダイアログがすべての形式を挙げます。 まずすべてのカバレッジ形式、次に LCOV、JSON(llvm-cov、Istanbul/nyc、coverage.py、SimpleCov、Coveralls、gcov、xccov、Stryker)、XML(Cobertura、JaCoCo、Clover、OpenCover、GNATcoverage、Bullseye、SonarQube、VectorCAST、TRACE32、EMMA、UCIS/UCDB、NCover、dotCover、PIT)、Go カバレッジプロファイル、gcov リスティングと Testwell CTC++ —
.lcov、.gcov、.txt、.coveragexml はもうグレーアウトされません。
変更
- ステータスバーのホバーがカラースケールをまといます。 実行とファイルのツールチップ内のメトリクスバーは
colorScale.* の 3 色を使い、しきい値が設定されたメトリクスはそのしきい値で、それ以外はスケールの区切りで段階分けされます。判定のピルは固定のステータス色のままです。
- 言語設定の描画された国旗。 0.2026.56 の国旗絵文字は Windows では 2 文字の英字として表示されます。ドロップダウンは各言語をその言語自身の名前で — Nederlands (nl) — 示し、その下に小さな描画された国旗の列が並び、クリックするとドロップダウンで選択されます。
0.2026.56 · ビルド 3 — 選択は記憶され、トレースファイルはカバレッジビューに、言語設定には国旗
2026-04-08
追加
- 選択が記憶されます。 Pick Coverage File で選んだファイルは、選んだウィンドウの中だけで有効でした。今はワークスペース設定の
coverageFile.paths に自動で入ります — ベースフォルダー配下なら相対、そうでなければ絶対パスで — ので、次のウィンドウがそれを読み込み、ウォッチャーが再読み込みします。coverageFile.rememberPicks(既定でオン)で従来の動作に戻せます。この設定の絶対パスの項目は、どこにあるファイルでも 1 つを指すようになりました。
- カバレッジビューのトレースファイル。 ツリーの上に、読み込んだトレースファイルごとに 1 行。ファイル数と、実行結果と設定から取り除くアンロードボタンが付き、横の 選択… ボタンで追加できます。最後のトレースファイルをアンロードすると実行結果が消えます。
- 言語設定の国旗。 設定パネルの言語ドロップダウンはコードだけを表示していました。各項目に国旗とその言語自身での名前が付きました — 🇳🇱 Nederlands (nl)、🇯🇵 日本語 (ja)、🌐 自動。
0.2026.55 — PHP ファイルの最終行はファイル末尾を超えたカバレッジではない
2026-03-27
修正
- PHP ファイルの最終行がファイル末尾を超えたカバレッジと数えられなくなりました。 Xdebug と PCOV は暗黙のファイル末尾 return を最後の改行の次の行に記録するため、php-code-coverage は 251 行のファイルの「252 行目」にヒットを書き込みます — 不一致チェックはこれを、末尾改行のあるすべての PHP ファイルで矛盾と呼んでいました。末尾改行の 1 行先は許容されるようになりました。それより先、または末尾改行のないファイルの先への参照は、これまでどおり矛盾です。
0.2026.54 · ビルド 2 — What Community Includes にトライアルの行
2026-03-24
追加
- What Community Includes にトライアルの行、Community エディションで。 そのビルドにはトライアルがなかったため、リストは Pro の 14 日間トライアルを開始… で始まるようになり、Pro のリスティングを開きます。続いて Pro ビルドのアクティベーションが Community ビルドの除去を提案します。どちらを選んでも Community は無料のままです。
0.2026.53 — Show Worst-Covered Folders
2026-03-03
追加
- Show Worst-Covered Folders。 Show Worst-Covered Files のフォルダー版: 配下すべてのカバレッジで各フォルダーを低い順に、エクスプローラーのバッジと同じインデックスから並べます。選ぶとフォルダーをエクスプローラーで表示します。ステータスバーメニューには
quickActions.worstCoveredFolders で。
0.2026.52 — しきい値ゲートを「問題」パネルに
2026-01-23
追加
- しきい値ゲートを「問題」パネルに。
compliance.diagnostics がオンなら、満たさなかった各 threshold.* メトリクスが「問題」に 1 件のエラーとして、満たさなかったトレースファイル上に表示され、読み込みのたびと Check Coverage Thresholds で更新され、ゲートを通過すると消えます。出荷時のステートメントしきい値が 100 なので既定ではオフです。
変更
watch.enabled の説明が確認プロンプトを約束しなくなりました。 無料層は再読み込み前に確認されると書かれたままでした — 0.2026.48 までは正しく、それ以降は違います。18 言語すべてで書き直しました。
0.2026.51 · ビルド 2 — Run Tests with Coverage
2025-12-08
追加
- Run Tests with Coverage。 ワークスペースのルートから vitest、jest、pytest、go、cargo、dotnet、maven、gradle、phpunit、ctest を認識し、ターミナルタスクでカバレッジを有効にして実行し、テストの成否にかかわらず書き出されたものを読み込み、以後はウォッチャーが読み込むよう、そのパスを
coverageFile.paths に追加することを一度だけ提案します。複数のランナーは選択肢として提示され、レシピに送られることはありません。
0.2026.50 — 編集中のバッファでカバレッジがテキストに追従
2025-10-23
追加
- 編集中のバッファでカバレッジがテキストに追従します。 実行結果を読み込んでから各バッファに加えた編集が保持され、実行結果の行番号を読むすべての表示 — ホバーのヒット数、MC/DC バー、前回実行以降の三角形、CodeLens、Next Uncovered — がそれを通して読みます: マークは行と一緒に移動し、書き換えられた行からは退き、小さな灰色の点がその理由を示します。
dirtyMarks.enabled で点をオフにできます。
0.2026.49 — 前回の実行以降を、ガターに
2025-09-26
追加
- 前回の実行以降を、ガターに。 前回の実行で実行され今回は実行されなかった各行にはエディターのガターに赤い三角形、逆の行には緑の三角形が付き、それぞれ概要ルーラーの帯とホバーでのヒット数を伴います。変化のない行には何も表示されません。
sinceLastRun.enabled でオフにできます。
変更
- 「前回の実行」の基準が再起動を越えて残ります。
history.enabled がオンなら、ウィンドウの初回読み込みでは履歴の最新の実行がその役を担うため、ウィンドウを開く前に終わったビルドでも何を変えたかが分かります — ガターでも Compare with Last Run でも。
0.2026.48 · ビルド 6 — どこでも自動で再読み込み、マークはファイルに追従、ホバーで正確な差分
2025-09-19
追加
- ファイルに対する判定が読み込み後も最新に保たれます。 これまでファイルはトレースファイルの読み込み時に一度だけカバレッジと照合され、その後は二度と照合されませんでした。午後じゅう編集しても、ガターはもう存在しないバージョンの数字を描き続けていました。今はエディターでの保存がそのファイルを即座に再確認し、エディター外からの変更 —
git checkout、フォーマッター、ジェネレーター — は少し後にディスクから再確認します。実行結果と矛盾するようになったファイルにはマークが付き、測定したバージョンを戻すチェックアウトはマークを消します。
- 正確な差分をホバーで。 ファイルがカバレッジと一致しなくなった箇所では、カバレッジビューとエクスプローラーのツールチップが何がそれを証明したかを正確に示します: トレースファイルがテキストを保持していれば現在の行とレポートが記録した行、ダイジェストを保持していれば行と失敗したチェックサム、ファイル末尾を超えたカバレッジ、レポートが示す位置にもうない関数。同じ詳細が出力チャネルにもファイルごとに 1 行ずつ書かれ、読み込み結果のどれか表示はそこへ導きます。
- エクスプローラーバッジのスイッチ。
explorerBadges.enabled(既定でオン)は、エクスプローラーで各カバー済みファイルの横にあるスコア、✓、⚠ と、メトリクスごとのホバーを隠します。ガター、ステータスバー、カバレッジビューには影響しません。
変更
- トレースファイルが変わると、すべての層が自動で再読み込みします。 2026-09-02 以降、無料層は新しいカバレッジを検出 — 読み込みますか?という確認で止まり、有料ライセンスは黙って再読み込みしていました。ビルドが終わり、数字が新しくなり、監視を有効にした人はすでにその問いに答えています — そのため確認はすべての層からなくなり、それを説明する通知もなくなりました。
- 製品が自ら行う読み込みは、無料層の 1 日の上限に数えられなくなりました。 ウォッチャーによる再読み込みや起動時の検出は、誰かが求めた読み込みではありません。それを数えると Community インストールの枠がテスト実行の午前中だけで尽き、その後は古い実行結果が何の表示もなく画面に残ることになります。上限は今後コマンドとファイル選択のみを計測します。
- タイムスタンプの変化だけではファイルにフラグが付かなくなりました。 この実行以降に N 個のファイルが変更という警告は各ソースの mtime から導かれていましたが、
git pull やフォーマッターは測定内容を変えずにすべての mtime を動かします。この警告はステータスバーのマークとともに廃止されました。ファイルは内容が実行結果と矛盾するときにだけ「変更された」と呼ばれ、ステータスバー、読み込み結果、新しい出力行 FUCINI_MISMATCH_001 はすべてそれを読みます。staleWarning.enabled は名前を保ち、内容チェックそのものを表すようになりました。
files.watcherExclude 配下のフォルダーの監視は出力で告げられます。 ビルド出力は VS Code のウォッチャーから真っ先に除外されるもので、その後は 2 秒ごとのポーリングだけが新しい実行結果に気づきます。出力チャネルはウォッチャーの開始時にフォルダーとグロブを示すようになりました。
0.2026.47 · ビルド 2 — 未解決パスの表示、初回起動時のヒント、さらに 2 つのキー
2025-08-09
追加
- 読み込むものがないワークスペース向けの初回起動ヒント。 ウォッチは既定で有効で起動時の読み込みは無音のため、まだトレースファイルのないプロジェクトに新規インストールしても何も言いませんでした。空で終わった最初の無音読み込みが、一度きり、それを伝えるようになりました。あわせて価値ある 2 つの行動を提示します: カバレッジファイルを手動で選ぶか、お使いのツールチェーンで生成する方法のレシピを開くか。手動で実行した読み込みは従来のメッセージのままです。
- Toggle Annotated Source と Load Coverage のキー。
Alt+A はアクティブなタブをソースと注釈付きビューの間で切り替え、Alt+Shift+R はカバレッジを再検出して再読み込みします(macOS では Ctrl+Alt+A / Ctrl+Alt+R)。0.2026.45 で追加した 2 つと同様に変更可能です。
変更
- ワークスペース内の何にも一致しないパスが画面上で数えられます。 どのワークスペースファイルにも解決されないトレースファイルのパスは、読み込まれても決して点灯しません — 最もよくある「動いたのに何も表示されない」です — そしてこれまで唯一の痕跡は出力チャネルの
FUCINI_REMAP_001 行と、それを直す pathRemap ルールで、読まれないままでした。読み込み結果がそれらを数えるようになり、どれ? で名前と提案ルールを、pathRemap 設定を開く でルールを置く場所を示します。 - ステータスバーメニューのファイル選択が読める形式を明示。 その説明は初回リリース時の 5 形式を挙げたままでしたが、今は lcov、Cobertura、JaCoCo から gcov、llvm-cov、TRACE32、ミューテーションレポートまで 25 形式と述べます。
0.2026.46 — エディション競合の解決策と、静かになった上限
2025-08-06
変更
- 両エディションがインストールされている場合: 指示の代わりに 2 つのボタン。 Pro と Community が両方あるとどちらも有効化できず — 同じコマンドとビューを定義しているため — それを伝えるメッセージは拡張機能ビューへの道順で終わっていました。どちらの対処もコマンド 1 つで済むため、ボタンになりました。こちらを残すはもう一方をアンインストールして再読み込みを提案し、拡張機能で両方を表示は拡張機能ビューをちょうどその 2 つで開きます。アンインストールに失敗しても再読み込みは提案されます — どちらのエディションが有効かを決めるのは再読み込みだからです。
- 使用上限は最初の 1 回だけ完全に通知され、以後はステータスバーのみ。 Community の上限に初めて達したときは、数字、プラン、テレメトリでのロック解除、ティアに含まれるものの一覧という完全な答えに値します。10 分後の 5 回目には値しません。同じセッション内で同じ上限に再び達すると、ステータスバーに 8 秒間の 1 行が表示されるだけで、何も中断しません。キーを入力するとやり直しになります — 新しいライセンスは新しい上限のセットだからです。
0.2026.45 — Next / Previous Uncovered のキー
2025-07-26
追加
- Next / Previous Uncovered にキーが付きました。 ファイルを読みながら何度も押す 2 つのコマンドで、これまでは押すたびにコマンドパレットを開いて名前を入力する必要がありました。
Alt+N で次の未カバー範囲へ、Alt+P で前へ移動します(macOS では Ctrl+Alt+N / Ctrl+Alt+P。Option は文字を入力するため)。どちらもフォーカスされたテキストエディター内でのみ有効で、他の既定と同様に Keyboard Shortcuts で変更できます。
0.2026.44 · ビルド 3 — 無料ティアの上限を 1 つの一覧で
2025-07-24
追加
- Community に含まれるものを 1 つの一覧として。 無料ティアは 8 つの操作に上限を設け 12 の機能を保留しており、それぞれの判断は各自の入口で個別に適用されていました — つまりティアの形を知る唯一の方法は、作業の途中でそれぞれの壁に順にぶつかることでした。新しいコマンド What Community Includes はすべてを一度に表示します: 上限付きの各操作とその日または月の使用済み量、保留された各機能の名前、そして上限を解除する 2 つの方法 — 有料プランかテレメトリでのロック解除。
- 疑問が生じる場所ならどこでも提示されます。 ステータスバーメニューの項目、Coverage ビューのライセンスバナーのボタン、そして Community インストールが壁に当たったときの 2 つのメッセージ — 使用上限に達しましたとこの操作は含まれていません — のボタン。行はゲートが適用するのと同じ権限セットから導かれるため、一覧に書かれていることがそのまま起こることです。
変更
- ウォッチモードが無料ティアで何をするかを明示。 ステータスバーの項目は全員に「カバレッジを自動で再読み込み」と約束していましたが、Community ではウォッチャーはその約束を守りません — 変更に気づき、確認します。項目はそこでそう述べるようになり、コマンド名は Toggle Tracefile Watch になりました。「Toggle Watch」では何を監視するのか分からなかったためです。動作自体は変わりません。
0.2026.43 · ビルド 3 — 読み込み失敗が理由を伝え、非表示ファイルが数えられる
2025-06-25
変更
- 読み込めないトレースファイルは、理由と試すべきことを伝えるようになりました。 あらゆる失敗が同じ通知 — "no coverage could be parsed. See output." — を出し、理由はコードとパーサーのメッセージとして 1 つ先のチャネルにありました。通知はファイル名から始まり、拒否を実際の内容で分類します: この拡張機能が読める形式ではない、整形式ではない(ビルドがまだ書き込み中だったのが通常の原因)、整形式だが何も記録していない(実行が計装済みコードを実行しなかった)、または読み取れなかった。パーサー自身の言葉も添えられ、複数ファイルは数えられ、出力チャネルは強制的に開かれる代わりに出力を表示ボタンの先に提示されます。
- トレースファイルに列挙されているが計測対象のないファイルが、画面上で数えられるようになりました。 宣言のみのヘッダーは 0/0 で 100% と採点される代わりに常に Coverage ビューから除外されており — その名前は出力チャネルにだけ書かれていました。読み込み結果は 計装対象のない N 個のファイルは表示されません と伝え、どれ? ボタンで名前のあるチャネルを開きます。
0.2025.42 · ビルド 3 — NCover と dotCover:行き場のなかった .NET カバレッジ
2025-06-08
追加
- NCover と JetBrains dotCover。 Coverlet の Cobertura と OpenCover はすでにここで読み込めており、新しい .NET の仕事の大半をカバーし、古い種類は一切カバーしていませんでした。今も NCover の
Coverage.xml を書き出すビルドや、dotCover で計測しているチームは、この拡張機能が開けないカバレッジをディスクに持っていました。どちらの形式もコンバータを必要としません — 両方ともすでにファイル名と行番号を持っています。 - 除外された NCover のポイントは破棄され、未実行として採点されません。
excluded="true" は測定から意図的に外されたコードを示します — [ExcludeFromCodeCoverage] のメンバー、または NCoverExplorer のフィルタです。それを未カバーとして数えると、除外がそれを正すために書かれたはずの数値を下げてしまいます。 - dotCover には
/ReportType=DetailedXML が必要です。 もう一方の XML レポートは行番号を一切持たないロールアップです。そのレポートは認識され、不明な形式として失敗する代わりに、それを解決するフラグを示して拒否されます。dotCover は文ごとに Yes/No のみを記録し、訪問回数は記録しないため、カバーされた文は 1 回のヒットとして届きます。
0.2025.41 · ビルド 4 — ミューテーションテスト:PIT と Stryker
2025-05-28
追加
- ミューテーションテスト。 カバレッジは行が実行されたことを示し、ミューテーションスコアはその行が変更されたときに何かが失敗したことを示します。テストスイートはファイルのすべての行を実行しても、注入された欠陥を一つも検知しないことがあり、どんなカバレッジ数値もそれを教えてくれません。PIT は Java、Kotlin、Scala を、Stryker は JavaScript、TypeScript、C#、Scala をカバーします。
- これはカバレッジと平均されることは決してありません。「この行が実行されたか」と「変更したときに何かが気づいたか」を混ぜても、どちらの問いにも答えられません。そのため複合スコアには一切の重みを持たず、代わりに
fuciniCoverage.threshold.mutation によって個別にゲート判定されます — デフォルトは 0 で、ミューテーションスコアは初日に超えるべき基準ではなく、上げていく目標だからです。 - 公平な実行を一度も得られなかったミュータントは、どちらの側にも数えられません。 PIT の
NON_VIABLE と Stryker の CompileError および Ignored は、ツールが作れなかった変異です。それらを未検知として数えれば、一度も提示されなかった欠陥についてスイートを罰することになります。
0.2025.40 — gcov のプレーンテキストリスト:GCC 9 より古いコンパイラ向け
2025-05-16
追加
- 注釈付きの
.gcov リスト。 gcov --json-format は GCC 9 で登場しましたが、組み込みクロスコンパイラはそれよりずっと古いことが多く、これまでの答えはまず lcov か gcovr をインストールすることでした。実行カウントには 5 通りの表記があり、そのうち数値なのは 2 つだけで、branch/call/function の注釈は自分の行ではなく隣の行に属します — これらすべてが今では正しく読み取られます。 - call 注釈は呼び出しサイトカバレッジになります。
call N returned X% はまさに 0.2025.38 で追加された関数呼び出し指標そのものであり、この形式はここに置き場所ができるずっと前からそれを運んでいました。
0.2025.39 · ビルド 2 — オブジェクトコードカバレッジ、そしてアセンブリも
2025-04-27
追加
- オブジェクトコードカバレッジ — ビルドされたバイナリのどれだけが実際に実行されたか。 ここでソースからまったく測定されない唯一の指標です。実際のターゲット上で命令ストリームを観測するデバッガから得られ、タイミングへのプローブ効果は一切ありません。また「これはアセンブリを覆うのか」という問いへの正直な答えでもあります — 手書きのアセンブリは決して計装されず、ここにある他のどの指標もそれには届きません。
- これは重みではなく要求です。 オブジェクトコードカバレッジは文カバレッジを包含します — ここでの 100% は文カバレッジの 100% を意味しますが、逆は成り立ちません — そのため複合スコアには一切の重みを持たず、代わりにしきい値でゲート判定されます。これはまさに DO-178C レベル A が MC/DC に加えて求める形です。
- 差分こそが成果物です。 行カバレッジ 100%、オブジェクトコードカバレッジ 100% 未満という結果は、ソースが説明しないコンパイラ生成コードを正確に突き止めています。適合カードは「94%」として埋もれさせず、「312 バイトが一度も実行されず、行カバレッジは 100%」と述べます。その逆 — ソースは実行されていないのにバイナリ全体が実行済みと報告される — は低いスコアではなく矛盾として報告されます。
0.2025.38 · ビルド 2 — 関数呼び出しカバレッジ、そして VectorCAST と TRACE32 が完成
2025-04-01
追加
- 関数呼び出しカバレッジ — すべての呼び出しサイトが実行されたか。 関数カバレッジとは異なる問いです。三つの呼び出しサイトのうち一つから一度呼ばれた関数は、関数カバレッジでは完全ですが、ここでは三分の一の完全さです。VectorCAST、TRACE32、Cantata はいずれもこれを報告していましたが、このモデルにはその数値を置く場所がありませんでした。
- これにより VectorCAST と TRACE32 が完成します。 以前のリリースは、分岐率を水増しすれば監査に載る数値を水増しすることになるという理由で、このデータを分岐カバレッジに折り込むことを意図的に拒否していました。両形式とも、今では常に送っていたものを読み込みます。
変更
- コンプライアンスゲートと重み付きスコアは、6 種類ではなく 7 種類の指標を認識するようになりました — 17 言語すべてで説明のある 2 つの新しい設定、
fuciniCoverage.whmWeights.functionCalls と fuciniCoverage.threshold.functionCalls です。
0.2025.37 — 関数カバレッジを場所だけでなく件数としても
2025-02-16
変更
- ツールが関数の場所を示さない場合でも、関数カバレッジは今やカウントされます。 TRACE32 の
func エクスポート、VectorCAST の自己終了型 <method> 要素、EMMA の method, % ロールアップは、いずれも CodeLens を置く場所がないまま関数数を示していました — 三つとも読み込み時に破棄されていました。宣言が存在する場所ではそれが優先ソースであり続けますが、存在しない場所ではツールが報告した数がフォールバックとして使われるようになりました。
0.2025.36 · ビルド 4 — UCIS と Aldec UCDB、そして新しいパーサーが行単位でテスト済みに
2025-02-03
追加
- UCIS と UCDB XML — シミュレータから直接得られる VHDL と Verilog。 この名前に該当する文書は二つあり、プロジェクトにはそのシミュレータが書き出した方があるため、両方読み込めます。Accellera の標準交換形式
<UCIS> と、Aldec 独自の ux:ucdb(Active-HDL と Riviera-PRO から acdb2xml が実際に生成するもの)です。文カバレッジと分岐カバレッジは反映されます。トグル、FSM、アサーション、機能カバレッジは読み込まれず、それらしか持たない文書は、空のまま読み込む代わりにその旨を伝えます。 - オープンソースの VHDL はすでにここで何も必要としていませんでした。GHDL の GCC バックエンドは
-Wc,-ftest-coverage -Wc,-fprofile-arcs で計装し、結果は gcov、gcovr、lcov のいずれかを経由します。このリリースは商用シミュレータ向けです。
0.2025.35 · ビルド 3 — EMMA XML、そしてついに Delphi にも道が開ける
2025-01-22
追加
- EMMA XML。 Delphi にはここに来る手段が一切ありませんでした — lcov もなく、Cobertura もない — DelphiCodeCoverage は
-xml でまさにこのスキーマを書き出します。これはまた、多くの古い Java ツールが今も出力しているものでもあり、一つのパーサーが一つの言語を開拓すると同時にレガシーも一掃します。 -xmllines を加えると、レポートは行単位の実際のヒット数を得るため、ガターが機能します。それがなければロールアップ率だけがあり、その場合は推測ではなくファイルの概要のみを得てガターはありません。ドット付きパッケージ名は、ファイルが Java ファミリーのソースである場合にのみディレクトリになります。Delphi のレポートでは同じフィールドがユニット名であり、それにプレフィックスを付けるとディスク上に誰も持っていないフォルダをでっち上げることになります。
0.2025.34 · ビルド 3 — Lauterbach TRACE32、エクスポート 1 件につき指標 1 つ
2025-01-01
追加
- TRACE32 カバレッジエクスポート。
COVerage.EXPORT.ListModule は、デバッガがオンターゲットのトレースから測定したものを書き出します — 計装されたソースではなく、実際のターゲット上でプロセッサが実際に実行した命令ストリームであり、タイミングへのプローブ効果は一切ありません。1 回のエクスポートは一度に 1 つの指標だけを運びます。stmt は行カバレッジに、dec/cond は分岐カバレッジに、mcdc は MC/DC になります。同じ実行の 2 つのエクスポートを読み込むと、モジュール名でマージされます。 func、call、object のカバレッジを持つエクスポートは、空のまま読み込まれる代わりに、ファイルがどの指標を保持しているかを示して名前で拒否されていました — 三つとも今ではそれぞれ 0.2025.37、0.2025.38、0.2025.39 に居場所があります。
0.2025.33 · ビルド 4 — Testwell CTC++:テキストが空白区切りでないため列位置で読み取る
2024-12-19
追加
- Testwell CTC++ の実行プロファイルリスト。
ctcpost は MON.sym と MON.dat を固定幅のテキストリストに変換します — ヨーロッパの組み込み・安全評価で Bullseye と対をなすツールであり、マルチコンディションカバレッジを測定するツールです。説明自体が数字で始まることがあるため、空白で分割するのではなく列位置で読み取ります。 - マルチコンディションは MC/DC ではなく、MC/DC として報告されません。 CTC++ は条件の組み合わせを数え、MC/DC は各条件が結果に独立して影響することが示されたかを問います。これらの数値を MC/DC のゲートの裏に置けば、監査人にその意味ではない名前の数値を渡すことになるため、ここでは実態どおり分岐カバレッジとして扱われます。
0.2025.32 · ビルド 4 — VectorCAST XML、そして静かに捨てられていた MC/DC
2024-12-08
追加
- VectorCAST XML。 VectorCAST は doctype に至るまで Cobertura レポートを書き出し、その上で通常の Cobertura では表現できない属性を追加します。つまりこれらのファイルはここですでに読み込まれ、完全に見えていました —
mcdcpair-coverage はまさにそれを生み出すためにツールを購入した層から、読み込み時に静かに捨てられていました。そのペアカウントは今や生き残ります。MC/DC ゲート、パーセンテージ、複合スコアに反映されます。 - 関数呼び出しカバレッジは意図的に近似されません。 それを分岐カバレッジに折り込めば、監査に載る数値を水増ししてしまいます。モデルにそのための名前ができるまで待っており、それは 0.2025.38 で実現します。
変更
- Cobertura リーダーは今や方言を保持します。
<coverage line-rate=…> は単一の形式ではなくファミリーであり、どの方言を読んでいるかは要素ごとに推測するのではなく、パース処理とともに引き継がれます。
0.2025.31 — Ada と Swift、そして自動で読み込み直すカバレッジ
2024-11-07
追加
- GNATcoverage XML — ついに Ada。 DO-178C の航空電子や EN 50128 の鉄道チームは、本製品の安全性重み付けスコアと MC/DC サポートがまさに想定してきた利用者ですが、これまでは
gnatcov が Cobertura も出力できる新しさでない限り、ここでは何も読み込めませんでした(しかも Cobertura は行より下の情報をすべて捨てます)。gnatcov coverage --annotate=xml はファイルではなくディレクトリを書き出します。ソースごとの *.xml を読み込んでください — index.xml を開いた場合も、不可解な失敗ではなくカバレッジの実際の在りかを案内します。部分的にカバーされた行は、未カバーの判定を含むカバー済みの行のままです。不足はブランチと MC/DC のカバレッジ、すなわち本来の場所に現れます。免除領域は除外行になり、判定不能な義務はカバー済みではなく未カバーとして数えられ、--level=stmt+mcdc では MC/DC が条件ごとに数えられて、しきい値と総合スコアを動かします。
- BullseyeCoverage と Visual Studio の
.coveragexml。 Bullseye は組込みや安全critical のチームが実際に保有する商用 C/C++ ツールです。付属の covxml を実行し、その出力を読み込んでください。主要指標は行カバレッジではなく条件/判定カバレッジで、本製品では両者を分けて扱います。さらに単一結果のプローブは 2 ではなく 1 で採点するため、完全にテストされた switch が半分しかカバーされていないと報告されることはありません。Visual Studio の .coveragexml は、Coverlet ではなく MSTest や vstest を使うチームの .NET を補完します。バイナリの .coverage は先に dotnet-coverage convert で変換してください。部分カバーの行は、いずれの経路でも失われません。
- SonarQube 汎用カバレッジ — そして Xcode についての率直な答え。 2 つの要素に 4 つの属性だけですが、重要なのは、他のどの形式も出力できないツールでもたいていこれなら出力できるからです。カバレッジツールが本拡張の知らないものだったプロジェクトにも、ようやく入口ができました。これは
xcresultparser が書き出す形式でもあり、Swift や Objective-C のプロジェクトはこの経路で入ってきます。.xcresult 自体にパーサーはなく、ドキュメントは推測させる代わりに理由を述べるようになりました — xccov が報告するのは割合であって行単位のデータではなく、行データのアーカイブは 1 ファイルずつしか読めず、しかもその文書は対象ファイル名を一切示しません。
- gzip 圧縮されたトレースファイルをそのまま読み込みます。
gcov --json-format は既定で .gcov.json.gz を書き出すため、ドキュメントが謳っていた形式こそ、多くの人が実際には読み込めない形式でした。判定は名前ではなくファイル自身のマジックバイトで行うので、.gz を失った圧縮レポートでも動作します — そして gcov のものに限らず、対応するどの形式も圧縮されたまま届いてかまいません。
- Swift と Objective-C を、Xcode 自身のレポートから。
xcrun xccov view --report --json は、iOS や macOS のビルドが追加ツールなしで生成する唯一のカバレッジ文書です。ファイル単位の割合、関数ごとの実行回数、CodeLens が得られます。行単位のデータは含まれず、Studio もそれを作り出しません。そのためこの形式ではガターは空のままです — 作り出したガターは実測のものと見分けがつきません。行単位の Swift カバレッジには llvm-cov export -format=lcov か slather をお使いください。どちらも以前から動作しています。
- Coveralls JSON — Elixir、Ruby、Python、Rust、Go、JavaScript のレポーターがいずれも書き出す形式です。行単位なのでガターも機能します。
- アクティブ日数、ゲートによるブロック、集計が属するライセンス — テレメトリを有効にしたインストールの月次利用サマリーに、この 3 つを追加しました。
削除
- コンピューター名を送信しなくなりました。
hostname は当初からテレメトリの基本項目で、あらゆるゲートの外側にあり、テレメトリを有効にしている全員から送信されていました。コンピューター名は多くの場合、個人名、座席番号、あるいは顧客のプロジェクト名であり、利用状況について OS 以上のことを何も答えてくれません。インストールはランダムなインストール ID だけで識別されるようになりました。これにより、あなたやあなたのマシンを名指しするものは何一つマシンの外に出ません。コンピューター名も、OS のユーザー名も、ホームディレクトリも、ネットワークインターフェイスも、ファイルパスも、プロジェクトのフォルダー名も、サインイン中のアカウント名もです。残るのは OS とそのリリース、アーキテクチャ — どの種類のマシンかであって、どのマシンかではありません。
- テレメトリは遅くとも 90 日以内に削除されます。 以前のポリシーは「有用な間は保持する」としか述べておらず、それは期間とは言えません。
変更
- 有償ライセンスではカバレッジが自動で読み込み直されます。トレースファイルの監視は、これまでどのエディションでもビルドのたびに「新しいカバレッジを検出しました。読み込みますか?」と尋ねることを意味していました — 答えが 1 つしかない問いを、1 時間に何度も。この確認は無償の Community の動作になり、有償ライセンスは単に読み込みます。Community は監視も検出も、これまでどおりの確認も保ちます。
- 一致しなくなったファイルは、それを裏づけた検査とともに、有償ライセンスで示されます。検出自体は制限されませんし、されません。カバレッジがもうそのファイルを表していないと伝えることは、売り物ではないからです。Community でも検出結果は届き、行は淡色のままです。有償ライセンスが加えるのは指し示す情報 — 印、エクスプローラーのバッジ、そしてその根拠となる行・関数・チェックサムです。
- テレメトリの送信内容は減り、誰のものかを示すようになりました。月次サマリーにファイルパス、プロジェクトのフォルダー名、サインイン済みアカウント名は含まれません。機能とテレメトリの交換ではメールアドレスをお伺いします。同意した方に、そのインストールが何を送信しているかをお伝えし、ご要望があれば削除するためです。
- 3 つの設定説明を修正しました。
watch.enabled、staleWarning.enabled、telemetry.enabled はいずれも実装とずれており、とりわけ telemetry.enabled は実際よりかなり多くを送信すると説明していました。
修正
- ファイル選択が、読み込める形式を隠さなくなりました。「Pick Coverage File」は
info・json・xml のみを対象にしていたため、Go の coverage.out と gcov の .gcov.json.gz — どちらも本拡張が読み込める形式 — が、まさに選択を求めるダイアログでグレー表示になっていました。
- 通常の Community インストールは、ソースの 1 ページを送信しなくなりました。注釈付きソースのサンプルを制御する判定が、実際に取引に応じたものだけでなく、すべての Community インストールを応じたものとして扱っていました。
- 読み込みごとの警告が 2 件から 1 件に。カバレッジと一致しなくなったファイルは、ほぼ必ず実行後に編集もされており、それぞれが別々に報告されていました。
- アンインストール時に OS のユーザー名とホームディレクトリを報告しなくなりました — ライセンスがそれを認めない場合に。
0.2025.30 · ビルド 3 — ビルドがすでに書いているもの
2024-10-18
追加
- Go のカバレッジプロファイル。
go test -coverprofile は Go 標準ツールチェーンが生成する唯一のカバレッジ出力です。Rust や Dart、Elixir のように頼れる lcov はありません。つまり Go プロジェクトには、この拡張機能が読めるものが何もありませんでした。プロファイルが記録するのは行ではなくブロックで、ブロックがまたぐ各行はその実行回数を受け取ります — 閉じ波かっこも含めて、go tool cover -html が強調表示するとおりです。coverage.out は探索名に加わったので、設定のない Go プロジェクトも、C プロジェクトが lcov.info を見つけるのと同じように自分のプロファイルを見つけます。
- Clover XML と OpenCover XML。 PHP プロジェクトが実際に持っているのは Clover です。
php-code-coverage は Cobertura も出力できますが、既定は Clover であり、ほぼすべての phpunit.xml がそれを設定します。つまり PHP のカバレッジはここでは読めないまま、すぐ隣で Cobertura パーサーが、ほとんど誰も生成しない出力を待っていたのです。Istanbul の clover レポーターは同じ文書を書くので、そう設定された Jest プロジェクトもカバーされます。OpenCover は .NET 側の対応物です。C# と VB.NET はすでに Cobertura として届いていましたが、Cobertura は判定を condition-coverage="50% (1/2)" という文字列に潰すため、どちらの分岐が実行されたかはパーサーが見る前に失われていました。OpenCover は分岐ごとに実行回数を保持します — 分岐の半分が網羅されていると知ることと、どちらの半分かを知ることの違いです。
- coverage.py の JSON と gcov/gcovr の JSON。 coverage.py の Cobertura・lcov エクスポートは、
# pragma: no cover の行を「網羅済み」か「未到達」のどちらかと呼ぶしかありません。「意図的に除外」に相当する語を持たないからです。この拡張機能にはその語があります — LCOV_EXCL マーカーが立てるのと同じフラグです。おかげで Python プロジェクトの pragma は、coverage.py 自身のレポートでの意味そのままにここでも扱われます。一方 GCC のカバレッジは lcov か gcovr -x を経由してしか届きませんでした。GCC がすでに生成したデータを変換するためだけに、二つ目のツールを走らせていたわけです。gcov --json-format --stdout と gcovr --json はほぼ同一の文書を出力するので、ひとつのパーサーが両方を読みます。
修正
- コメントは、そのファイルが書かれている言語で読まれます。 非コード行のスキャナーは C 向けに書かれ、すべてのファイルに適用されていました。この拡張機能が読むすべての形式が C 系の言語を表していた間は、それで正しかったのです。もうそうではありません。C のスキャナーは
# don't に出会うと、アポストロフィが文字列を開いたと見なし、閉じるところを決して見ず、コメント行をコードとして数えます — 数字が静かに少しだけ狂い、それを告げるものは何もありません。現在は Python、Ruby、シェル、Perl、R、Elixir、Julia では #、三種すべてを受け付ける PHP では三種すべて、それ以外では // と /* */ です。最後のものは未知の拡張子に対する既定のままです — #define はコードであり、これを除外するのは逆方向の誤りになります。
0.2025.29 · ビルド 4 — すべての設定に、説明を
2024-10-15
追加
- コンプライアンス関連の 13 件だけでなく、すべての
fuciniCoverage.* 設定がこのパネルに場所を得ました。 55 件すべてが、公開されている設定リファレンスと同じセクションに、同じ順序でまとめられています。設定する画面と読む画面とで、設定の居場所が食い違うことはありません。検索ボックスは名前・キー・説明で絞り込み、ジャンプリストはセクション間を移動します。フォームは実行時に拡張機能自身の同梱マニフェストから導出されます — 型、既定値、範囲、列挙値、そして文章のすべて。設定について二度書かれるものは何もなく、パネルが編集対象の拡張機能から乖離することはありません。
- 説明は、あなたが固定した言語に従います。 VS Code はマニフェストのローカライズを拡張機能の読み込み時にエディターの表示言語から解決し、拡張機能ごとに上書きする手段を提供していません。そのため英語のエディターで
fuciniCoverage.language をドイツ語にしても、設定以外はすべて翻訳されるという状態でした。パネルはこれらのファイルを自分で読んで解決するため、その指定を尊重できる唯一の場所です。
- JSON スキーマでは要求できないウィジェット。 設定スキーマには文字列がパスであることを示す手段がなく、標準 UI はピッカーを提供できません。ディレクトリを保持する 3 つの設定には 参照… ボタンが付きました。
coverageFile.paths と pathRemap は生の JSON ボックスではなく本物のリストエディターになり、colorScale の各色には 16 進値の横にスウォッチが付きます。
変更
- 保存は、変更した分だけを書き込みます。 設定が 13 件なら、保存が 13 件すべてを書いてもほとんど問題になりませんでした。55 件では、1 か所の編集が 2 行しかない
settings.json に名前空間全体を刻み込むことになります。値が実際に変わった設定だけが書き込まれ、既定値と同じ値は、拡張機能が既に提供しているものを書き直すのではなく、上書き自体を取り除きます。
- ライセンスキーは常にユーザー設定に保存され、その行がそう述べます。
license.key はアプリケーションスコープとして宣言されており、VS Code はそこからしか読み取りません。ワークスペースに書き込むのは、成功したように見えて何も変わらない保存です。リセット は選択したスコープの 13 件ではなく 55 件すべてを消去するようになったため、先に確認します。またパネルの外側での編集で読んでいた位置を失うこともなくなりました。再描画の前に比較するため、保存を押しても 55 行が先頭まで戻ることはありません。
0.2025.28 · ビルド 3 — 13 行、ひとつの判断
2024-10-12
追加
- 適合モード、7 つのしきい値ゲート、6 つの複合スコアの重みが、ひとつのエディターにまとまりました。 設定画面では互いに無関係な 13 行ですが、実際にはひとつの判断です。しきい値は、有効なモードがそれを参照しないかぎり何の働きもせず、重みは、加重ゲートが判定するのでないかぎり何の働きもしません。Coverage ビューのタイトルバーにある歯車ボタンから開く Fucini Coverage: Configure Coverage Compliance & Thresholds... は、この 3 つをまとめ、モードを選ぶその場で各モードを説明し、ゲートが何も検査しなくなる設定 — メトリックごとのしきい値を 1 つも設定していない厳格モード、しきい値が
0 の加重モード、すべて 0 の重み — を、目の前で警告として示します。
- 判定をプレビューし、VS Code を通して書き込みます。 未保存のフォームが読み込み済みの実行結果に対して出すであろう COMPLIANT / NON-COMPLIANT は、ルールの二つ目の実装ではなく拡張機能自身の適合エンジンが計算します。ゲートと食い違いうるプレビューは、プレビューがないより悪いからです。変更は通常の構成 API を通って
settings.json(ユーザーかワークスペースかは選択できます)に書き込まれるため、ファイルの整形もコメントの保持も VS Code が行います。手作業や別のウィンドウで行った編集は、実行結果が読み込まれているかどうかにかかわらず、開いているフォームに反映されます。ライセンスは不要で、Community でも Pro と同じエディターが使えます。
修正
- 更新通知のボタンが
Download && Install と表示されていました。 アンパサンドの二重化はニーモニックのエスケープで、package.json のタイトルやモーダルダイアログでは正しいものですが、通知のアクションボタンはラベルをプレーンテキストとして扱うため、書かれたとおりに 2 文字とも表示されていました。17 のすべての言語で、更新を案内されたすべての人に対してです。
0.2025.27 · ビルド 7 — ご自身で選ぶ取引
2024-09-30
変更
- テレメトリは既定でオフです。評価期間にはそのデータが必要だという理由で、既定オンの状態で出荷されていました。しかし Community ティアが、テレメトリを有効にすることをすべての Pro 機能を無償で解放する条件にした時点で、その理由は成り立たなくなりました。取引は本人が選んで初めて意味を持つものであり、誰も選んでいない取引は取引ではありません。オンにするまで何も送信されず、いずれにせよ Community は標準の機能セットで動作し続けます。
- テレメトリ設定は目的を述べ、残りはリンクで示します。以前の説明はピングが運ぶ項目をすべて列挙していました。つまりその一覧が設定とプライバシーポリシーの二か所に存在し、永久に同一であり続ける必要がありながら、そうではなくなっていたということです。現在は有効にすると何が得られるかを述べ、項目一覧についてはプライバシーポリシーへリンクします。正しく保つべき一覧が二つではなく一つになりました。
- 本リリースをインストールすると、評価期間が一度だけ再度開かれます。すでに試用期間が終了していた方には新たに 14 日間が与えられます。本リリースは評価いただいた際の条件を変更するためです。テレメトリが既定でオンの状態で過ごした試用は、現在提供している製品の試用ではありませんでした。これは意図的に、バージョンではなく一回限りのトークンに紐付けています。リリースごとにリセットすれば、更新を続ける方にとって試用期間が決して終わらないことになり、それは試用ではなく、手順が増えただけの無償ライセンスです。トークンは初回の有効化で消費され、以後は通常の規則に戻ります。有料ライセンスは影響を受けません。キーの検証は試用が参照される前に完了するためです。また Community も影響を受けません。同エディションには再度開くべき試用期間が存在しないためです。
- ライセンスキーにアンケートという代価はもうありません。アクティベーションの案内、ライセンスキー設定、試用終了時のダイアログはいずれも、キーを質問への回答と引き換えに発行されるもののように提示していました。そうではありません。キーはリクエストに応じて自動的に発行され、フィードバックアンケートは任意で、まったく別のものです。
修正
- 3 か所が依然として「2026-12-31 まで」の試用期間を約束していました。製品内にそのような期日は存在したことがありません。試用期間は 14 日間で、インストールごとに初回使用から数えます。過去 2 つのリリースがこの記述を設定の説明と README で修正しましたが、このページ自体の評価版の案内、ユーザーガイド、ライセンスツールの README には残っていました。3 つのうち最も問題だったのはユーザーガイドです。期間が「すべてのインストールに対して、世界中で、一斉に(インストールごとのカウントダウンではない)」適用されると書かれていましたが、これはまったく逆です。さらに試用終了時にカバレッジの表示が停止するとされていましたが、実際には拡張機能は無料の Community ティアに移行します。
- テレメトリの通知メールが誤ったドメインから送信されていました。
From: ヘッダーが fucini.consulting のメールボックスである一方、送信しているサーバーは fucini.software でした。まさに設定自身のコメントが警告している整合性の問題であり、メールが迷惑メールとして振り分けられたり、そのまま拒否されたりする確実な原因です。
0.2025.26 · ビルド 2 — 消さずに、灰色で
2024-08-27
変更
- レポートが名前を挙げていてもディスク上にないファイルを、あるべき場所に灰色で表示し、その理由を示すようになりました。 0.2025.25 はそうしたファイルに場所をでっち上げるのをやめました。それは正しい判断でしたが、場所ですらない相対パスを持たせたままだったため、ツリーは依然としてその先頭要素からプロジェクトを作り、サブモジュールの削除済みソース 3 つが、本来の出どころであるサブモジュールの隣に幽霊のような
app として並んでいました。食い違いは見えていて、それが狙いではあったのですが、見える場所が違ううえ、何がおかしいのかを何も語っていませんでした。
- いまは計測元のプロジェクトの中、レポートが示すフォルダーに表示されます — テーマの中間グレーで、通常の前景色ではなく斜体で描かれます。ホバーすると本来あったはずのパスが表示され、そこには何もないこと(レポート生成後に名前が変更されたか削除された可能性が高いこと)と、数値は引き続き集計されていることが示されます。何も取り除かれず、合計も動きません。その行はレポート自身の申告であり、灰色にすることが、開ける行のように見えるのを防いでいます。
- 推測はビューの内側にとどまります。 ファイルに記録されたパスは今もレポートが述べたとおりのままです。ほかのすべてがそれをキーにしているからです — 外部レポートの補強はそれと突き合わせ、テレメトリはそれを相対化し、注釈付きビューはそれを開きます — 推定の場所を渡すことは、既知のものを作り物と引き換えにすることになります。両者を結び付けるのはツリーだけで、しかも自分の場所を示さないパスに限られます。単に存在しない絶対パスは、レポートの記述をそのまま保ち、その場で灰色になります。
0.2025.25 · ビルド 4 — どこで計測されたか
2024-08-07
修正
- サブモジュールのカバレッジが、実際にサブモジュールのある場所に配置され、行から開けるようになりました。 git サブモジュールは自分のツリーの隣に自分のレポートを生成し、gcovr はそこに
<source>.</source>(「このファイルがあるディレクトリ」)と書き、その下に app/Application.cpp のようなファイル名を並べます。その . をどこにも結び付けていませんでした。パスの解決はマージの後に一度だけ行われ、その時点で実行はどのファイルがどの入力から来たのかをもう知らず、残る基準はワークスペースのルートだけでした。<workspace>/app/Application.cpp を試しても何も見つからず、すべてのパスは相対のまま残り、カバレッジビューはそれらを app という名のプロジェクトとして描いていました — 一度も場所であったことのないパスの先頭要素にちなむ名前で、どの行もファイルの存在しない場所をコピーし、開こうとしていました。
- パスはマージ前に、トレースファイルごとに解決するようになりました。 相対の
sourceRoot はそのトレースファイルが置かれたディレクトリに結び付けられるので、サブモジュールの coverage.xml の隣にある . はそのサブモジュールを意味します。それでソースが見つからない場合は、トレースファイルから上へたどります。通常の CMake 構成はカバレッジを build/ の数階層下に書き出しますが、プロジェクトがどちらの形かはレポートのどこにも記録されていないため、設定ではなくファイルシステムに答えさせます。たどるのはワークスペースのルートまでです。それより上へ行くと、素の src/main.c が同じ構成を持つ隣のチェックアウトで解決されかねません — 正しく見える誤答です。すでに絶対パスで存在するものはそのまま残るので、通常の lcov 実行は変わりません。
- サブモジュールはカバレッジビューで独立したプロジェクトのままです。 ワークスペース内で解決されるようになったファイルは、そうしなければワークスペース自身のツリーに取り込まれていました — サブモジュールのフォルダーが親のものと入り混じり、その数値が親の合計に加算されて、ひとつのコードベースを二度計測したかのようになります。各ファイルはどのルートから計測されたかを記録し、ビューはそれで分類するため、開いているフォルダーの中にあってもサブモジュールは自分の見出しと自分の合計を保ちます。もとから絶対パスの実行にはそうしたルートがなく、従来どおりに分類されます。
- レポートが名前を挙げていても存在しないファイルは、引き続き見つからないものとして報告されます。 実際にはない、もっともらしいパスを与えることはしません。すでに削除されたファイルを挙げるレポートは古いレポートであり、架空の場所に描けばそれを覆い隠してしまいます。それぞれは出力チャネルの
FUCINI_REMAP_001 に、本来あったはずのパスとともに記録されます。
0.2025.24 · ビルド 3 — シートが消えた理由
2024-07-27
変更
- 消えたシートが、その理由を伝えるようになりました。 これまではどの取り消しも同じ一行 — このプランにおけるお客様のシートは有効ではなくなりました — を表示するだけで、責めを負うべきでない人への非難のように読めていました。使用中のシート数を下回るまで縮小されたチームサブスクリプションでは、猶予期間ののちに超過分が解放されます。シートを失う人は、最も長く使っていなかったというだけで、何も悪いことはしていません。ライセンスサーバーに伝えるべきことがある場合、拡張機能はそれを伝えます。縮小されたサブスクリプションに合わせて解放されたシートは、まさにその旨を説明し、サブスクリプションを管理する人を指し示します。新しいキーをリクエスト は引き続き表示されます — 戻る道は現実にあり、その人がシートを空けた瞬間にプールには空きができるからです。
- 終了したサブスクリプションではボタンを表示しません。 失効したサブスクリプションから新しいキーを発行することはできないため、その通知の唯一の操作は失敗するほかありませんでした。それはサブスクリプションの終了ではなく、拡張機能の不具合のように読めます。今は何が起きたかを伝え、そこで止まります。このビルドが認識しない理由は、一般的な文言のままになります。ライセンスサーバーは継続的にデプロイされますが、インストール済みの拡張機能はそうではありません。未知の理由に出会うことは例外ではなく通常のことです — 生の識別子が表示されることはなく、無言になることもありません。新しい 2 つのメッセージは 17 言語すべてに翻訳されています。
0.2025.23 · ビルド 5 — 拡張機能の外へ
2024-07-17
追加
- 実行結果がようやく外へ出せます — さらに 6 つの形式で。 これまで出口は 2 つだけでした。拡張機能以外は誰も読まない Fucini JSON と、機械的には何も読まない HTML レポートです。Export Coverage Report... は形式ピッカーを開き、現在の実行を ファイル単位の CSV(行・分岐・関数・MC/DC・リージョン・インスタンス化のカバー数/合計/割合、低い順、
TOTAL 行つき)、関数単位の CSV(実行回数、実行されたか、内部の未カバー分岐、MC/DC ペア)、プルリクエストに貼る Markdown サマリー、LCOV トレースファイル、Cobertura XML、SARIF、または README 用の 自己完結型 SVG バッジ として書き出します。コマンドパレット、Covered Files ビューのタイトルバー(Generate Full HTML Report の隣)、そして quickActions.exportReport を有効にすればステータスバーのクイックメニューから使えます。
- ビューアではなくコンバーターになりました。 拡張機能はすでに lcov、llvm-cov JSON、Cobertura、JaCoCo、Istanbul/nyc、SimpleCov を読みます。LCOV と Cobertura のライターが加わり、逆方向にも進めます。JaCoCo レポート、あるいは 1 つの実行にマージした複数のレポートを読み込んで、genhtml・Codecov・Coveralls・SonarQube のすべてが受け付ける唯一のトレースファイルを出力できます。Jenkins・GitLab・Azure DevOps がそのまま取り込む XML も同様です。どちらも拡張機能自身のパーサーを往復し、行範囲は 1 行ずつ展開されるため、書き出される
LF/LH は画面上の割合を近似せず一致します。
- どのライターも、何を捨てるかを明記します。 CSV 以外はすべて非可逆で、しかも黙って失われます。MC/DC、コードリージョン、C++ のインスタンス化は LCOV・Cobertura・SARIF に表現がなく、Cobertura は行の条件がいくつカバーされたかは残しますが、どの分岐かは残しません。測定したすべてを運ぶ形式は、引き続き Fucini JSON と 2 つの CSV です。CSV では、その実行が持たない指標のセルはゼロではなく空になります。空のセルは「このツールは分岐データを報告しなかった」を意味し、
0 なら「どの分岐にも到達しなかった」を意味しますが、後から表計算ソフトでは区別できません。表計算ソフトが数式として実行してしまうもの — =、+、-、@ で始まるフィールド、つまり npm スコープ付きパスのすべて — は、書き出す前に引用符で囲んで無害化します。
- SARIF は差分に注釈を付け、バッジはネットワークを必要としません。 未カバー範囲は
warning ではなく note レベルで報告します。未カバーのコードはテストスイートについての情報であり、コードスキャンは警告をブロックすべきものとして扱うためです。ブロックするゲートは引き続き Check Coverage Thresholds です。バッジは shields.io から取得せずここで描画するので、隔離環境やオンプレミスのリポジトリでも動作し、色はガターやステータスバーと同じ colorScale から取ります。無償の Community エディションでもピッカーは開き、2 つの CSV は Export Fucini JSON と同じく 1 日 20 回まで利用できます。交換形式は有償で、このエディションが常に引いてきた線のままです — 自分の数字を読むのは無料、CI パイプラインに流し込むのは有料。
0.2025.22 · ビルド 3 — 測るものがない
2024-06-24
修正
- 計測対象が何もないファイルを、カバレッジ 100% として報告しなくなりました。 宣言だけのヘッダー(プロトタイプ、マクロ、インクルードガード)には関数本体がなく、コンパイラはカバレッジマッピングを一切出力しません。そのためゼロをゼロで割るものはすべて 100% と答えます。実際にテストされたコードの隣で、ツリーに緑色で並んでいました。両方のリーダーは、ツール自身の集計をそのファイル自身の申告として扱うようになりました — lcov の
LF/FNF/BRF、llvm-cov JSON の summary ブロックです。すべての集計がゼロのファイルは、採点されるのではなく実行結果から除外されます。集計の下にある行単位のレコードは意図的に無視します。マクロの展開はそれを定義する行に帰属させられる一方、カウントは別のファイルでそれを使う行のものであり、その借り物の行こそ、そうしたヘッダーが計測済みに見えた唯一の理由でした。全体の集計からも外れるため、表示される数値はわずかに下がり、はるかに正確になります。除外されたパスはすべて出力チャネルに記録され、すべてのファイルが宣言だけのレポートでは、それらをすべて残します。
変更
- カバレッジファイルの選択が、読み込み済みのものを置き換えるのではなく追加するようになりました。 モジュールごとにレポートを書くビルドには固定すべき単一のファイルがなく、2 つ目のモジュールのレポートを選ぶと 1 つ目が黙って外れていました。ダイアログは複数ファイルの同時選択に対応し、選ぶたびに集合へ加わり、選んだすべてが 1 回の実行としてマージされます — パネルには各プロジェクト名の下に描かれます。監視は全ファイルに及び、あるレポートの再生成が他を画面から消すこともありません。Show Loaded Coverage Files の末尾に 選択したファイルをアンロード が加わり、通常の自動検出に戻せます。
- サポート窓口が製品自身のドメインのアドレスになりました:
support@fucini.software。 アクティベーションが自動で完了しない場合、ライセンスパネルとリクエストコードの通知は fucini.consulting のアドレスを案内していました — 拡張機能内の他のリンクとは異なるドメインで、別会社のように読めます。license@fucini.software は変わりません。キーの送信元であって、書き送る宛先ではありません。
0.2025.21 — この src はどのプロジェクトのものか
2024-06-21
追加
- Coverage ビューのすべてのツリーが、どのプロジェクトのものかを示すようになりました。 0.2025.19 ではマージした実行にプロジェクトごとの名前付きブロックが付きましたが、通常の実行では依然として裸のツリーが描かれていました。ワークスペース自身のフォルダーまで切り詰められたツリーは
src から始まり、それがどの src なのかを示すものが上にありませんでした。各ツリーはルートを伴うようになりました。プロジェクトに至るまでのフォルダーは控えめな色で、プロジェクト自身のフォルダーはその後に通常の色で表示されます。ワークスペースのフォルダーまで切り詰められたツリーも、どこまで切り詰められたのかを示し、ひとつの実行にマージされた二つのコードベースが一本のツリーとして読まれることはありません。これは行ではなく見出しです。展開するものは何もなく、その下のフォルダーはこれまでどおりに折りたためます。パネルが狭いときは先頭のディレクトリから短縮されるため、プロジェクト名にあたるフォルダーが最後まで残り、ホバーすればパス全体が表示されます。
0.2025.20 · ビルド 7 — 期待どおりのメニュー
2024-06-08
追加
- Coverage ビューの行に、エクスプローラーと同じ右クリックメニューが付きました。 ファイルやフォルダーを右クリックすると、これまでは Webview 自身の「切り取り/コピー/貼り付け」が開いていました。行の上には対象になるものが何もない、3 つの項目です。いまは VS Code 本来のメニューが開きます: 開く、Open to the Side、アプリケーションを選択して開く…、Reveal in Explorer View、Reveal in File Explorer、Open in Integrated Terminal、フォルダーには フォルダー内を検索…、そして Copy Path / Copy Relative Path ── 2 つの形式が異なる Windows では、スラッシュ版が並びます。
⋯ ボタンとそのメニューはそのままで、新しいメニューの最後の項目になっています。
変更
- トレースファイルにデータがないメトリックは、もう判定されません。 ビルドに MC/DC がないのに MC/DC のしきい値があると、それが失敗として数えられていました。ビルドが実際に測定したすべてのメトリックで 100% のファイルが、そのトレースファイルの何をもってしても超えられないバーに対して「5 個中 3 個達成」と書かれたカードの下に置かれていたわけです。データのないメトリックは、判定が下されるあらゆる場所 ── ファイルごとのステータスバー、実行全体のカード、注釈付きソースのバナー、HTML レポート ── で除外されるようになりました。Check Coverage Thresholds は、欠けているメトリックを引き続き名指しで報告します。そちらが本来の居場所です。
- 測定できるものが何もないファイルは Coverage ビューから除かれます。 宣言だけのヘッダー、再エクスポートだけのファイル、型だけのモジュール ── どんなテストを書いてもその数値は変わらず、開いてもメトリックは何も表示されません。0.2025.19 ではダッシュ付きで表示していましたが、いまは単に表示されず、それで空になったフォルダーも一緒に消えます。何も測定できない実行では、これまでどおりすべてが表示されます。
修正
- ドライブレターがツリーの先頭に残ることがありました。 開いているワークスペースの下にないパスのカバレッジ ── 別プロジェクトからマージしたトレースファイルや、フォルダーを開いていないウィンドウ ── では、ツリーが
W: から、Linux や macOS では名前のない行から始まっていました。子が 1 つしかない、展開しても意味のない行です。パスがどうであれ、ファイルシステムのルートが描かれることはもうありません。各行はメニューとエディターのために本当の絶対パスを保持したままです。
0.2025.19 · ビルド 6 — 前置きではなく、パスを
2024-05-16
追加
- Coverage ビューのすべてのファイルとフォルダーに行メニューを追加。 行末のボタンは、エディター、シェル、プロンプトが求めうる4つの形式のいずれでもそのパスをコピーします — 絶対パスかワークスペースからの相対パスか、OS 本来の区切り文字かスラッシュか。さらにReveal in File ExplorerとOpen in Integrated Terminalも提供し、ファイルの場合はそのディレクトリでターミナルが開きます。スラッシュ形式の項目は本来の形式と異なる場合にのみ表示されるため、Linux と macOS ではメニューが2項目短くなります。これまでパスをコピーするには、同じファイルをエクスプローラーでもう一度探す必要がありました。
- ツリーの上にすべて折りたたむ/すべて展開するボタン。 すべて折りたたんでから目的のフォルダーだけを開くのは大きなツリーを進む最短の方法ですが、これまではフォルダーごとに1クリックかかりました。この方法で折りたたんだ状態は、手で閉じたフォルダーとまったく同じように記憶されるため、再読み込みで元に戻ることはありません。
- 複数のプロジェクトにまたがるマージ実行は、各プロジェクトをそれぞれの名前のもとに分けて描画するようになりました。 これまでは2つ目のコードベースのトレースファイルをマージすると、そのフォルダーがワークスペースのものと同じツリーにぶら下がり、
src が理由も示されずに2回現れ、2つのプロジェクトのディレクトリがアルファベット順に混ざっていました。今後は各プロジェクトが罫線で区切られた独自の名前付きブロックを持ち、ワークスペースのものが先に来ます。単一プロジェクトの実行は従来どおりで、見出しは付きません — 区別する相手がいないからです。
修正
- 実行可能なものが何もないファイルが「カバレッジ 0%」と報告されていました。
export * による再エクスポートだけ、あるいは型宣言だけのモジュールは、カバレッジツールが計測できないものにコンパイルされます — つまりトレースファイルにはそのファイルの命令が1つも記録されません。Coverage ビューはこれを 0% と評価し、本当にテストされていないコードの隣に赤で並べていました。テストを書く対象そのものが存在しないにもかかわらずです。一方エクスプローラーは同じファイルに緑の 100% を付けていました。合計がゼロだと「無のすべてが覆われている」と読めてしまうためです。どちらの数値も正しくなく、どちらも表示されなくなりました。パネルの行にはダッシュと破線の枠、そして理由を示すツールチップが付き、エクスプローラーのバッジは付きません。そうしたファイルだけを含むフォルダーも同様に無評価です。実際に計測されたものが 0% のファイルは今も 0% と表示されます — ダッシュは「計測対象なし」であって「計測して外した」ではありません。 - マージされたプロジェクトの行が誤った場所を指していました。 パスがそのプロジェクト自身のルートではなくワークスペースのルートから組み立てられていたため、ワークスペース外のファイルでは行メニューがコピーする — そして「Reveal in File Explorer」が開く — パスが、そのファイルの実在しない場所になっていました。今は実際の出所であるルートを持ちます。
変更
- Coverage ビューはワークスペースのルートを描画しなくなりました。 ツリーはファイルシステムのルートから始まり、プロジェクトより上のすべてのフォルダー — ドライブ、プロジェクトを収めているディレクトリ、そしてプロジェクト自体 — をたどってから、ようやく本当にあなたのものである最初のフォルダーに到達していました。すべての行に数段分のインデントがあり、ウィンドウタイトルがすでに示していることを繰り返していたわけです。パスはワークスペースフォルダーから始まるようになりました。行メニューがコピーし、エディターが開くのは、これまでどおり完全な絶対パスです。
0.2025.18 · ビルド 4 — 閉じたままにしておく
2024-04-30
修正
- Coverage ビューで折りたたんだフォルダーが、再読み込みのたびに再び展開されていました。 監視は既定でオンのため、カバレッジを再生成するビルドはパネルを描き直します。すべてのフォルダーが展開状態で描かれていたので、折りたたみは次のビルドまでしか持ちませんでした。大きなツリーでは、同じ作業を 1 時間に何度も繰り返すことになっていました。パネルは閉じたフォルダーを記憶し、閉じたままにするようになりました。後の実行で初めて現れたディレクトリは、ほかと同じく引き続き展開して表示されます。記憶されるのはフォルダーを閉じるという意図的な操作であり、既定の状態ではありません。
- テレメトリをオフにしても、アンインストール時のピングが止まりませんでした。 このピングは、アンインストール時に VS Code が実行する小さな独立したスクリプトが送信します。このスクリプトは VS Code API にアクセスできず、設定も読めないため、送信しないよう伝える唯一の手段は、テレメトリがオンの間に拡張機能が書き込むファイルが存在しないことです。ところが、テレメトリをオフにしてもこのファイルは削除されていませんでした。一度オンにして後からオフにした人は、アンインストール時に OS のユーザー名、ホスト名、ホームディレクトリを送信してしまうところでした。現在は、テレメトリがオフになった時点でファイルを削除します。
- Pro の更新が、直前に置き換えたキーについて成功を報告することがありました。 サイレント更新は設定されたキーを 2 回読み取っていました。1 回目は更新するかどうかを決めるため、2 回目はその後に何かを通知するかどうかを決めるためです。更新の途中で新しいキーを貼り付けると、2 回目の読み取りで別のキーが見え、「Pro サブスクリプションが更新されました」というメッセージは置き換えられた方のキーについて述べていました。現在はキーを 1 回だけ読み取ります。
変更
- 拡張機能のすべてのモジュールが、それぞれ専用のテストでカバーされるようになりました。 テストが実際にどこまで届いているかを伝えることが仕事のツールとして、きちんとやる価値があると考えました。54 のソースファイルのうち 53 が、ステートメント、分岐、関数、行のすべてで 100%、残る 1 つ (VS Code との接続層) は関数の 95% です。テストを書く過程で上記の不具合が見つかったほか、決して実行されることのない 20 余りのガードも見つかりました。すでに除外済みのチェックの後ろに置かれたフォールバックで、安全網のように見えて何も受け止めていなかったものです。これらは、失敗しえないテストで取り繕うのではなく、削除しました。
0.2025.17 — 答える価値のあるタイミングで
2024-04-27
変更
- 任意のアンケートは、実際に拡張機能を使ってから、より適切なタイミングで表示されるようになりました。 これまではインストールからの日数を数えており、実際に動作を見たかどうかではなく、いつインストールしたかを測っていました。そのため一か月放置されたインストールにも、何も見せていない製品の評価を求めていました。今後は経過時間に加えて実際のカバレッジ読み込みが必要で、エディターの起動中には表示されません。読み込みが成功するまで待ちます。さらに一年後に三回目で最後の案内が出ます。四半期内に二回では、たまたま忙しかった人が永久に対象外になってしまうためです。
- オランダ語訳の敬体をやめました。 全体で「u」と呼びかけており、開発者向けツールとしては硬く、製品の他の語り口とも合っていませんでした。すべてのオランダ語テキストが「je」を使うようになり、動詞の形も変わるため一文ずつ書き直しています。
0.2025.16 — 会社ではなく、コード
2024-04-23
変更
- アクティベーション画面が個人開発者に「company code」を求めていました。 Pro や Pro Plus を個人で購入した場合、コードはご自身のサブスクリプションから発行されます。背後に会社はなく、会社のコードを尋ねられると別の画面に来てしまったように見えます。この項目は Pro と Pro Plus では Subscription code となり、チームが実際に共有する Business と Enterprise では Company code のままです。その下の説明はもともとプランごとに書かれており、ラベルだけが共通のままでした。
0.2025.15 · ビルド 3 — あなたが決めた基準で測る
2024-03-25
修正
- 生成される HTML レポートは、設定したしきい値に関係なくコードを 100% 基準で判定していました。ステータス列はすべての指標を隠れた 100 と比較していたため、しきい値を 80 に設定してそれを満たしているプロジェクトでも、同じ実行の同じページで、赤い✗が並ぶ列のすぐ上に緑の COMPLIANT バナーが表示されていました。指標の凡例も同様でした。どちらも設定したしきい値を使うようになり、しきい値が適用されない場合は判定を作り出さず控えめなダッシュを表示します。
- コンプライアンス バナーは、実際に確認した以上のことを主張していました。既定モードは加重スコアだけを判定するにもかかわらず、常に「設定されたすべてのしきい値を満たしました」と表示していたため、下の表で明らかに未達のしきい値があっても、すべて満たしたと主張できてしまいました。現在は各モードが実際に適用した規則を示します。
- README には拡張機能が「2026-12-31 まで無料で動作する」と書かれていました。製品内にそのような日付は存在しません。以前のリリースで設定の説明は修正されましたが、Marketplace で最初に読まれる README が見落とされていました。現在は実際の動作を記載しています。初回使用から 14 日間の試用、その後は無料の Community ティアで、何かが停止する日付はありません。
0.2025.14 — 見分けがつくように
2024-03-15
変更
- 2 つのエディションが Marketplace で見分けられるようになりました。Pro と Community は同じソースツリーからビルドされており、これまではアイコンも同じでした。つまり 2 つの掲載は、同じ検索結果に並ぶ、キャプションだけが違う同一の絵だったのです。今は各エディションが独自のアイコンを持ちます。同じ図柄の下部に色帯を置き、Pro はティール、Community はスレートです。アイコンが大きく表示されるときは文字が見分けの手がかりになり、検索結果の行では文字が小さすぎて読めないため、代わりに色がその役割を果たします。
0.2025.13 — 見ているその場所から届く
2024-02-26
修正
- 注釈付きビューを開いても、開き直せなくなることがなくなりました。注釈付きソースのパネルはテキストエディターではなく Webview なので、そこにフォーカスがある間、拡張機能は「現在のファイル」を認識できませんでした。その状態で Open Annotated Source を実行すると「カバレッジを読み込んだファイルを先に開いてください」と応答します — カバレッジが明らかにあるファイルの注釈付きビューを見ている人に対して、です。現在は、目の前のパネルの背後にあるファイルにフォールバックします。同じ分岐は、2 回目の実行が存在する理由である再判定も黙って飛ばしていました。llvm-cov の HTML レポートが設定されている場合、パネルをそのレポート自身のページへ切り替えるのはまさに再実行です。つまりカバレッジのビルドがパネルを開いた後に終わった場合、それを取り込む手段がパネルからは届かなかったのです。
0.2025.12 · ビルド 2 — 本当のことを書く
2024-02-15
追加
- 有料の Pro サブスクリプションが自動的に更新されるようになりました。 アクティベーションキーは、実際に支払われた期間の分だけ有効です。チームプランは次回のチェックインで更新後の期間を受け取りますが、個人向け Pro は一度もサーバーに接続しません(完全にオフラインで動作します)。そのため更新を届けるものが何もなく、月額の購読者がどれだけ忠実に支払っていてもキftは毎月のように切れていたはずです。拡張機能は今後、自身の有効期限が近づいた数日間だけ、しかも購読による支払いを証明するコードを持っている場合にのみ、静かに新しいキーを要求します。その期間にオフラインでも損はありません。キーは本当に切れるまで使え、その後の次の試行で復元されます。
- 購入メールからのアクティベーションが 1 クリックになりました。 リンクがプランとコードを拡張機能に直接渡すので、VS Code を開いてコマンドを探し、コードを手で貼り付ける必要がありません。シートを使う前には必ず確認を求めます。コードを自分で入力する方法もこれまでどおり使えます(リンクはあくまで近道で、唯一の手段ではありません)。Community 版でも動作します。
修正
- ある設定の説明が「2026-12-31 まで無料で使えます」と書いていました。 そのような日付は製品のどこにも存在しません。実際には初回使用から 14 日間の試用期間があり、その後は無料の Community ティアに移ります。説明はいま、すべての言語でそう書かれています。
- しきい値の設定は、既定値が変わったリリース番号をもう挙げません。 文の途中のバージョン番号は、設定の説明を読んでいる人が誰も尋ねていない問いに答えているだけでした。
- いくつかの翻訳済みの説明が、翻訳版 VS Code には表示されないコマンド名を挙げていました。 アクティベーションのコマンドを英語名で参照していたため、英語以外で作業している人はコマンドパレットに存在しない文字列を探すことになっていました。
0.2025.11 · ビルド 3 — 数えるべきものを数える
2023-12-26
修正
- MC/DC の判定がないプロジェクトで全体のカバレッジが 0% と表示されることがありました。 ツールによっては、測定対象が何もない場合でも MC/DC セクションを出力します。これが「カバー対象なし」ではなく「0% カバー」と解釈されていました。総合スコアはいずれかの指標が 0 になった時点で 0 に落ちるため、完全にカバーされたプロジェクトでも 0% と表示され得ました。測定対象のない指標はスコアから完全に除外されるようになり、その行も「0 / 0 条件をカバー」と表示される代わりに非表示になります。
- ライセンス状態が 17 言語すべてに翻訳されました。 これまで英語のままで、しかも翻訳済みの文の中に埋め込まれるため、ステータスバー・通知・カバー済みファイルパネルで半分だけ翻訳された行になっていました。
- 注釈付きソース表示とカバレッジのホバー情報も翻訳されました — 適合状況の内訳表、ナビゲーションボタンとそのツールチップ、分岐と MC/DC の詳細です。
変更
- 有料の Pro サブスクリプションを専用コードで有効化できるようになりました。 キー要求のプラン一覧に Pro の項目が追加され、Pro サブスクリプションに付属するコードをようやく入力できます。個人向け Pro キーは引き続き完全にオフラインで動作し、有効化後にサーバーへ接続することはありません。
- アクティビティバーのアイコンが大きく見やすくなりました — 組み込みのアイコンと並んでも判別しやすくなっています。
- Community エディションへの切り替えは fucini.software からインストールするようになりました。 以前は Community エディションが公開されていない Marketplace を試していたため、切り替えの結果、拡張機能が一つも入っていない状態になることがありました。
0.2025.10 · ビルド 5 — より穏やかな着地
2023-12-08
変更
- 失効したサブスクリプションは、無料ティアに移行するようになりました — 個人向けのアクティベーションキーが期限切れになると、拡張機能は更新をいつまでも求め続けていました。更新しないという選択はサブスクリプションの正常な終了であって不具合ではないため、代わりに永続的な無料の Community ティアへ移行するようになりました。チームプランは意図的に対象外です。期限切れの Pro Plus、Business、Enterprise キーは引き続き期限切れとして報告されます。そちらでは管理者が更新する必要があり、会社全体を黙って無料ティアに落としてしまうと、その事実が見えなくなるためです。
修正
- テレメトリをオフにする設定が、あらゆる場合に尊重されるようになりました。 拡張機能の内部的な詳細診断モードが有効なとき、あるコードパスがこのチェックをスキップする可能性がありました。このモードは公開されたすべてのビルドでオフになっているため、実際にこの挙動を示したリリースはこれまで一つもありませんが、チェックは無条件に行われるようになりました。
- 設定は再読み込みを待たずに即座に適用されます。 パスの再マッピング、コメントの除外、git-diff によるフィルタリング、除外ファイルの集計を変更すると、カバレッジがただちに再読み込みされるようになりました — とりわけパスの再マッピングは、まさにパスが合わないからこそ使う設定だからです。
- 「Unlock Full Features」と「Switch to Community」が途中で止まることがありました。しかも、そのことは知らされませんでした。どちらも最後まで実行されるようになりました。
- アクティベーションキーは同じマシン識別子に紐づいたままになります。 一部の環境では、この識別子がセッションをまたいで再生成されることがあり、すでに発行済みのキーが無効になっていました。
0.2025.9 — 翻訳の完全化
2023-12-02
追加
- 出荷されている全17言語での翻訳の完全化 — アクティベーションおよびライセンスのダイアログ、任意のフィードバックアンケート、Community のアンロックフロー、自動更新の通知など、比較的新しいインターフェイス文字列の約100件が、英語以外のすべてのバンドルで依然として英語にフォールバックしていました。17言語すべてが、拡張機能のランタイムインターフェイス全体をカバーするようになりました。
変更
- ソースコードのコメント、ビルドスクリプトのドキュメント、パッケージングのファイルリストに対する内部整理。拡張機能に同梱されるファイル一式に変更はなく、機能面・動作面の変更もありません。
0.2025.8 — エディション同士が競合しなくなりました
2023-11-20
修正
- Pro エディションと Community エディションを同時にインストールすると、どちらか一方が起動時にクラッシュすることがありました — 両者は同じコマンドと同じカバレッジファイルビューを登録するためです。現在は事前に検出されます。もう一方のエディションもインストールされている場合、原因の分からないアクティベーション失敗ではなく、どちらかをアンインストールするよう促すメッセージとともにアクティベーションが正常に停止します。
0.2025.7 — 内部整理
2023-10-30
内部整理のリリースです。機能面の変更はありません。
0.2024.6 — Community ティアとチームプラン
2023-10-17
永続的な無料ティア、シートプールを共有するチームプラン、そして拡張機能の独立した Community エディション。
追加
- 永続的で無料の Community ティア — 14日間のトライアルが終了しても完全に停止するのではなく、拡張機能は Community に移行するようになりました。MC/DC を除くすべての機能、Full HTML Report と常設の Annotated Source ビューを毎月限定的に試せる枠、自動化しやすい一部の操作に対する余裕のある1日あたりの上限、そしてそれ以外はすべて無制限です。
- すべての機能を無料でアンロック — 新しい「Unlock Full Features」コマンドで、詳細な使用状況テレメトリと引き換えに完全で無制限の付与を受けられます。いつでも元に戻せます。任意のアプリ内フィードバックアンケートでは、代わりに30日間の全機能キーが付与されます。条件は一切ありません。
- チームプラン:Pro Plus、Business、Enterprise — これらはマシンごとに1つのキーを発行するのではなく、シートプール(会社コードとシート数)を共有します。バックグラウンドのチェックインによってシートの付与内容が最新に保たれ、取り消されたシートや削減されたシートは自動的に検出されます。
- Fucini Coverage Studio Community — 同じソースからビルドされた、独立した専用の掲載版です。有料ティアのトライアル/アクティベーション/チームプランのコードは、隠されているのではなく実際に含まれていません。ダウンロードページをご覧ください。
変更
- Community のベースラインでは、Full HTML Report の生成と常設の Annotated Source ビュー(通常表示と並列表示)が有料ティアの機能になりました — その場で切り替えるトグルビューのみが残り、従来どおり月ごとの上限が適用されます。アンロックすれば引き続きすべてが利用できます。
- Community ティアでの使用量上限の警告が、1つのプロンプトで両方の進み方を提示するようになりました。有料プランを見るか、テレメトリでアンロックするかです。
修正
- 詳細で個人を特定しうるテレメトリ(OS のユーザー名、ホームディレクトリ、CPU/RAM のスペック、ネットワークインターフェイス、レポートやソースの全内容)は、Community またはテレメトリと引き換えの無料付与でのみ送信されるようになりました — ローカルのテレメトリ設定にかかわらず、有料の Pro/Pro Plus/Business/Enterprise ライセンスから送信されることは決してありません。
- 以前のビルドをすでに実行していたインストールが、アップグレードしたというだけで新しいトライアル期間を与えられることはなくなりました — 以前のトライアルがすでに終了していた場合は、正しく Community ティアに移行します。
- 更新通知、ダウンロードの進捗、エラーメッセージが、内部ビルド番号を漏らす代わりに、プレーンな
Major.Year.Minor バージョン(VS Code の拡張機能ビューに表示されるものと同じ)を表示するようになりました。例:0.2024.6.2 ではなく 0.2024.6。
0.2024.5 — きめ細かなライセンスキー
2023-09-03
アクティベーションキーで機能ごとに個別の上限を設定できるようになり、ライセンス管理者はダッシュボードからきめ細かく調整したキーを手動で発行できます。
追加
- 機能ごとの使用量上限 — アクティベーションキーで、共有された1つのカバレッジ読み込み上限ではなく、各機能/操作ごとに独立して上限を設定できるようになりました(例:HTML レポートのエクスポートを月1回まで)。既存のキーはこれまでどおり動作します。
- キーの手動発行 — ライセンス管理者は、エディタ内のアンケート以外の経路で受け取ったリクエストコードに対して、付与する機能、有効期限、機能ごとの上限を正確に選んでキーを手動で発行できるようになりました。メールアドレスが指定されていれば、キーは自動的にメールで送信されます。
0.2024.4 — 更新フィードの信頼性
2023-07-24
特定の企業プロキシの背後にいるユーザーから新しいリリースが見えなくなるキャッシュのバグを修正します。
修正
- 自動更新フィードの信頼性 — 更新マニフェストは厳格な no-cache ヘッダー付きで配信されるようになりました。これにより、fucini.software と読み手の間にあるキャッシュプロキシが、新しいリリースを隠す古いコピーを返すことはなくなりました。
0.2024.3 — 軽微な修正とパフォーマンス改善
2023-07-13
小規模なメンテナンスリリースです。いくつかの軽微なバグ修正とパフォーマンスの改善が含まれます。
修正
- バグ修正 — 軽微なバグ修正と安定性の改善。
- パフォーマンス — カバレッジの読み込みと表示におけるわずかなパフォーマンス改善。
0.2024.2 — 自動アクティベーション
2023-06-20
アクティベーションキーは自動的に発行・適用されるようになりました — メールを待つ必要はもうありません。
評価版リリース。各インストールには初回使用から数えて、すべての機能が使える無料の 14 日間試用期間があります。その後は停止するのではなく、無料の Community ティアに移行します。ライセンスキーはリクエストに応じて自動的に発行されます。詳細 →
変更
- 自動アクティベーション — キーのリクエスト時に短いアンケートが送信され、受け取ったキーが設定に自動的に適用されるようになりました。メールのやり取りは不要です。
- より迅速な更新 — 更新リクエストでは使用状況・要望に関する質問のみが行われます。以前のリクエストの連絡先情報は再利用され、再度尋ねられることはありません。
- 固定された評価期間 — 試用期間は、インストールからの従来の14日間のカウントダウンに代わり、全員について2026年12月31日まで続くようになりました。
- ローカライズされたアクティベーションフロー — 更新用アンケートとアクティベーション確認メッセージが、拡張機能の他の部分と同様にサポートされている18言語すべてに翻訳されました。
0.2024.1 · ビルド 3 — よりスマートな更新チェック
2023-06-02
この拡張機能は、fucini.softwareとVS Codeマーケットプレイスの両方をチェックし、常により新しいバージョンを提供するようになりました。
修正
- デュアルソースの更新チェック — fucini.softwareとVS Codeマーケットプレイスの両方に問い合わせ、新しい方のバージョンを提供します。
0.2024.0 — 初回リリース
2023-04-26
Fucini Coverage Studio の最初の一般公開リリースです。業界標準のトレースファイルを取り込み、単一の正規モデルに正規化し、実行結果を決定論的にマージして、VS Code 標準の Test Coverage API を通じてレポートするネイティブ VS Code カバレッジです。
追加
- 複数フォーマットの取り込み — LCOV、llvm-cov JSON、Cobertura XML、JaCoCo XML、Istanbul/nyc、SimpleCov JSON を自動検出。
- 決定論的マージ — 複数のトレースファイルを、記録された由来情報とともに1回の実行にまとめ、読み込み順序に関わらず安定した結果を保証。
- ネイティブなカバレッジUI — 行/ブランチ/関数のガター、概要ルーラー、組み込みの Test Coverage パネル。
- MC/DCカバレッジ — ホバー時の判定ごとの内訳と、オプションの色付きマージンガター。
- 複合スコア — 行、ブランチ、関数、リージョン、MC/DC、C++インスタンス化にわたるSIL重み付き加重調和平均。
- コンプライアンス判定 —
strict、whm、both、either モードによる COMPLIANT / NON-COMPLIANT 判定。
- パスの再マッピング、差分カバレッジ、Explorerバッジ、プロジェクト全体のステータスバー。
- エディタ内解析 — 関数CodeLens、ブランチホバー、デッドコード警告、古いカバレッジの警告、Next/Previous Uncovered。
- カバー済みファイルビュー、HTMLレポート、履歴とトレンド、watchモード、Fucini JSONエクスポート。