3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

OpenCode をWindowsで使ってみた。opencode.json設定編

3
Last updated at Posted at 2026-02-19

はじめに

前回記事にてWindows環境にOpenCodeのインストールと実行まで解説しました。

使ってみると気付くのですが、ファイル書き込み、読み込み、コマンド実行がすべての権限が付与された状態です。
初期状態としてはあまり好ましい状態とはいえませんので、設定から権限を編集してみようと思います。
また、その他のおすすめ設定についても解説します。

注意

この記事は2026年2月時点のものです。更新も活発ですので数ヶ月後には変わっている可能性があることに注意してください。

設定の記述方法

opencode.jsonに記述します。
ありがたいことに、コメント付きJson(Jsonc)が使えます。
スキームはこちらを参照 https://opencode.ai/config.json

設定の配置場所と優先順位

  1. グローバル設定 (~/.config/opencode/opencode.json) - ユーザー全体への設定
  2. プロジェクト設定 (プロジェクト内の opencode.json) - プロジェクト固有の設定

の順で読み込まれます。
つまり、プロジェクト設定はグローバルをオーバーライドできます。

今回はグローバル設定で解説します。
Windows環境であれば、C:\Users\ユーザ名\.config\opencode\opencode.jsonになります。
おそらく存在しないのでファイルを作成しましょう。

prmissionの設定方法

まず最初にスキーマ"$schema": "https://opencode.ai/config.jsonを入力しましょう。
そして、permissionにそれぞれの権限を入力します。
"allow"(自動許可)/ "ask"(都度確認)/ "deny"(拒否)の3タイプです。
デフォルトはexternal_directoryおよびdoom_loopを除き、すべて"allow"です。

コマンド実行(bash)については、"*": "ask"で、すべてのコマンドを確認としつつ、ホワイトリスト的に自動許可していくのが良いと思います。

詳細についてはこちらを参照ください。

opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "permission": {
    "edit": "ask", // ファイル編集は都度確認
    "websearch": "deny" // web検索無効
    "bash": {
      "*": "ask", // すべてのコマンド実行を都度確認
      "ls *": "allow" // ホワイトリスト lsコマンドは許可
    }
}

provider設定例

APIサービスを利用して、好きなモデルを使用することができます。
私はAPIサービスのPoeを使っていますので、以下のように設定しました。

opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "provider": {
    "local": {
      "npm": "@ai-sdk/openai-compatible",
      "name": "Poe LLM",
      "options": {
        "baseURL": "https://api.poe.com/v1",
        "apiKey": "dummy" //←ここに取得したAPIキーを入れる
      },
      "models": {
        "minimax-m2.5": {
          "name": "minimax-m2.5",
        }
      }
    }
  }
}

生のAPIキーをそのまま記載するのは怖いですね。
特にプロジェクトファイルにopencode.json配置する場合は、apiキーを環境変数にしましょう。
{env:VARIABLE_NAME} を使用して環境変数を置き換えられます。

"apiKey": "{env:POE_API_KEY}"

opencode.json設定例

Bashコマンドを抑制しつつ、web検索を不許可にしてみた例です。
providerはLM Studio(local LLM)からgpt-oss-20bを指定しています。

opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  // ============================================================
  // プロバイダー設定(ローカルLLM)
  // ============================================================
  "provider": {
    "local": {
      "npm": "@ai-sdk/openai-compatible",
      "name": "Local LLM",
      "options": {
        "baseURL": "http://127.0.0.1:1234/v1", // open-ai api互換なので/v1を忘れずに
        "apiKey": "dummy"
      },
      "models": {
        "openai/gpt-oss-20b": {
          "name": "gpt-oss-20b(local)", //←表示名
          "limit": {
            "context": 32000,
            "output": 8192
          }
        }
      }
    }
  },
  // ============================================================
  // パーミッション設定
  // ============================================================
  // 各ツールに "allow"(自動許可)/ "ask"(都度確認)/ "deny"(拒否)を指定
  // bash はコマンドパターン別に細かく制御可能
  "permission": {
    "read": "allow",
    "edit": "allow",
    "glob": "allow",
    "grep": "allow",
    "list": "allow",
    "bash": {
      "*": "ask",
      "ls *": "allow",
      "npm run *": "allow", // ← 開発する言語・コードに応じて、実行コマンドを許可していく。
      "cat *": "allow",
      "git status": "allow",
      "git diff *": "allow",
      "git log *": "allow",
    },
    "task": "allow",
    "webfetch": "deny", // 指定URLが見れるでのwebfetchも不許可
    "websearch": "deny", // web検索を不許可
    "codesearch": "allow",
    "todowrite": "allow",
    "todoread": "allow",
    "question": "allow",
    "lsp": "allow", //lspはOPENCODE_EXPERIMENTAL_LSP_TOOL=trueにのみ適用される。
    "skill": "ask",
    // ツールがプロジェクトの作業ディレクトリ外のパスにアクセス(デフォルト: ask)
    "external_directory": "ask", 
    // 同じ入力で同じツール呼び出しが 3 回繰り返されたとき(デフォルト: ask)
    "doom_loop": "ask" 
  },
  // ============================================================
  // ファイルウォッチャー除外設定
  // ============================================================
  "watcher": {
    "ignore": [
      "node_modules/**",
      ".git/**",
      "vendor/**",
      "dist/**",
      "build/**",
      "*.log",
      ".opencode/**",
      "__pycache__/**",
      ".next/**",
      "coverage/**"
    ]
  },
}

環境変数の設定

OpenCodeの起動前に環境変数を設定することで、機能の拡張や実験的な機能が使えます。
詳細はこちら。https://opencode.ai/docs/ja/cli/

例えばOPENCODE_EXPERIMENTAL_LSP_TOOLでLSPの実験的機能が使用可能です。

LSP機能 説明 false(STD) true
diagnostics(診断) エラー・警告などの診断情報をLLMに提供
goToDefinition(定義へ移動) シンボルの定義箇所へジャンプ
findReferences(参照検索) シンボルが参照されている箇所を一覧取得
hover(ホバー情報) 型情報やドキュメントコメントを取得
documentSymbol(ドキュメントシンボル) ファイル内のシンボル一覧を取得
workspaceSymbol(ワークスペースシンボル) プロジェクト全体のシンボルを検索
goToImplementation(実装へ移動) インターフェースなどの実装箇所へジャンプ
prepareCallHierarchy(コールハイアラーキー準備) 関数呼び出し階層の解析を開始
incomingCalls(被呼び出し一覧) ある関数を呼び出している箇所を取得
outgoingCalls(呼び出し一覧) ある関数が呼び出している関数を取得

Windows環境であれば、以下のように設定します。

$env:OPENCODE_EXPERIMENTAL_LSP_TOOL = "true"
opencode

永続的ではないので、ウィンドウを閉じると再度設定する必要があります。

おわりに

ということで最低限ですがopencodeの設定が完了しました。
次回記事はサブエージェントの使い方を解説しようと思います。

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?