Ollama

MacでOllamaを動かすまでにハマった話—qwen3.5:9bが動いたときの感動を記録しておく

MacでOllamaを動かすまでにハマった話—qwen3.5:9bが動いたときの感動を記録しておく

この記事は約 8 分で読めます

📖 目次
  1. 📌 最初に
  2. 📌 Homebrewでのインストールとサービス起動
  3. 📌 qwen3.5:9bを入れるまで
  4. 📌 Python から叩く—APIの使い方
  5. 📌 launchd でサービスを常時起動させる
  6. 📌 Claude と Ollama のハイブリッド運用
  7. 📌 詰まりポイントまとめ
  8. 📌 まとめ

最初に

Ollamaを最初に入れたのは半年くらい前だった。「ローカルでLLMが動く」という話を聞いて、深く考えずにbrew install ollamaを叩いて、そのまま放置した。なにが動かせるかもよくわかってなかったし、当時はClaudeのAPIを使えば済む話だと思っていた。

でも今は毎日使っている。

BSky投稿の量産、note記事の下書き生成、ログの要約——これ全部Ollamaが担っている。APIコストが実質ゼロになった分、気兼ねなく大量処理できるようになった。MacBook Pro M5に載せてみたら思ったより速くて、正直こんなに使えるとは思っていなかった。

この記事では、Ollamaのインストールからqwen3.5:9bが動くまでの流れを、詰まりポイントも含めて書いておく。


Homebrewでのインストールとサービス起動

brew install ollama

これだけ。終わり、というわけでもない。

インストール後にすぐollama run llama3を試したら「connection refused」になった。サービスが起動していなかっただけなんだけど、最初はわからなくてターミナルを再起動したり、Ollamaのバイナリパスを確認したりで30分くらい溶かした。

正解はこれ。

brew services start ollama

これでバックグラウンドでサービスが立ち上がる。http://localhost:11434が疎通確認の基本。

curl http://localhost:11434

Ollama is runningと返ってくればOK。返ってこなければサービスが起動していない。


qwen3.5:9bを入れるまで

モデルを引っ張るのはpullコマンド。

ollama pull qwen3.5:9b

最初に入れたのはllama3だったんだけど、日本語の品質が微妙だった。英語の質問には強いけど、日本語のブログ記事を生成させると文体が崩れる。

qwen3.5:9bは日本語の精度が体感でかなり上。中国のAlibabaが作ったモデルで、アジア言語への対応が強い。9Bなので重いわけでもなく、M5のメモリ32GBに対して余裕がある。

ダウンロードには時間がかかる。5〜6GBくらいある。Wi-Fi環境で20〜30分は見ておいた方がいい。進捗はターミナルに表示されるので放置でOK。

動作確認はこれ。

ollama run qwen3.5:9b "Pythonで簡単なHello Worldを書いて"
print("Hello, World!")

が返ってくれば動いている。当たり前の結果だけど、最初にこれが動いたときは妙に嬉しかった。


Python から叩く—APIの使い方

Ollamaはローカルでのチャット以外に、REST APIとして叩ける。これが本番環境での使い方になる。

import requests

def ask_ollama(prompt: str, model: str = "qwen3.5:9b") -> str:
    res = requests.post(
        "http://localhost:11434/api/generate",
        json={
            "model": model,
            "prompt": prompt,
            "stream": False,
            "options": {"think": False}
        }
    )
    return res.json()["response"]

result = ask_ollama("launchdとcronの違いを100字で説明して")
print(result)

stream: Falseにしているのは、レスポンスを一括で受け取りたいから。stream処理も書けるけど、パイプラインに組み込む場合は一括の方がシンプル。

think: Falseqwen3.5系モデル向けの設定。このフラグを省略すると推論ステップが出力に混入することがある。パイプラインに組み込む場合は必ず入れておく。


launchd でサービスを常時起動させる

brew services start ollamaだとMacが再起動したときに起動するかが不安定なことがある。確実に常駐させるならlaunchdのplistを自分で書いた方がいい。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>com.taito.ollama</string>
    <key>ProgramArguments</key>
    <array>
        <string>/opt/homebrew/bin/ollama</string>
        <string>serve</string>
    </array>
    <key>RunAtLoad</key>
    <true/>
    <key>KeepAlive</key>
    <true/>
    <key>StandardOutPath</key>
    <string>/tmp/ollama.log</string>
    <key>StandardErrorPath</key>
    <string>/tmp/ollama_err.log</string>
</dict>
</plist>

これを~/Library/LaunchAgents/com.taito.ollama.plistに置いて、

launchctl load ~/Library/LaunchAgents/com.taito.ollama.plist

Mac起動後に自動でOllamaが立ち上がるようになる。KeepAlive: trueを入れているのでクラッシュしても自動再起動してくれる。

ちなみにollama serveのパスはwhich ollamaで確認すること。Apple Siliconだと/opt/homebrew/bin/ollamaになるけど、Intelだと/usr/local/bin/ollamaになる。ここを間違えるとplistが何も起動しないまま無言で失敗する。


Claude と Ollama のハイブリッド運用

今の僕の構成は、品質が必要な出力にはClaude(Haiku/Sonnet)、量産・ログ処理・下書きにはOllamaを使い分けている。

パイプライン全体をai_client.pyという薄いラッパーで統一していて、設定ファイルを変えるだけでどちらのモデルを使うかを切り替えられるようにしてある。

# ai_config.yaml
prefer_claude: true   # false にすれば全Ollama

tasks:
  bsky_post: haiku
  note_article: sonnet
  log_analysis: qwen3.5:9b

prefer_claude: falseに変えれば全タスクがOllamaに流れる。API費用が心配な月はこれで乗り切る。

Ollamaだけで回してみた週があった。体感品質は落ちるけど、量産が目的の作業なら十分だった。「完璧より継続」の精神でいえば、動いていることの方が大事。✨


詰まりポイントまとめ

実際に引っかかった場所を書いておく。

サービスが起動していない問題は、brew services listollamaのステータスを確認すれば一発でわかる。startedになっていれば問題なし。stoppedならbrew services start ollama

モデルのダウンロード中にnetwork timeoutになる場合は、再度ollama pullを実行すれば途中から再開してくれる。一から落とし直しにはならないので安心していい。

Pythonから叩いたときにConnectionRefusedErrorが出る場合は、まずcurl http://localhost:11434を叩いてサービスの死活を確認する。Ollamaが生きていればPython側の問題(URLミスや依存関係)。

qwen3.5:9bが日本語を返してくれない場合は、プロンプトを日本語で明示的に書くか、「日本語で答えてください」を一行追加すると大体解決する。


まとめ

Ollamaは入れてしまえば単純。詰まるのは最初のconnection refusedと、qwen3.5thinkフラグ周りくらい。

使い始めてから、量産系の処理をClaude APIに頼ることがほぼなくなった。月のAPIコストが目に見えて下がった。その分、品質が必要なところへClaude(Haiku)を集中させられるようになった。

ローカルLLMを試していない人は、まずollama pull qwen3.5:9bの一行から始めてみるといいと思う。動いた瞬間の感覚は、試してみた人にしかわからない。



📘 この記事のテーマをさらに深掘りした本

Ollamaでローカルに動かすAIの全技術

qwen3.5から gemma4 まで、無料で使いこなす実践ガイド

Kindleで読む →


👨‍💻
一ノ瀬泰斗
AI自動化エンジニア / Python個人開発者

Claude Code × Ollama × launchd で SNS・ブログ・KDPを全自動化。実測データと失敗談を軸に、月5万円収益化のリアルな記録を発信中。