コンテンツにスキップ

Biomeの設定

このガイドでは、Biomeの設定方法を理解するために役立ちます。 Biomeの設定ファイルの構成と、Biomeがどのように設定を解決するかを説明します。 あなたがすでに設定方法について詳しい場合は、利用可能なすべてのオプションの詳細が記載された設定リファレンスを参照してください。

Biomeでは、CLIのオプションか biome.json または biome.jsonc の設定ファイルを使って動作をカスタマイズできます。 設定ファイルをそれぞれのプロジェクトに作成することを推奨しています。 これにより、CLIおよびBiomeと連携したエディタにおいてチームのメンバが同じ設定を使うことを保証できます。 設定ファイルで利用可能なオプションの多くはCLIでも利用できます。

Biomeはツールチェーンであるため、設定は提供されるツールごとに整理されています。 現時点では、Biomeはフォーマッタ、リンタ、import文のソート(import文の整理とも呼ばれます)の3つのツールを提供しています。 これらのツールはデフォルトですべて有効になっています。 <tool>.enabled フィールドによっていくつかを無効にできます:

biome.json
{
"$schema": "https://biomejs.dev/schemas/2.0.0-beta/schema.json",
"formatter": {
"enabled": false
},
"linter": {
"enabled": false
},
"assist": {
"enabled": false
}
}

2つ以上の言語に適用されるオプションは対応するツールのフィールドの中に配置されています。 言語に固有のツールのオプションは <language>.<tool> の下に配置されています。 特定の言語について一般のオプションを上書きすることもできます。 また、言語によってツールを有効または有効にすることもできます。 以下の例では、一般のオプション formatter.indentStyleformatter.lineWidth をすべての言語に設定しています。 加えて、javascript.formatter の中ではJavaScript固有のオプション quoteStyle を設定し、formatter.lineWidth を上書きしています。 JSONファイルについてはフォーマッタを無効にしました。

biome.jsonc
{
"formatter": {
"indentStyle": "space", // デフォルトは `tab`
"lineWidth": 100 // デフォルトは `80`
},
"javascript": {
"formatter": {
"quoteStyle": "single", // デフォルトは `double`
"lineWidth": 120 // `formatter.lineWidth` を上書き
}
},
"json": {
"formatter": {
"enabled": false
}
}
}

Biomeは最も近い設定ファイルを見つけるために自動探索を利用します。 作業ディレクトリとその親ディレクトリから biome.json または biome.jsonc ファイルを見つけます。 いずれの設定も見つからない場合は、Biomeのデフォルトを適用します。 biome.jsonbiome.jsonc の両方が同じフォルダにある場合は、biome.json を優先します。

以下は例です:

  • ディレクトリapp
    • ディレクトリbackend
      • biome.json
      • package.json
    • ディレクトリfrontend
      • biome.json
      • ディレクトリlegacy
        • package.json
      • ディレクトリnew
        • package.json
  • app/backend/package.json で実行されたBiomeのコマンドは app/backend/biome.json の設定ファイルを使います
  • app/frontend/legacy/package.json または app/frontend/new/package.json で実行されたBiomeのコマンドは app/frontend/biome.json の設定ファイルを使います

extends フィールドは設定を複数のファイルに分割することを可能にします。 この方法により、異なるプロジェクトやフォルダとの間で共通の設定を共有できます。

以下は common.json 設定ファイルを継承した設定を行う方法を示した例です:

biome.json
{
"extends": ["./common.json"]
}

extends に定義されたエントリは biome.json ファイルの定義されたパスから解決されます。 記載された順に処理され、後に記載されたファイルの設定がその前の設定を上書きします。

Biomeは node_modules/ ディレクトリから設定ファイルを解決できます。 従って、パッケージから設定ファイルをエクスポートして、複数のプロジェクトでそれをインポートできます。

そのようにするためには、まず “共有された” Biomeの設定を作成する必要があります。 パッケージ @org/shared-configs から設定ファイルを指定子 @org/shared-configs/biome で共有することを考えましょう。 このパッケージの package.jsonexports エントリを作成する必要があります:

package.json
{
"name": "@org/shared-configs",
"type": "module",
"exports": {
"./biome": "./biome.json"
}
}

@org/shared-configs がプロジェクトに正しくインストールされていることを確認し、biome.json を以下の例のように更新します:

biome.json
{
"extends": ["@org/shared-configs/biome"]
}

Biomeは @org/shared-configs/ を作業ディレクトリから 解決 しようとします。 作業ディレクトリは:

  • CLIを利用している場合、スクリプトを実行するディレクトリです。 一般的にこれは package.json ファイルの場所と同じです
  • LSPを利用している場合、プロジェクトのルートディレクトリです

解決アルゴリズムの詳細な情報については、Node.jsのドキュメントを参照してください。

Biomeが処理するファイルまたはディレクトリを制御する最初の方法は、それらをCLIで列挙することです。 以下のコマンドでは、 file1.js および src ディレクトリ内のすべてのファイルのみをフォーマットします。 ディレクトリは再帰的に探索されます。

Terminal window
biome format file1.js src/

Biomeの設定ファイルはどのファイルが処理されるかを調整するのに利用できます。 include で処理するファイルを明示的に列挙し、ignore を使用して処理しないファイルを列挙できます。 includeignoresrc/**/*.js などのglobパターンを受け入れます。 どのglob文法がサポートされているかについては関連するセクションを参照してください。 include は常に ignore よりも先に適用されます。 これにより、一部のファイルを含めたり、含めたファイルの一部を無視したりできます。

Biomeは、すべてのツールに適用されるグローバルな files.include および files.ignore フィールドを提供します。 <tool>.include および <tool>.ignore によって、ツールレベルでファイルを含めたり無視したりすることもできます。 これらはグローバルな files.include および files.ignore を上書きしないことに注意してください。 files.include および files.ignore は、ツールの include および ignore よりも先に適用されます。

次のような設定を考えます:

biome.json
{
"files": {
"include": ["src/**/*.js", "test/**/*.js"],
"ignore": ["**/*.min.js"]
},
"linter": {
"ignore": ["test"]
}
}

そして、以下のコマンドを実行します:

Terminal window
biome format test/

このコマンドは、test ディレクトリにおいて .js 拡張子で終わり .min.js 拡張子で終わらないファイルをフォーマットします。 ディレクトリがCLIで列挙されていないため、src 内のファイルはフォーマットされません。

次のコマンドを実行すると、test ディレクトリはリンタに対して明示的に無視されているため、ファイルはリントされません。

Terminal window
biome lint test/

Biomeは、作業ディレクトリから相対的にglobを解決します。 作業ディレクトリは通常、CLIコマンドを実行するディレクトリです。 つまり、設定ファイルがコマンドを実行するのとは別のディレクトリに配置されている場合は、特に注意する必要があります。 エディタ(LSP)の場合、作業ディレクトリはプロジェクトのルートディレクトリです。

2つのディレクトリ backend/frontend/ と、先ほど紹介したBiomeの設定ファイルを含むプロジェクトを考えてみましょう。 frontend/ ディレクトリ内では、package.json がBiomeのフォーマッタを実行する format スクリプトを指定します。

  • ディレクトリbackend
  • biome.json
  • ディレクトリfrontend
    • package.json
    • ディレクトリsrc
    • ディレクトリtest
frontend/package.json
{
"name": "frontend-project",
"scripts": {
"format": "biome format --write ./"
}
}

frontend/package.json からスクリプト format を実行すると、そのスクリプトにおける作業ディレクトリは frontend/ になります。 src/**/*.jstest/**/*.js のglobは、frontend/ を “ベース” ディレクトリとします。 従って、frontend/src/frontend/test/ のファイルのみがフォーマットされます。

biome.json
{
"files": {
"include": ["src/**/*.js", "src/**/*.ts"],
"ignore": ["test"]
},
"formatter": {
"indentStyle": "space"
}
}

拡張子ではなくファイルの名前に基づいて特別に扱われる、いくつかの既知のファイルが存在します。 現在は既知のファイルはJSONライクなファイルのみですが、新たなパーサをサポートした場合はリストを拡張して他の種類も含める可能性があります。

以下のファイルは JSON ファイルとして、オプション json.parser.allowCommentsjson.parser.allowTrailingCommasfalse にした状態でパースされます。

  • .all-contributorsrc
  • .arcconfig
  • .auto-changelog
  • .bowerrc
  • .c8rc
  • .htmlhintrc
  • .imgbotconfig
  • .jslintrc
  • .nycrc
  • .tern-config
  • .tern-project
  • .vuerc
  • .watchmanconfig
  • mcmod.info

以下のファイルは JSON ファイルとして、オプション json.parser.allowCommentstrue に、json.parser.allowTrailingCommasfalse にした状態でパースされます。 これは、これらのファイルを使用するツールがコメントの削除のみを行うためです。

  • .ember-cli
  • .eslintrc.json
  • .jscsrc
  • .jshintrc
  • tslint.json
  • turbo.json

以下のファイルは JSON ファイルとして、オプション json.parser.allowCommentsjson.parser.allowTrailingCommastrue にした状態でパースされます。 これは、これらのファイルを使用するツールがそのような設定を受け入れるようになっているためです。

  • .babelrc
  • .babelrc.json
  • .devcontainer.json
  • .hintrc
  • .hintrc.json
  • .swcrc
  • api-documenter.json
  • api-extractor.json
  • babel.config.json
  • deno.json
  • devcontainer.json
  • dprint.json
  • jsconfig.json
  • jsr.json
  • language-configuration.json
  • tsconfig.json
  • typedoc.json
  • typescript.json

globパターンはファイル名の集合を指定します。 Biomeは次のglobをサポートしています:

  • * は0個以上の文字にマッチします。パス区切り文字 / にはマッチしません。
  • ** はディレクトリとファイルに対して再帰的にマッチします。 このシーケンスは単一のパスコンポーネントでなければなりません。 したがって、**ab** はどちらも無効であり、エラーになります。 連続する * 文字が2つ以上続くシーケンスも無効です。
  • [...] は括弧内の任意の文字にマッチします。 Unicodeの順序による文字の範囲も指定できます。 例えば、[0-9] は0から9までの任意の文字を指定します。
  • [!...][...] の否定です。つまり、括弧内に含まれない任意の文字に一致します。

いくつかの例です:

  • dist/** は、distディレクトリと、その中のすべてのファイルにマッチします。
  • **/test/** は、場所に関係なく、test という名前のディレクトリの下にあるすべてのファイルにマッチします。例: dist/testsrc/test
  • **/*.js は、すべてのディレクトリ内の拡張子 .js で終わるすべてのファイルにマッチします。

Biomeが利用するglobライブラリは、すべてのglobが **/ 接頭辞を持つものとして扱います。 つまり、src/**/*.js**/src/**/*.js は同一として扱われます。 これらは src/file.jstest/src/file.js の両方にマッチします。