概要
2025年10月9日にリリースされたBiome v2.3で「Vue、Svelte、Astroの完全サポート」が謳われました。
しかし、実際にはスクリプトとテンプレートをまたぐ変数参照の追跡に対応しておらず、noUnusedVariablesやnoUnusedImportsの誤検知が発生します。
この記事では、なぜこの問題が起きるのか、その背景と現状について解説します。
v2.3のリリース内容
2025年10月9日にBiomeのv2.3がリリースされました。
公式のブログには「Vue、Svelte、Astroを完全サポート」とあります。
v2.3以前は<script>や---の中(以降スクリプト側と呼びます)だけをサポートしていて、HTML的な部分(以降テンプレート側と呼びます)はサポートされていませんでした。
以下はv1.6で部分的にサポートされた際のブログ記事です。
今回のアップデートによって、Vue、Svelte、AstroでESLint + Prettierの組み合わせからBiomeだけに移行できるかと思ったのですが、まだ上手くいきませんでした。
何が起きるのか
具体的にはスクリプト側の中で定義された変数がテンプレート側だけで使用されている場合noUnusedVariablesの警告が出たり、importしたものをテンプレート側だけで使用している場合noUnusedImportsの警告が出たりします。
つまり、スクリプト側で完結しているときは問題ないのですが、テンプレート側をまたぐ場合に警告が出る、ということです。
なぜこの問題が起きるのか
この問題はBiomeの現在の実装が「言語をまたいだリント」に対応していないことに起因しています。
公式ドキュメントのLanguage supportページには、以下のような記載があります。
Lint rules that work across embedded languages aren't supported yet.
そして具体的な例として、.vueファイルでnoUnusedVariablesが偽陽性を出すケースが示されています。
<script setup>
const greeting = "Hello";
</script>
<template>
<div>{{ greeting }}</div>
</template>
この例ではgreeting変数はテンプレート側で使用されていますが、Biomeはスクリプト部分のみを解析するため、「greetingが使用されていない」と判断してしまいます。
実際にGitHub上でもIssue #7139として、Vue SFCでテンプレート側のみで使用されている関数に対してnoUnusedVariablesの誤検知が発生することが報告されています。
v2.3で「完全サポート」と謳われているのは、テンプレート側のフォーマットとリントが可能になったという意味であり、スクリプト側とテンプレート側をまたいだ変数参照の追跡までは含まれていないということです。
Biome公式の認識と今後の対応
ただしこの現象自体はBiome公式も認識しており、今後改善される見込みです。
公式のchangelogにはこのような記載があります。
Now that the main architecture is stable and working, in the upcoming patches and minors we will also fix possible inaccuracies and edge cases coming from existing lint rules, such as
noUnusedVariablesinside<script>blocks or frontmatter.
回避策について
現時点での回避策としては以下が考えられます。
1. 該当するルールを特定のファイルに対してオフにする
biome.jsonのoverridesを使って、.vue、.svelte、.astroファイルに対してのみ該当するルールをオフにすることができます。
{
"overrides": [
{
"linter": {
"rules": {
"correctness": {
"noUnusedVariables": "off",
"noUnusedImports": "off"
}
}
}
}
]
}
ただし、この方法ではスクリプト側でのミスに気づきづらくなってしまうというデメリットがあります。
2. ESLint + Prettierの併用を続ける
BiomeとESLint + Prettierを併用し、Vue/Svelte/AstroファイルについてはESLint + Prettierを使い続けるという選択肢もあります。
ツールが増えることで設定が複雑になりますが、確実にリントできます。
まとめ
2025年12月現在、BiomeのVue/Svelte/Astroサポートは以下の状況です。
- テンプレート側のフォーマットとリントは可能になった
- スクリプトとテンプレートをまたぐ変数参照の追跡は未対応で、
noUnusedVariablesやnoUnusedImportsの誤検知が発生する - ESLint + PrettierからBiomeへの完全移行はまだ難しい
Biome公式もこの問題を認識しており、今後のアップデートで改善される見込みです。
現時点でBiomeへの移行を検討している場合は、この制限を理解した上で判断することをおすすめします。
私はこのリリースの直後に喜び勇んで変更を適用してみたのですが、上手く行かずに悩み、結局「今はまだBiomeだけではESLint+Prettierをリプレイスできない」に辿り着きました。
ちょっとした失敗談ですが、誰かの役に立てば幸いです。