コンテンツにスキップ

フォーマッター

OpenCode は、ファイルの書き込みや編集後に言語別のフォーマッターを使用してファイルをフォーマットできます。フォーマッターはデフォルトで無効になっています。OpenCode で実行するには、まず設定で有効にする必要があります。


内蔵フォーマッター

OpenCode は、一般的な言語やフレームワーク向けの複数の内蔵フォーマッターを提供します。以下は、フォーマッター、支持されているファイル拡張子、必要なコマンドまたは設定オプションの一覧です。

フォーマッター拡張子要件
air.Rair コマンドが利用可能
biome.js, .jsx, .ts, .tsx, .html, .css, .md, .json, .yaml 他biome.json(c) 設定ファイルが必要
cargofmt.rscargo fmt コマンドが利用可能
clang-format.c, .cpp, .h, .hpp, .ino 他.clang-format 設定ファイルが必要
cljfmt.clj, .cljs, .cljc, .edncljfmt コマンドが利用可能
dart.dartdart コマンドが利用可能
dfmt.ddfmt コマンドが利用可能
gleam.gleamgleam コマンドが利用可能
gofmt.gogofmt コマンドが利用可能
htmlbeautifier.erb, .html.erbhtmlbeautifier コマンドが利用可能
ktlint.kt, .ktsktlint コマンドが利用可能
mix.ex, .exs, .eex, .heex, .leex, .neex, .sfacemix コマンドが利用可能
nixfmt.nixnixfmt コマンドが利用可能
ocamlformat.ml, .mliocamlformat コマンドが利用可能と .ocamlformat 設定ファイルが必要
ormolu.hsormolu コマンドが利用可能
oxfmt (実験的).js, .jsx, .ts, .tsxpackage.jsonoxfmt 依存関係と実験的環境変数フラグが必要
pint.phpcomposer.jsonlaravel/pint 依存関係が必要
prettier.js, .jsx, .ts, .tsx, .html, .css, .md, .json, .yaml 他package.jsonprettier 依存関係が必要
rubocop.rb, .rake, .gemspec, .rurubocop コマンドが利用可能
ruff.py, .pyiruff コマンドが利用可能(設定が必要)
rustfmt.rsrustfmt コマンドが利用可能
shfmt.sh, .bashshfmt コマンドが利用可能
standardrb.rb, .rake, .gemspec, .rustandardrb コマンドが利用可能
terraform.tf, .tfvarsterraform コマンドが利用可能
uv.py, .pyiuv コマンドが利用可能
zig.zig, .zonzig コマンドが利用可能

フォーマッターが有効な場合、プロジェクトの package.jsonprettier があると、OpenCode は一致するファイルに prettier を使用します。


動作原理

OpenCode がファイルを書き込みまたは編集し、フォーマッターが有効な場合:

  1. ファイル拡張子を一連の有効なフォーマッターと照合します。
  2. 適切なフォーマッターコマンドをそのファイルに対して実行します。
  3. フォーマットの変更を適用します。

このプロセスは、有効なフォーマッターに対してバックグラウンドで実行されます。


設定

OpenCode 設定の formatter セクションでフォーマッターを有効化和つたりカスタマイズしたりできます。

すべての内蔵フォーマッターを有効にするには、formattertrue に設定します。

{
  "$schema": "https://opencode.ai/config.json",
  "formatter": true
}

オブジェクトを使用して、内蔵フォーマッターを有効に保ちながらオーバーライドやカスタムフォーマッターを設定できます。

{
  "$schema": "https://opencode.ai/config.json",
  "formatter": {}
}

各フォーマッター設定は以下をサポートします:

プロパティタイプ説明
disabledbooleantrue に設定するとフォーマッターが無効になります
commandstring[]フォーマットを実行するコマンド。カスタムフォーマッターでは必須、内蔵ではオプション
environmentobjectフォーマッター実行時に設定する環境変数
extensionsstring[]このフォーマッターが処理するファイル拡張子

いくつかの例を見てみましょう。


フォーマッターの無効化

formatter を省略すると、すべてのフォーマッターが無効になります。他の設定で有効にした後にすべてのフォーマッターを無効にするには、formatterfalse に設定します:

{
  "$schema": "https://opencode.ai/config.json",
  "formatter": false
}

特定のフォーマッターを無効にするには、disabledtrue に設定します:

{
  "$schema": "https://opencode.ai/config.json",
  "formatter": {
    "prettier": {
      "disabled": true
    }
  }
}

カスタムフォーマッター

environmentextensions などのオプションで内置フォーマッターを設定できます。カスタムフォーマッターを追加するには、commandextensions を指定します:

{
  "$schema": "https://opencode.ai/config.json",
  "formatter": {
    "prettier": {
      "command": ["npx", "prettier", "--write", "$FILE"],
      "environment": {
        "NODE_ENV": "development"
      },
      "extensions": [".js", ".ts", ".jsx", ".tsx"]
    },
    "custom-markdown-formatter": {
      "command": ["deno", "fmt", "$FILE"],
      "extensions": [".md"]
    }
  }
}

コマンドの $FILE プレースホルダーは、フォーマットされるファイルのパスに置き換えられます。