目的
普段仕事ではClaude Codeを使っていますが、聞いたことはあるが触ったことはなかったのでopencodeでの開発環境を作ってみようと思ってトライしてみました。ついでにローカルLLMもちゃんと使ってみようと思います。
環境準備はClaudeのチャットで質問しながら進めています。
opencodeは以下からcurlで入れました。
https://opencode.ai/ja
一応コマンドは以下です。
curl -fsSL https://opencode.ai/install | bash
使用モデルと設定ファイルの中身
今回GLM-4.7-Flashを使ってみようと思い、色々試したのですがモデルの挙動など色々と問題があり不採用としました(意味不明な返答を延々と返してくるなど)。そこで今回は安定をとってモデルは以下の4bit,MLX版のqwen3.6-35b-a3b-mlxを使うことに。
ハードはMacBook ProのM3 Proでメモリが36GBモデルなので動かせそうです。
基本KVキャッシュなどはオフのままのデフォルトの設定で、コンテキスト長だけマックスにしています。後述の設定ファイルの方でmax値は制御しています。

configは以下のように記載して.config/opencode/opencode.jsonとして配置しています。モデル名とlm-studioのローカルAPIのURLだけ設定したような形です。
途中ファイル名が間違えていてconfig.jsonになっていたのですが、途中で公式に合わせたファイル名に直しています。
{
"$schema": "https://opencode.ai/config.json",
"model": "lmstudio/qwen3.6-35b-a3b-mlx",
"default_agent": "coding",
"share": "disabled",
"enabled_providers": ["lmstudio"],
"provider": {
"lmstudio": {
"npm": "@ai-sdk/openai-compatible",
"name": "LM Studio (local)",
"options": {
"baseURL": "http://localhost:1234/v1",
"apiKey": "lm-studio"
},
"models": {
"qwen3.6-35b-a3b-mlx": {
"name": "qwen3.6-35b-a3b-mlx (local)",
"limit": { "context": 28000, "output": 4096 }
}
}
}
},
"agent": {
"coding": {
"model": "lmstudio/qwen3.6-35b-a3b-mlx",
"temperature": 0.2,
"top_p": 0.8,
"steps": 20,
"description": "lmstudio model for coding",
"mode": "primary"
},
"heavy": {
"model": "lmstudio/qwen3.6-35b-a3b-mlx",
"temperature": 0.1,
"top_p": 0.8,
"steps": 40,
"description": "lmstudio model for complex tasks",
"mode": "primary"
}
}
}
AGENTS.md
あと全体共通のエージェントの挙動は.opencodeの直下にAGENTS.mdとして置くようです。とりあえずClaudeとかCodexっぽく動くようなAGENTS.mdを考えてとClaudeにお願いしたものをそのまま使用しています。
# AGENTS.md
## 基本姿勢
- 推測で答えない。ファイル、設定、依存関係は必ずツールで確認してから言及する
- 確認していない技術スタック、API、ライブラリ、コマンドを前提として語らない
- 不明な点は「未確認」と明示する。もっともらしい推測で埋めない
- 与えられていない指示を仮定しない
## 作業の進め方
- ファイルを編集する前に必ずその内容を読む
- 依頼されたタスクのみ実行する。ついでの改善や追加提案は求められるまで行わない
- 3ファイル以上に影響する変更、または設計判断を伴う変更は、着手前に計画を提示して確認を取る
- 曖昧な要求は推測で進めず質問する。ただし質問は一度に1つまで
- タスク完了後は変更内容を1〜2文で要約して停止する。次の作業を勝手に始めない
## コードを書くとき
- 既存コードの規約(命名、フォーマット、ディレクトリ構成、エラー処理)に合わせる。
自分の好みを持ち込まない
- 新規ファイルの作成より既存ファイルの編集を優先する
- 依存パッケージを勝手に追加しない。必要なら提案して確認を取る
- README やドキュメントを頼まれていないのに作らない
- コメントは既存コードの粒度に合わせる。自明な処理への説明は書かない
- エラーを握りつぶさない。呼び出し元が判断できる形で返す
- 秘密情報(APIキー、トークン、認証情報)をコードに直書きしない
## 検証
- 変更後はテストとリンタを実行し、結果を報告する
- テストを通すために、テスト自体を削除・スキップ・改変しない
- 実行していないコマンドの結果を報告しない。推測の出力を書かない
- 失敗したら原因を特定してから直す。試行錯誤で通ったものを成功として報告しない
## 実行してはいけない操作
以下は確認なしに実行しない:
- `git push`、force push、`git commit --amend`、`git reset --hard`
- `main` / `master` への直接コミット
- ファイルやディレクトリの削除
- 本番環境、外部サービス、課金が発生する操作
- 環境変数や設定ファイルの破壊的な書き換え
## 応答のしかた
- 前置きと結びの挨拶を書かない。本題から始める
- 過剰な謝罪や自己評価を書かない
- 「〜しましょうか」と提案するより、依頼された作業を実行する
- 作業内容の説明より、実際にツールを使って作業する
動作確認
opencode
適当なフォルダで、上記コマンドでClaude Codeのように起動したので、疎通確認でhelloと打ってみました。ちゃんと挨拶も返ってきたので動作確認で、最近のLLMのトレンドをまとめさせてみます。

保存されたHTMLを開くといい感じ。動作確認なので、内容は細かくみていませんが綺麗にまとまっています。

下の方でレイアウト崩れがあるけど、修正指示で対応可能な範囲内です。

感想
無事にローカルLLMを使った開発環境ができました。
パッと動作確認で簡単な資料を作らせてみましたが、qwenのモデルは全然使えそうです。これから複雑な設計やコーディングを試したらまた印象は変わるかもしれないですが、色々遊べそうです。
設定ファイルについても、まだ簡単なAGENTS.mdくらいしか作っていないので、これから色々試してみようと思います。
