OpenCode フォーマットツール
OpenCode は、ファイルの書き込みまたは編集のたびに、自動的に対応する言語のフォーマットツールを使用してファイルをフォーマットし、生成されたコードが常にプロジェクトのコードスタイルに適合するようにします。プロセス全体はバックグラウンドで静かに完了し、手動操作は一切必要ありません。
動作原理
OpenCode がファイルを書き込みまたは編集するとき、以下の手順で自動的にフォーマットを実行します:
- 書き込みまたは編集されたファイルの拡張子を検出します(例:
.ts、.py、.goなど) - 拡張子を有効なすべてのフォーマットツールと照合します
- 一致したフォーマットコマンドをそのファイルに対して実行します
- フォーマット結果を自動的にファイルへ書き戻します
例えば、プロジェクトにpackage.json含まれるprettier依存関係があれば、OpenCode が自動的に検出し、編集のたびに.js、.ts、.cssなどのファイルを prettier でフォーマットします。追加の設定は一切不要です。
内蔵フォーマットツール
OpenCode は、主流の言語とフレームワークをカバーするフォーマットツールを組み込みでサポートしており、2つのカテゴリに分けられます:
- コマンドが利用可能であれば有効化:対応するコマンドをシステムにインストールするだけで、OpenCode が自動的に検出して使用します
- プロジェクトの設定ファイルまたは依存関係が必要:プロジェクトに特定の設定ファイルまたは依存パッケージを含める必要があります
| フォーマットツール | 対応ファイル拡張子 | 有効化条件 |
|---|---|---|
air |
.R |
airコマンドが利用可能 |
biome |
.js .jsx .ts .tsx .html .css .md .json .yamlなど |
プロジェクトにbiome.json 或 biome.jsonc設定ファイルが存在する |
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コマンドが利用可能 |
複数のフォーマットツールが同じ拡張子をサポートする場合(例えば、
.rsはcargofmtとrustfmtにサポートされ、.rbもrubocopとstandardrbにサポートされている場合)、OpenCode はプロジェクトにインストール済みのツールに基づいて自動的に選択します。明示的に指定したい場合は、以下の設定で不要なフォーマットツールを無効化できます。
設定ファイルの構造
フォーマットツールのカスタム設定はopencode.jsonのformatterフィールドに記述します。キー名はフォーマットツール名(内蔵テーブルの名前と一致)、値はそのツールの設定オブジェクトです:
例
"$schema": "https://opencode.ai/config.json",
"formatter": {
// フォーマットツール名: 設定オブジェクト
"prettier": {
// ここに prettier の設定項目を記入してください
}
}
}
各フォーマットツールは以下の設定項目をサポートしています:
| 設定項目 | 型 | 説明 |
|---|---|---|
disabled |
boolean |
に設定するとtrueこのフォーマットツールを無効化でき、残りの設定項目は無視されます |
command |
string[] |
フォーマットを実行するコマンド配列。コマンド内では$FILEプレースホルダーを使用でき、実行時にフォーマット対象ファイルの完全なパスに置き換えられます |
environment |
object |
フォーマットツール実行時に注入される環境変数。キーと値のペア形式 |
extensions |
string[] |
このフォーマットツールが処理するファイル拡張子のリスト(.を含む。例:".ts") |
フォーマットツールの無効化
1、すべてのフォーマットツールを無効化する
OpenCode にどのファイルも自動フォーマットさせたくない場合は、formatter直接設定できますfalse:
例
"$schema": "https://opencode.ai/config.json",
"formatter": false // すべてのフォーマットツールをグローバルに無効化し、ファイル書き込み後はフォーマットを実行しません
}
2、特定のフォーマットツールを無効化する
特定のフォーマットツールだけを無効化したい場合は、対応するツールの設定オブジェクトでdisabledに設定しますtrue他のフォーマットツールには影響しません:
例
"$schema": "https://opencode.ai/config.json",
"formatter": {
"prettier": {
"disabled": true // prettier のみ無効化します。他のフォーマットツール(ruff、gofmt など)は正常に動作します
}
}
}
カスタムフォーマットツール
を使用してcommand、environmentとextensions設定項目を指定することで、内蔵フォーマットツールのデフォルト動作を上書きしたり、OpenCode にまだ内蔵されていないフォーマットツールを追加したりできます。
1、内蔵フォーマットツールのコマンドを上書きする
例えば、prettier に特定のパラメータを指定し、特定の拡張子のみを処理するように制限します:
例
"$schema": "https://opencode.ai/config.json",
"formatter": {
"prettier": {
"command": ["npx", "prettier", "--write", "$FILE"],
// command 配列内の $FILE はプレースホルダーで、実行時にフォーマット対象ファイルの完全なパスに置き換えられます
// 実際の実行例:npx prettier --write /your/project/src/index.ts
"environment": {
"NODE_ENV": "development" // prettier 実行時に注入される環境変数
},
"extensions": [".js", ".ts", ".jsx", ".tsx"]
// デフォルトの拡張子を上書き:この4種類のファイルにのみ prettier を実行し、.html、.css などは処理しない
}
}
}
2、カスタムフォーマットツールを追加する
使用しているフォーマットツールが内蔵リストにない場合は、任意の名前を指定して追加できます。起動コマンドと処理するファイル拡張子を指定するだけでOKです:
例
"$schema": "https://opencode.ai/config.json",
"formatter": {
"custom-markdown-formatter": { // カスタム名(任意に命名可能。内蔵ツールと競合しなければOK)
"command": ["deno", "fmt", "$FILE"],
// deno fmt でファイルをフォーマットします。$FILE は実際のファイルパスに置き換えられます
"extensions": [".md"] // このフォーマットツールは .md ファイルにのみ実行します
}
}
}
3、複数のフォーマットツールを同時に設定する
例
"$schema": "https://opencode.ai/config.json",
"formatter": {
"prettier": {
"command": ["npx", "prettier", "--write", "$FILE"],
"environment": {
"NODE_ENV": "development"
},
"extensions": [".js", ".ts", ".jsx", ".tsx"]
},
"ruff": {
"disabled": true // プロジェクトで ruff を使用しないため、無効化します
},
"custom-markdown-formatter": {
"command": ["deno", "fmt", "$FILE"],
"extensions": [".md"]
}
}
}