OpenCode フォーマットツール

OpenCode は、ファイルの書き込みまたは編集のたびに、自動的に対応する言語のフォーマットツールを使用してファイルをフォーマットし、生成されたコードが常にプロジェクトのコードスタイルに適合するようにします。プロセス全体はバックグラウンドで静かに完了し、手動操作は一切必要ありません。


動作原理

OpenCode がファイルを書き込みまたは編集するとき、以下の手順で自動的にフォーマットを実行します:

  1. 書き込みまたは編集されたファイルの拡張子を検出します(例:.ts、.py、.goなど)
  2. 拡張子を有効なすべてのフォーマットツールと照合します
  3. 一致したフォーマットコマンドをそのファイルに対して実行します
  4. フォーマット結果を自動的にファイルへ書き戻します

例えば、プロジェクトに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"]
    }
  }
}
その他の拡張