ふくふくHukuhuku LLC
EP.102Toolbox 12分公開:

Ollama Mockを試す:GPUもモデルも使わず、AIアプリの応答と失敗をテスト

Ollamaの代役になるOllama MockをMacで実測。通常応答、404・503、HTTP 200後のストリーム異常を試し、モデルの品質評価との違いと導入時の注意点を解説します。

#Ollama#ローカルLLM#テスト#開発ツール
執筆 / 監修
松尾 亮合同会社ふくふく 代表社員

データ基盤・データパイプライン構築 / BI / 生成 AI 活用支援を専門とするエンジニア (28 年)。 本記事は AI 利用ポリシーに基づき、生成 AI の補助で執筆 → 人間が監修・編集して公開しています。

プロフィール詳細
シェア
モデルを動かす前に、アプリのつなぎ方を検査する

Ollama Mockは、Ollama風の応答を返すテスト用サーバーです。GPUもモデル本体も不要ですが、回答の正しさは評価できません。本記事ではMac上で通常応答、ストリーミング、404・400・503、応答途中の異常を実際に確認しました。

ローカルLLMを使う社内チャットや検索ツールを作るとき、毎回モデルを起動するのは手間です。しかも、正常な回答は試せても「途中で応答が途切れたら画面はどうなるか」「モデル名を間違えたら利用者に何を表示するか」は見落としがちです。ここを先に試せるのが、kinduff氏のOllama Mockです。Ollama本体の公式機能ではなく、独立した開発者のプロジェクトです。

作者のShow HN紹介は2026年10月29日18:17 UTC、日本時間では10月30日3:17。リポジトリの作成日は10月27日ですが、それだけで一般公開の開始時刻は断定できません。この記事は10月30日に確認したコミット257cfdeを対象に、公開直後の使い方を整理します。

何が新しい? 決まった一文を返すだけのモックではない

モックとは、本物の代役になるテスト用の部品です。たとえば、チャット画面の表示を作る段階なら、本物のLLMの推論を待たずに、代役が返した文章で吹き出しや停止ボタンを確認できます。Ollama MockはHTTPで接続するサーバーなので、接続先URLを差し替えて使う構成を取りやすいのが特徴です。

作者は、質問に応じた文章・JSON・ツール呼び出しなどの形、モデルの読み込み状態、待ち時間、エラーを模擬すると説明しています。対応APIと制約は確認版READMEにまとまっています。すべてのOllamaの挙動と完全一致することを保証するものではありません。

確認したいことモックを使う場面本物のモデルで残す検査
チャットの表示応答を少しずつ受け取り、完了状態へ切り替える日本語の自然さ、回答内容、実際の応答時間
エラー処理未導入モデル・不適切なモデル用途・一時的な失敗を返す実機固有のメモリ不足や同時実行時の挙動
構造化データJSONを受け取る処理や保存先への受け渡しを組む文章から正しい値を抽出できるか
検索・画像入力データの形や呼び出し経路を組む意味検索の精度、画像の認識精度

たとえば社内問い合わせ画面なら、回答の良し悪しを検証する前に「失敗時に再試行できるか」「途中の文を完成した回答として保存していないか」を検査できます。これは導入例であり、特定の社内システムで効果を測定した結果ではありません。

導入条件:Go 1.24以上。モデル料金は不要、ライセンスは要確認

項目2026年10月30日の確認内容
必要なものGo 1.24以上。この記事の確認スクリプトはPython 3標準ライブラリのみ
GPU・モデル不要。モデル名は模擬応答を選ぶための指定で、モデル本体の取得ではない
OS本記事ではmacOS 27.0.1 / Apple Silicon / Go 1.27.3で確認。Windows・Linuxは未実測
費用ローカル試用で外部LLMのAPI料金は発生しない。Goやソースの初回取得には通信が必要
日本語日本語の質問を送る用途にも使える接続口だが、生成する内容や日本語品質の評価には使わない
利用条件確認コミットのファイル一覧にLICENSEがなく、GitHubのlicense欄も未設定。会社での採用・改変・再配布の条件は別途確認が必要

「公開されたソースがある」ことと「自由に再配布できるライセンスがある」ことは別です。本記事ではオープンソースの利用許諾が確認できたとは扱いません。まず公式のブラウザーデモで雰囲気を確かめ、組織への組み込みは条件確認後に判断するのがよいでしょう。デモに機密情報を入力する必要はありません。

Macで試す:既存のOllamaとは別のポートで起動する

Goが導入済みなら、次の方法で確認版を取得できます。作業用フォルダーに移動してから実行してください。本記事では同じコミットを取得してGoでビルドしました。既定の11434番ポートを避け、11555番だけで待ち受けます。インターネットに公開する設定ではありません。

起動したターミナルを開いたまま、別のターミナルから試します。終了はCtrl+C。
Bash
git clone https://github.com/kinduff/ollama-mockcd ollama-mockgit checkout 257cfde1590ac0eb732ec03ba08bee9230c25e5fgo build -o ollama-mock ./cmd/ollama-mock./ollama-mock -addr 127.0.0.1:11555 \  -models qwen3:8b,nomic-embed-text \  -latency 0 -fixed-time 2026-10-30T00:00:00Z

ここでqwen3:8bを指定しても、Qwenの重みはダウンロードされません。-latency 0は模擬的な待ち時間を無くす設定です。-fixed-timeは応答中の日時を固定する設定で、試験の日時を表しているわけではありません。実行環境の日時そのものは変更しません。

stream:falseは一括応答、think:falseはこの例で思考過程の模擬出力を省く指定。
Bash
curl -sS http://127.0.0.1:11555/api/chat \  -H 'Content-Type: application/json' \  -d '{"model":"qwen3:8b","stream":false,"think":false,"messages":[{"role":"user","content":"Explain a retry policy briefly."}]}'

成功すると、message.contentにテスト用の文章、doneにtrueが入ります。文章を読んで「賢い」と評価する試験ではありません。アプリに必要なフィールドを受け取れるかを見ます。既存アプリで試す際も、開発用設定だけをこのURLへ向け、最後に本来の接続先へ戻してください。

実測:8項目で正常系と異常系を確かめた

再現用に確認スクリプトをダウンロードできるようにしました。先ほどの専用モックを起動し、保存したファイルを次のように実行します。接続先は127.0.0.1:11555に固定しています。スクリプトはモックの障害設定を置き換えるため、ほかのテストと共用しないでください。

追加のPythonパッケージは不要。8行のPASSと完了メッセージが出れば、この教材の確認は完了です。
Bash
python3 check_ollama_mock.py
確認項目このMacでの結果
モック専用の状態API/_mock/stateで状態を取得
通常の応答HTTP 200、文章あり、done:true
同じ質問を繰り返すmessage.contentが一致
通常のストリーミング最終行のdone:trueを確認
未導入のモデル名HTTP 404
埋め込み用モデルに文章生成を要求HTTP 400
一時的な障害を注入指定したHTTP 503を受信
2トークン後の異常を注入HTTP 200のままerror行を受信。done:trueなし

これはOllama Mock自体と教材の動作確認です。読者のアプリの検査が済んだわけではなく、本物のQwenやOllamaと比較した性能試験でもありません。検査では生成文章の一致を確かめました。初回の読み込み状態や時間なども含めた応答全体のバイト一致は、この教材では検証していません。

一番見落としやすい失敗:HTTP 200でも回答は完成していない

ストリーミングは、回答を小分けに送り続ける仕組みです。Ollamaのこの形式では、一行ごとにJSONが届きます。NDJSONと呼ばれる形式で、受け取った行を順番に解釈します。HTTPの開始時点で成功を示す200が返っていても、その後の生成処理で失敗することがあります。

今回の模擬障害でも、HTTP 200の後にerrorを含む行が届き、完了を表すdone:trueはありませんでした。最初のHTTPステータスだけで「成功」と決めると、途中までの文章を完成品として保存してしまう可能性があります。

設計例。実際のアプリではJSONの解析失敗、接続切断、タイムアウト、利用者による停止も扱います。
Python
completed = Falsefor line in response_lines:  # 受信した各行を渡す。接続処理は省略。    if not line.strip():        continue    chunk = json.loads(line)    if "error" in chunk:        raise RuntimeError(chunk["error"])    if chunk.get("done") is True:        completed = True
if not completed:    raise RuntimeError("回答の完了を確認できませんでした")

アプリ側では、受信中・完了・失敗・中止を分け、途中の出力には未完了であることを表示します。503を受けたときの再試行も無限に繰り返さず、上限や待ち時間を設けます。ツール実行を伴う処理なら、再試行による二重実行にも注意が必要です。これらは今回の異常応答から考えられる設計上の確認事項です。

モデルの速度・推論能力・日本語の正確さは測れない

返ってきた処理時間やモデルサイズは、実測値ではありません

モックのtotal_durationなどは模擬値です。-latency 0で待ち時間を無くしても、応答中の時間情報は実時間になりません。これを使って「このMacでQwenが何tokens/s出た」と書くのは誤りです。

同様に、thinkingという項目が出ても実際の推論能力を証明しません。画像は内容を認識するのではなく入力の枚数を扱う仕組みで、埋め込みも実モデルによる意味理解の代わりにはなりません。未知のモデル名では、名前から機能を推定する処理もあります。新モデルの仕様確認に利用しないでください。詳細は実装の説明を参照できます。

日本語の業務文書から正しい担当者名を抽出できるか、検索で必要な資料が上位に出るか、実機でメモリが足りるか、といった検査は本物のモデルを使って別に行います。モックで周辺処理を安定させてから実モデルの評価へ進むと、問題の原因を切り分けやすくなります。

仕事に取り入れるなら、この順番で

  1. 1利用条件を確認し、開発用の接続先を本番と分ける。最初はこの教材のような専用モックで挙動を確かめる。
  2. 2自分のアプリをモックへ接続し、通常完了・404・503・途中失敗の画面、ログ、保存データを確認する。教材のPASSだけでアプリの合格とはしない。
  3. 3CI(変更のたびに自動実行する検査)へ周辺処理のテストを移す。モデルが実行されないことをテスト名やログに残す。
  4. 4接続先を本物に戻し、日本語の回答品質、ツール選択、検索精度、速度・メモリを少数の固定課題で再確認する。
LLMに、アプリのテスト設計を依頼する指示文
このアプリのOllama接続処理を読み、通常完了、未導入モデルの404、一時的な503、HTTP 200後のストリーム内error、done:trueなしの終了を扱うテストを提案してください。kinduff/ollama-mockの確認コミットは257cfdeです。モックの専用ポートは127.0.0.1:11555、本番設定は変更しません。UIの状態、途中データの保存、再試行上限、二重実行の防止を別々に確認してください。モックで検証できない回答品質・日本語精度・実機性能は、実モデルで検証する項目として分けてください。テストを実行していないのに成功と報告しないでください。

ローカルLLMを選ぶ段階はPumpkinのモデル・実行環境の比較、AIがシェルを使う際の確認はShellfirmのコマンド保護も参照できます。Ollama Mockが受け持つのは、その間にある「アプリが返答や失敗を正しく扱えるか」の検査です。

確認日:2026年10月30日。対象:kinduff/ollama-mock、コミット257cfde1590ac0eb732ec03ba08bee9230c25e5f。一次資料:公式リポジトリ、確認版README、サーバー実装、Native API実装。公式のリリースタグは確認時点ではありません。/api/versionに表示される0.40.6は模擬APIの応答設定で、Ollama Mockのリリース版番号として扱っていません。

よくある質問

Ollama MockにGPUやLLMのモデルは必要ですか?
必要ありません。テスト用の応答を生成するGo製サーバーです。モデル名を指定しても、そのモデルの重みを実行するわけではありません。
日本語の回答精度やモデルの速度を評価できますか?
評価できません。返答や処理時間は模擬値です。日本語品質、意味検索、実機速度は本物のモデルで確認してください。
HTTP 200ならストリーミングは成功ですか?
開始時の200だけでは判断できません。受信行のerrorと、完了を示すdone:trueの有無を確認し、接続切断やタイムアウトも扱う必要があります。
シェア

この記事の感想を教えてください

あなたの 1 クリックで、本当にこの記事は更新されます。「もっと詳しく」「続編希望」が一定数集まった記事は、 ふくふくが 実際に内容を拡充したり続編記事を公開 します。 送信したリアクションはお使いのブラウザに記録され、再カウントされません。

シリーズの外も探す:

まずは、現状を聞かせてください。

要件が固まっていなくて大丈夫です。現状診断と方針提案までを無料でお手伝いします。

無料相談フォームへ hello [at] hukuhuku [dot] co [dot] jp