Mistral Vibe CLIとローカルのDevstral:導入 route
Mistral Vibe CLIは、発表によれば、Mistral AIがApache 2.0ライセンスで公開したターミナル用コードエージェントで、Devstral 2を搭載しています。デフォルトでは、リクエストをMistralのAPIに送信します。このガイドでは、まずインストールし、続いて「offline models」のドキュメントで説明されているconfig.tomlファイルを使って、マシン上でOllamaが提供するDevstral Small 2に接続します。最後に、完全にローカルで動作するコードエージェントの実際の制限を説明します。
#Mistral Vibe CLIとは何か、何ではないか
Mistral Vibe CLIはPythonで書かれたコマンドラインプログラムで、Devstral 2およびDevstral Small 2と同時に2025年12月に公開されました。プロジェクトのフォルダーで起動し、自然言語でタスクを説明すると、エージェントがファイルを読み、変更を提案し、コマンドを実行し、結果が得られるまで反復します。Claude Code、OpenCode、Aiderと同じ原理ですが、この種のエージェントループ向けにトレーニングされたDevstralモデルを中心に設計されています。
ソースコードはGitHubのmistralai/mistral-vibeリポジトリで、Mistralの発表によればApache 2.0ライセンスで公開されています。ロイヤリティなしで読み、変更し、企業で利用できます。CLIはMistralのAPIと通信できるほか、OpenAI形式のAPIを公開する任意のサーバーにも対応しています:Ollama、llama.cpp、LM Studio、vLLM。ここでは、「offline models」ページに記載されているこの二つ目のモードを扱います。
なぜAPIではなくローカルのVibe CLIを使うのでしょうか。理由は主に3つあります。コードがマシンの外に出ないため、独自コードや秘密保持契約の対象となるコードを扱う場合に重要です。従量課金もクォータもなく、支払うのは電気代と、すでに所有しているハードウェアだけです。さらに、オフラインや厳格なファイアウォールの内側でもツールを使い続けられます。その代わり、ワークステーションには大きすぎる1230億パラメーターのDevstral 2モデルを失い、本番サーバーより低い速度を受け入れる必要があります。
#前提条件:Python、Ollama、およびDevstral Small 2用のメモリ
このガイドでモデルの導入まで、キットでエディタ内でコードを書くコパイロットの導入まで進められます。
- 永久に利用できるオンラインスペース
- PDF + ファイル
- 30日間返金対応
何かをインストールする前に、次の四点を確認してください。ローカルのコーディングエージェントで遭遇する失敗の四分の三を防げます。
- システム
- 主な対象はLinuxまたはmacOSです。WindowsではWSL2(Ubuntu)を使用してください。CLIはLinuxと同じようにインストールでき、Windows用の Ollama にはlocalhostアドレス経由でWSLからアクセスできます。
- 新しいPython
- CLIはPythonパッケージとして配布されています。リポジトリのREADMEには必要な最小バージョンが記載されています。発表時点ではPython 3.12以降でした。続行する前にpython3 --versionで確認してください。
- Ollamaがインストール済みで起動していること
- Ollamaはモデルを提供し、http://localhost:11434上でOpenAI互換APIを公開します。まだの場合は、Ollamaのインストールガイドで三つのシステムを解説しています。
- 24Bモデル用メモリ
- Devstral Small 2のパラメーター数は240億です。Q4_K_M量子化では、重みが約14 GBを占有し、これにコンテキストキャッシュが加わります。快適に動作させるには、24 GBのGPU(RTX 3090、RTX 4090)またはユニファイドメモリ32 GBのMacを用意してください。Mistralの発表でも、対象構成として「RTX 4090またはRAM 32 GBのMac」が挙げられています。
16 GBのGPU(RTX 4080、RTX 5070 Tiのデスクトップ向けモデル)ではQ4モデルを保持できますが、コンテキストがすぐにシステムメモリへあふれ、速度が低下します。12 GB(RTX 3060、RTX 4070)では、OllamaがGPUとCPUの間でレイヤーを分散します。エージェントは動作しますが、ループを一巡するのに数十秒かかります。これらのカードでのスループットは数値化していません。エージェントとして24Bを使う場合は、読み込むファイルごとにコンテキストが大きくなるため、24 GBが快適に使える目安だと考えてください。
#Mistral Vibe CLIをインストールする
Mistralは、CLIを隔離環境にセットアップするワンライナーのインストールスクリプトを提供しています。これはリポジトリのREADMEで推奨されている方法です。
インストールを自分で管理したい場合は、パッケージがmistral-vibeという名前でPyPIに公開されています。uvツールはこれを専用環境にインストールするため、他のPythonプロジェクトには影響しません。通常のpipも動作しますが、できれば仮想環境内で使用してください。
続いて、vibe コマンドにアクセスできることを確認してください。ターミナルで見つからない場合は、いったん閉じて開き直してください。インストールスクリプトがPATHにフォルダーを追加するため、次回のシェル起動時に反映されます。
#OllamaでDevstral Small 2を準備する
Devstral Small 2はMistralがApache 2.0ライセンスで公開しており、コンテキストウィンドウは256 000トークンです。Ollamaのライブラリで提供されており、以下のコマンドでデフォルト版を4ビット量子化でダウンロードできます。ダウンロード容量は約14 GBです。
Ollamaライブラリ内のモデルの正確な名前は変わる可能性があります(量子化のバリエーションやサイズのサフィックスなど)。コマンドが失敗した場合は、ollama.com/libraryで「devstral」を検索し、表示された名前を使ってください。Vibeの設定には、ollama listに表示されるとおりのこの名前をそのまま記入します。
もう一つ、決定的に重要な設定があります。それはコンテキスト長です。Ollamaはデフォルトで短いコンテキスト、つまり多くの場合4 096トークンでモデルを読み込みます。コードエージェントにとっては少なすぎます。Vibeのシステムプロンプト、ツール一覧、読み込んだファイルの内容、セッション履歴が、数回のやり取りでこのサイズを超えてしまうからです。するとモデルは会話の冒頭を忘れ、エージェントは同じところを堂々巡りします。最低でも32 000トークンのコンテキストを設定してください。たとえば派生Modelfileを使う方法があります。
サービスの起動時に環境変数 OLLAMA_CONTEXT_LENGTH を設定して、グローバルにコンテキストを固定することもできます Ollama。Modelfile には、このモデルだけに適用でき、明示的な名前を維持できるという利点があります。コンテキストを長くすると、より多くのメモリを消費します。24Bで32kトークンの場合、KVキャッシュの種類に応じて、追加で2~4 GBを見込んでください。24 GBでは快適に動作する限界です。64kを超える場合は、nvidia-smiでメモリを監視してください。
#config.tomlでローカルモデルに接続する
Mistral Vibe CLIは~/.vibe/config.tomlファイルから設定を読み込みます。ドキュメントの「offline models」では、サーバーとそのアドレスを宣言するprovidersと、モデル名をプロバイダーに関連付けるmodelsという二つのテーブルを説明しています。active_modelキーでデフォルトで使用するモデルを指定します。以下は、先ほど準備したOllamaの完全な設定例です。
説明しておきたい点が3つあります。アドレスが/v1で終わるのは、VibeがOpenAI方言を使用し、Ollamaがこの形式をこのプレフィックスの下でしか公開していないためです。/v1なしのOllamaネイティブAPIは使用できません。api_key_env_varキーは空のままにします。ローカルではOllamaが認証を要求しないためです。価格をゼロにしているのは、CLIに表示されるコスト見積もりの整合性を保つためです。動作には影響しません。
別のローカルサーバーを使う場合、変更するのはprovidersセクションだけです。llama.cpp(llama-server)では、アドレスは通常http://localhost:8080/v1です。LM Studioではhttp://localhost:1234/v1、vLLMではhttp://localhost:8000/v1です。いずれの場合も、モデルのnameフィールドには、そのサーバーが想定する識別子、つまりルート/v1/modelsで返す識別子を指定する必要があります。
複数のモデルを宣言できます。たとえば、ローカルでDevstral Small 2を使用し、API Mistral経由でDevstral 2を使用して、セッション中に一方から他方へ切り替えられます。プロバイダーMistralでは、APIキーは環境変数(通常はMISTRAL_API_KEY)から読み取られるため、ファイル内にキーを平文で記載する必要はありません。100 %ローカルを目指す場合は、リモートプロバイダーを一切追加しないでください。そうすれば、マシンの外部に何も送信されません。
#最初のセッション:vibeを起動してモデルを確認する
- 01プロジェクト内に移動するGitリポジトリのフォルダーで、できればクリーンな状態(保留中の変更がないgit statusの状態)でターミナルを開きます。エージェントはカレントフォルダー内のファイルを操作します。クリーンなリポジトリなら、git diffとgit checkoutを使って変更を確認し、取り消せます。
- 02CLIを起動するvibeと入力します。初回起動時、CLIからMistralのAPIキー入力と~/.vibeフォルダーの作成を求められることがあります。先にconfig.tomlを作成していれば、ローカルプロバイダーはすでに認識されています。それでもキー入力のプロンプトが表示される場合は、/helpを確認してください。バージョンによっては、ローカルプロバイダーが設定されていると入力を省略するか、空欄のままにできます。
- 03アクティブなモデルを確認するインターフェースには現在使用中のモデルが表示されます。ここにはdevstral-small-localという自分のエイリアスが表示されるはずです。/helpコマンドを実行すると、セッションで使用可能なコマンドの一覧が表示されます。複数のモデルを宣言している場合は、モデルを切り替えるコマンドも含まれます。
- 04最初の範囲を限定したタスクを与える小さく始めましょう。「READMEを読んで、プロジェクトのアーキテクチャを5行で要約してください」、続いて「ファイルYの関数Xに単体テストを追加してください」と指示します。最初の応答を観察してください。モデルがツールを使わずに応答したり、存在しないファイルパスを作り出したりする場合、一般に原因はコンテキストが短すぎるか、ツール呼び出し用に準備されていないモデルです。
- 05承認する前に確認するVibeは、ファイルの書き込みやコマンドの実行など、重要な操作の前に確認を求めます。提案されたdiffを一つずつ確認してください。ローカルで動作する24Bモデルは、API経由で提供される123Bモデルよりも、特に大規模なコードベースでは間違いが多くなります。確認作業は例外的な対応ではなく、ワークフローの一部です。
セッション中はOllamaの使用状況を確認してください。ollama psコマンドは、読み込まれているモデル、GPUとCPUに割り当てられている割合、実効コンテキストを表示します。ビデオメモリ内に収まると思っていたのにCPUへの部分的な割り当てが表示される場合は、コンテキストによってカードの容量を超えたということです。
#100 %ローカルのVibe CLIの制限
ローカルのコードエージェントは動作しますが、API版と完全に同じ条件で比較することはできません。根拠のない数字は示さず、期待できることを説明します。このガイドではベンチマーク測定を実施しておらず、Mistralが公開しているスコアは、基準条件で提供されたモデルを対象としたものであり、量子化モデルをデスクトップマシンで動かした場合のものではありません。
- Devstral 2はまだ手の届かない存在です
- 1230億パラメーターの大型モデルは、極端に量子化しても数十ギガバイトのメモリを必要とします。ローカルではDevstral Small 2を使用します。Mistralによれば、SWE-bench Verifiedで68,0 %を記録しており、Devstral 2の72,2 %に対する値です。このベンチマークでの差は小さいものの、長時間のタスクや大規模なリポジトリでは違いが感じられます。
- 量子化によってモデルが変わります
- 公表されているスコアは完全なウェイトの場合のものです。Q4_K_Mでは精度がわずかに低下します。Q8_0は精度をよりよく維持しますが、ウェイトだけで約26 GBを必要とするため、32 GBのカードまたは十分なメモリを搭載したMacが必要です。量子化の選択は、事情を理解したうえで行うべきトレードオフです。
- ローカルのコンテキストは256kよりはるかに短いです
- Devstral Small 2は256 000トークンを受け付けますが、24 GBでその長さを実用的に使うことはできません。32k~64kトークンであれば、エージェントはモジュールまたは小規模なサービスをカバーできます。モノレポでは、ファイル単位でタスクを区切る必要があります。
- 速度を決めるのはCLIではなくハードウェアです
- 同じメモリ容量で比較すると、24Bの密モデルは同程度のサイズのMoEモデルより生成速度が遅くなります。エージェントのループを一巡するたびにコンテキスト全体を読み直すため、セッションが長くなるほど各応答に時間がかかります。セッションは短くし、タスクを分割してください。
- ツール呼び出しとフォーマット
- このエージェントは、構造化されたツール呼び出しに基づいています。量子化モデルでは、ときどきCLIが拒否する不正な形式の呼び出しが生成されることがあります。Devstralはこの用途向けに訓練されており、汎用モデルよりもはるかにうまく処理できますが、この現象がゼロになるわけではありません。
- 若いツール
- CLIは2025年12月に公開され、急速なペースで進化しています。コマンド、設定形式、エディターとの統合は変わります。定期的に更新し(uv tool upgrade mistral-vibe、またはインストールスクリプトを再実行)、動作について不満を述べる前にGitHubの変更履歴を読み直してください。
Mistralの発表では、ACPプロトコルによるエディターとの統合、特にZedとの統合についても言及しています。ターミナルよりエディターを使いたい場合は、Zed + Ollamaのガイドで、このエディターがすでにローカルモデルと通信する方法を説明しています。両者を組み合わせると、Vibeがエージェントを操作し、Zedが差分を表示します。
#トラブルシューティング
- 「vibe:コマンドが見つかりません」
- 実行ファイルのフォルダーがPATHに含まれていません。ターミナルを開き直してください。uvでは通常~/.local/binです。uv tool dir --binで確認し、必要に応じてシェルの設定ファイルに追加してください。
- localhost:11434への接続エラー
- Ollamaが起動していないか、別のアドレスで待ち受けています。curl http://localhost:11434/v1/modelsを試してください。WSL2では、OllamaがWindows側で正常に動作していることと、環境変数OLLAMA_HOSTが制限されていないことを確認してください。
- モデルがサーバーに認識されていません
- modelsセクションのnameフィールドが、ollama listに存在するモデルと一致していません。サフィックスも含め、正確な名前をそのまま記入してください。派生Modelfileを作成している場合は、その名前も含めます。
- エージェントが直前に読んだ内容を忘れてしまう
- コンテキストが短すぎます。ollama ps で実際に読み込まれているコンテキスト値を確認してください。4 096 になっている場合は、Modelfile または環境変数 OLLAMA_CONTEXT_LENGTH が反映されていません。
- 応答が非常に遅く、GPUの使用率が低い
- モデルの一部がCPU上にあります。コンテキストを短くする、より軽い量子化に切り替える、またはOllama(OLLAMA_MAX_LOADED_MODELS)が読み込んだ他のモデルを閉じる、といった対策を取ってください。
- すべてローカルなのにCLIがAPIキーを要求する
- バージョンによって動作が異なります。config.tomlが~/.vibe/config.tomlに正しく配置され、active_modelが存在するエイリアスを指していることを確認してから、最新の手順についてドキュメントの「offline models」ページを参照してください。
#さらに詳しく
MistralのエコシステムとDevstralを重視するなら、Vibe CLIはよい選択肢です。導入前に比較したい場合は、OpenCodeも同じカテゴリに属し、対応プロバイダーがより多くあります。また、ローカルで使うコーディングモデルの選択は、選んだエージェントとは別に検討する必要があります。
ご意見、誤りのご指摘、補足はありますか?ぜひお知らせください。皆さんにとってより良いガイドにするために役立ちます。