フォーマッター
OpenCode は、ファイルの書き込みや編集後に言語別のフォーマッターを使用してファイルをフォーマットできます。フォーマッターはデフォルトで無効になっています。OpenCode で実行するには、まず設定で有効にする必要があります。
内蔵フォーマッター
OpenCode は、一般的な言語やフレームワーク向けの複数の内蔵フォーマッターを提供します。以下は、フォーマッター、支持されているファイル拡張子、必要なコマンドまたは設定オプションの一覧です。
| フォーマッター | 拡張子 | 要件 |
|---|---|---|
| air | .R | air コマンドが利用可能 |
| biome | .js, .jsx, .ts, .tsx, .html, .css, .md, .json, .yaml 他 | biome.json(c) 設定ファイルが必要 |
| cargofmt | .rs | cargo fmt コマンドが利用可能 |
| clang-format | .c, .cpp, .h, .hpp, .ino 他 | .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 (実験的) | .js, .jsx, .ts, .tsx | package.json に oxfmt 依存関係と実験的環境変数フラグが必要 |
| pint | .php | composer.json に laravel/pint 依存関係が必要 |
| prettier | .js, .jsx, .ts, .tsx, .html, .css, .md, .json, .yaml 他 | 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 を使用します。
動作原理
OpenCode がファイルを書き込みまたは編集し、フォーマッターが有効な場合:
- ファイル拡張子を一連の有効なフォーマッターと照合します。
- 適切なフォーマッターコマンドをそのファイルに対して実行します。
- フォーマットの変更を適用します。
このプロセスは、有効なフォーマッターに対してバックグラウンドで実行されます。
設定
OpenCode 設定の formatter セクションでフォーマッターを有効化和つたりカスタマイズしたりできます。
すべての内蔵フォーマッターを有効にするには、formatter を true に設定します。
{
"$schema": "https://opencode.ai/config.json",
"formatter": true
}
オブジェクトを使用して、内蔵フォーマッターを有効に保ちながらオーバーライドやカスタムフォーマッターを設定できます。
{
"$schema": "https://opencode.ai/config.json",
"formatter": {}
}
各フォーマッター設定は以下をサポートします:
| プロパティ | タイプ | 説明 |
|---|---|---|
disabled | boolean | true に設定するとフォーマッターが無効になります |
command | string[] | フォーマットを実行するコマンド。カスタムフォーマッターでは必須、内蔵ではオプション |
environment | object | フォーマッター実行時に設定する環境変数 |
extensions | string[] | このフォーマッターが処理するファイル拡張子 |
いくつかの例を見てみましょう。
フォーマッターの無効化
formatter を省略すると、すべてのフォーマッターが無効になります。他の設定で有効にした後にすべてのフォーマッターを無効にするには、formatter を false に設定します:
{
"$schema": "https://opencode.ai/config.json",
"formatter": false
}
特定のフォーマッターを無効にするには、disabled を true に設定します:
{
"$schema": "https://opencode.ai/config.json",
"formatter": {
"prettier": {
"disabled": true
}
}
}
カスタムフォーマッター
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 プレースホルダーは、フォーマットされるファイルのパスに置き換えられます。