OpenCode+DS4で、ローカルAIコーディングエージェント環境を試してみた
DeepSeek V4 Flashに特化することで、高速かつ省メモリの推論エンジンDS4が登場したので、OpenCodeと組み合わた環境を作成し、試してみました。試した環境はMacBook M4 Max(128GB)です。この記事では、環境構築の仕方と試しに動かした結果を紹介します。
OpenCodeとは
OpenCodeは、ターミナル、IDE、デスクトップのどこからでもアクセスできる、強力なオープンソースのAIコーディングエージェントです。
最大の特徴は、モデルや環境を選ばない「究極の汎用性」にあります。Models.devを経由して75以上のLLMプロバイダーと連携でき、手元のローカルモデルから最新のクラウドモデルまで、タスクに最適な知能を選択してコード作成を支援させることが可能です。
- オープンソース
GitHubで15万人以上のスターを獲得しているコミュニティ主導のプロジェクトであり、特定のプラットフォームに依存しません - マルチモデル対応
Claude、GPT、Geminiといった主要モデルから、ローカルLLMまで、75以上のプロバイダーのモデルを自由に切り替えて利用可能です - 多様なインターフェース
ターミナル(CLI)、デスクトップアプリ、IDE拡張機能など、開発者の好みのワークフローに統合できます - プライバシー重視
コードやコンテキストデータを保存しない設計となっており、機密性の高いプロジェクトでも安心して利用できます - 既存サブスクリプションの活用
GitHub CopilotやChatGPT PlusのアカウントをそのままOpenCode経由で利用できるため、追加コストを抑えられます
今回は、ターミナル(CLI)で利用してみます。
DS4 (DwarfStar 4) とは
DwarfStar 4(DS4)は、DeepSeek V4 Flashという特定のモデルにのみ照準を絞った、極めて限定的で強力なネイティブ推論エンジンです。
一般的なGGUFランナーやフレームワークとは異なり、特定のモデル専用の実行パスを構築することで、従来の汎用ツールでは難しかった「100万トークンの長大コンテキスト」や「効率的な思考(Thinking)モード」をローカル環境で実現します。
特に、MacBookの高速SSDをKVキャッシュの保存先として活用する独創的なアプローチにより、メモリ消費を抑えつつ、 frontierモデルに近い知能をパーソナルな環境で提供することを目指しています。
- 専用設計
汎用性を捨て、DeepSeek V4 Flashモデルに特化することで、Metal(Mac)やCUDA(Linux)での実行性能を最大限に引き出した推論エンジンです - 「思考」の最適化
モデル特有の「推論(Thinking)」プロセスを効率化。問題の複雑さに応じて思考の長さを調整するため、実用的な速度で推論機能を利用できます - 長大なコンテキスト
100万トークンのコンテキスト窓に対応。高度に圧縮されたKVキャッシュ技術により、MacBookなどのローカル環境でも長大な文脈を扱えます - ディスク活用
「KVキャッシュはメモリ(RAM)にあるもの」という常識を覆し、高速なSSDを積極的に活用する設計を採用しています - 動作環境
96GB〜128GBのメモリを搭載したMacBookやMac Studio、およびCUDA対応環境をターゲットとしています
簡単に言えば、DeepSeek Flashモデルに絞って効率化をはかった言語モデル動作環境です。
環境構築
OpenCodeをインストールする
Macの場合は、Homebrewを利用して簡単にインストール可能です。brewがインストールされている場合は以下のコマンドで一発でインストールできます
brew install anomalyco/tap/opencodeHomebrewをインストールしていない場合は、以下の記事を参考にインストールしてください。

DS4をインストールする
DS4は、Githubからクローンし、自身でコンパイルする必要があります。
まず、クローンします。
git clone https://github.com/antirez/ds4.gitクローンしたフォルダに移動して、以下の手順で構築します。
モデル(DeepSeek)をダウンロードする
以下のコマンドで、DeepSeekをダウンロードします。
./download_model.sh q2-imatrix # 96/128 GB RAM machines, imatrix-tuned q2ダウンロードされるのは、DS4専用のモデルです。
専用モデルは、単なる圧縮版ではなく、ルーティングや共有エキスパートといったモデルの根幹となる部分は高品質なまま維持し、影響の大きいMoEセクションのみに高度な非対称量子化(2-bit)を施すという設計がなされています。
これにより、100GBを切るようなメモリ環境でも、コーディングタスクを正確にこなすことが可能となります。
コンパイルする
コンパイルはmakeコマンド一発です。
makeこれで、ds4やds4-serverという実行ファイルが生成できます。
試しに使ってみる
とりあえず、正常に動作するかds4で確認できます。
./ds4上記を実行すると>>が表示されるので、ここに入力します。

メモリを見ると、回答中にメモリが一気に増加し、その後すぐに解放されるようです。しかし、いろいろ立ち上げているというのもありますが(ブラウザやエディタなどを複数)、メモリが128GBでカツカツです。
生成速度は、自動で30.24 token/s、低電力モードで13.79 token/sでした。ファンが回るのがいやなので普段は低電力モードで使っているのですが、13 token/sだと少し遅いかなという印象です。

OpenCode + DS4を組み合わせる
ds4-serverを起動する
ds4フォルダに移動して、ds4-serverを起動します。とりあえず、公式の案内の通りのパラメータにします。
./ds4-server --ctx 100000 --kv-disk-dir /tmp/ds4-kv --kv-disk-space-mb 8192パラメーターを見るとコンテキスト長が10万、キャッシュフォルダが/tmp/ds4-kv、キャッシュのサイズが8192MBとなっているようです。
起動すると以下のようなメッセージが表示されます。

フォルダを作成
まず、OpenCodeを使うためにフォルダを作成します。フォルダ名はなんでも良いです。
opencode.jsonを配置
作成したフォルダにopencode.jsonという名前で以下の内容のファイルを作成します(公式の開設にある設定ファイルのままです)。
{
"$schema": "https://opencode.ai/config.json",
"provider": {
"ds4": {
"name": "ds4.c (local)",
"npm": "@ai-sdk/openai-compatible",
"options": {
"baseURL": "http://127.0.0.1:8000/v1",
"apiKey": "dsv4-local"
},
"models": {
"deepseek-v4-flash": {
"name": "DeepSeek V4 Flash (ds4.c local)",
"limit": {
"context": 100000,
"output": 384000
}
}
}
}
},
"agent": {
"ds4": {
"description": "DeepSeek V4 Flash served by local ds4-server",
"model": "ds4/deepseek-v4-flash",
"temperature": 0
}
}
}OpenCodeを起動
OpenCodeのCLIを起動します。
OpenCodeを起動したあと、Tabキーを押して、モデルをDs4に切り替えます。これで準備完了です。

コーディング実験
とりあえず、素数列挙のプログラムを作成してもらいます。
1~nまでの素数を列挙するprimes(n)という関数をPythonで作成し、動作チェックしてください。
すると下記のように、簡単なプランを作成し、Pythonコードを生成してくれました。

ぱっと見、正しく実装されているようです。コード生成後、自動で実行し確認して完了しました。

作成されたコードは以下になります。効率の良いエラトスネテスの篩をちゃんと実装できました。ループもsqrt(n)までになっており無駄はありません。
def primes(n: int) -> list[int]:
"""Return list of primes from 1 to n inclusive."""
if n < 2:
return []
sieve = [True] * (n + 1)
sieve[0] = sieve[1] = False
for i in range(2, int(n ** 0.5) + 1):
if sieve[i]:
step = i
start = i * i
sieve[start : n + 1 : step] = [False] * ((n - start) // step + 1)
return [i for i, is_prime in enumerate(sieve) if is_prime]リスト内包表記などのテクニックが多用されているので、慣れていないと読みにくいのが欠点です。特に、以下の部分はちょいムズイなと思いました。
sieve[start : n + 1 : step] = [False] * ((n - start) // step + 1)
素数列挙は、典型的な関数なので間違うことはないと思いましたが、正しく生成し、動作確認まで行ってくれました。
処理時間は1分29秒でした(自動モード)。

まとめ
OpenCode + DS4という環境を構築してみました。DeepSeek V4 Flashという、それなりのモデルを完全無課金で使えるというのは結構魅力的です。

