Formatters
OpenCode は言語固有のフォーマッターを使用します。
OpenCode は、ファイルが書き込まれたり編集されたりした後に、言語固有のフォーマッターを使ってファイルをフォーマットできます。フォーマッターはデフォルトで無効になっています。OpenCode が実行する前に、設定で有効にしてください。
Built-in
OpenCode には、人気のある言語やフレームワーク向けの組み込みフォーマッターがいくつか付属しています。以下は、フォーマッター、サポートされるファイル拡張子、そして必要なコマンドや設定オプションの一覧です。
| Formatter | Extensions | Requirements |
|---|---|---|
| air | .R | air コマンドが利用可能 |
| biome | .js, .jsx, .ts, .tsx, .html, .css, .md, .json, .yaml, その他多数 (opens in a new tab) | biome.json(c) 設定ファイル |
| cargofmt | .rs | cargo fmt コマンドが利用可能 |
| clang-format | .c, .cpp, .h, .hpp, .ino, その他多数 (opens in a new tab) | .clang-format 設定ファイル |
| cljfmt | .clj, .cljs, .cljc, .edn | cljfmt コマンドが利用可能 |
| dart | .dart | dart コマンドが利用可能 |
| dfmt | .d | dfmt コマンドが利用可能 |
| gleam | .gleam | gleam コマンドが利用可能 |
| gofmt | .go | gofmt コマンドが利用可能 |
| htmlbeautifier | .erb, .html.erb | htmlbeautifier コマンドが利用可能 |
| ktlint | .kt, .kts | ktlint コマンドが利用可能 |
| mix | .ex, .exs, .eex, .heex, .leex, .neex, .sface | mix コマンドが利用可能 |
| nixfmt | .nix | nixfmt コマンドが利用可能 |
| ocamlformat | .ml, .mli | ocamlformat コマンドが利用可能で、.ocamlformat 設定ファイルがある |
| ormolu | .hs | ormolu コマンドが利用可能 |
| oxfmt (Experimental) | .js, .jsx, .ts, .tsx | package.json に oxfmt 依存関係があり、実験的な環境変数フラグがある |
| pint | .php | composer.json に laravel/pint 依存関係がある |
| prettier | .js, .jsx, .ts, .tsx, .html, .css, .md, .json, .yaml, その他多数 (opens in a new tab) | package.json に prettier 依存関係がある |
| rubocop | .rb, .rake, .gemspec, .ru | rubocop コマンドが利用可能 |
| ruff | .py, .pyi | ruff コマンドが設定とともに利用可能 |
| rustfmt | .rs | rustfmt コマンドが利用可能 |
| shfmt | .sh, .bash | shfmt コマンドが利用可能 |
| standardrb | .rb, .rake, .gemspec, .ru | standardrb コマンドが利用可能 |
| terraform | .tf, .tfvars | terraform コマンドが利用可能 |
| uv | .py, .pyi | uv コマンドが利用可能 |
| zig | .zig, .zon | zig コマンドが利用可能 |
フォーマッターが有効になっている場合、プロジェクトの package.json に prettier があれば、OpenCode は一致するファイルに対して prettier を使用します。
How it works
OpenCode がファイルを書き込んだり編集したりし、フォーマッターが有効になっている場合、OpenCode は次のことを行います:
- ファイル拡張子を、有効なすべてのフォーマッターと照合します。
- ファイルに対して適切なフォーマッターコマンドを実行します。
- フォーマットの変更を適用します。
このプロセスは、有効なフォーマッターに対してバックグラウンドで実行されます。
Configure
OpenCode 設定の formatter セクションを通じて、フォーマッターを有効化・カスタマイズできます。
すべての組み込みフォーマッターを有効にするには、formatter を true に設定します。
{
"$schema": "https://opencode.ai/config.json",
"formatter": true
}組み込みフォーマッターを有効にしたまま、オーバーライドやカスタムフォーマッターを設定するには、オブジェクトを使用します。
{
"$schema": "https://opencode.ai/config.json",
"formatter": {}
}各フォーマッターの設定では、次の項目をサポートしています:
| Property | Type | Description |
|---|---|---|
disabled | boolean | フォーマッターを無効にするには true に設定します |
command | string[] | フォーマットを実行するためのコマンド。カスタムフォーマッターには必須、組み込みフォーマッターには任意です。 |
environment | object | フォーマッターの実行時に設定する環境変数 |
extensions | string[] | このフォーマッターが処理すべきファイル拡張子 |
いくつか例を見てみましょう。
Disabling formatters
formatter が省略されると、すべてのフォーマッターが無効になります。別の設定で有効になった後にすべてのフォーマッターを無効にするには、formatter を false に設定します:
{
"$schema": "https://opencode.ai/config.json",
"formatter": false
}特定のフォーマッターを無効にするには、disabled を true に設定します:
{
"$schema": "https://opencode.ai/config.json",
"formatter": {
"prettier": {
"disabled": true
}
}
}Custom formatters
組み込みフォーマッターは、environment や extensions などのオプションで設定できます。カスタムフォーマッターを追加するには、command と extensions を指定します:
{
"$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 プレースホルダーは、フォーマット対象のファイルのパスに置き換えられます。