Ollama を Mac 外部 SSD で動かす — Apple Silicon ローカル LLM 構築手順 2026
Apple Silicon Mac でローカル LLM を試したい個人開発者向けの記事です。
筆者は M4 Pro 48GB MacBook で Ollama を導入する際、内蔵 SSD を圧迫したくなかったので 外部 Samsung SSD にモデルを保管する構成 に落ち着きました。本記事では、その手順を Rosetta 経由 brew の落とし穴回避と環境変数 OLLAMA_MODELS の設定例付きで共有します。
筆者環境: M4 Pro 48GB MacBook、外部 Samsung SSD 2TB (APFS、空き 1.6TB)、Ollama 0.21.2、Qwen2.5-Coder 7B (4.7GB) と 14B (9GB) を pull 済み。インストール → モデル pull → 動作確認まで約 15 分。本記事は 2026-04-27 構築当日の実記録です。
この記事でわかること:
- Apple Silicon Mac でローカル LLM を試すときの全体像
- 公式インストーラーで Ollama を入れる手順 (brew より安全な理由)
- モデルファイルを外部 SSD に逃がす環境変数設定
- M4 Pro 48GB の実機ベンチ結果
- 起動運用 (再起動後の手順) と注意点
なぜ外部 SSD に置くのか
Qwen2.5-Coder 7B が約 4.7GB、14B で 9GB、32B だと 19GB 近くあります。複数モデルを並べると 20-30GB を平気で消費するため、内蔵 SSD が 512GB / 1TB の機種では運用負担が大きい。
外部 SSD に逃がせば:
- 内蔵ストレージを開発・キャッシュ用に確保 できる
- モデルの差し替えが気軽になる (試した結果 14B より 32B の方が良ければそのまま 19GB pull できる)
- マシン買い替え時の移行が楽 (SSD ごと差し替え)
代償としては、外部 SSD の常時接続が前提になる点と、初回モデルロードがわずかに遅くなる点があります (推論速度自体は RAM 展開後なので影響を受けません)。
前提: 外部 SSD のフォーマット確認
外部 SSD は APFS フォーマット必須 です。Samsung 等の工場出荷時はクロスプラットフォーム互換のため ExFAT で出荷されるケースが多く、ExFAT のままだと Ollama のシンボリックリンクやパーミッション周りで詰まります。
ディスクユーティリティで確認・必要なら再フォーマットしてください (中身が消えるので注意)。コマンドラインからの確認は以下です。
diskutil info /Volumes/Samsung | grep "File System Personality"
# File System Personality: APFS ← これが出ればOK
ボリューム名は半角英数推奨です (例: Samsung)。スペースや日本語が入っていると後の環境変数設定で扱いにくくなります。
⚠️ 落とし穴: Homebrew が Rosetta 版の場合
Apple Silicon Mac でも、過去に Intel Mac から移行してきた環境では Homebrew が Intel 版 (/usr/local プレフィックス、Rosetta 動作) のままの場合があります。この状態で brew install ollama すると x86_64 バイナリの Ollama が入り、Apple Silicon の Metal GPU を使えず推論速度が大幅に劣化 します。
確認コマンドはこれです。
brew --prefix
# /opt/homebrew → Apple Silicon ネイティブ ✓
# /usr/local → Intel/Rosetta 版 ⚠️
brew config | grep CPU
# CPU: Apple M4 Pro → ネイティブ ✓
# CPU: dodeca-core ... westmere → Rosetta 動作中 ⚠️
筆者の環境は後者でした (Intel Mac からの移行ユーザーは要注意です)。
回避策はシンプルで、brew を使わず公式インストーラーを使うことです。
インストール手順
1. Ollama を公式スクリプトで導入
公式インストーラーは macOS の場合、Ollama-darwin.zip (Universal Binary、ARM64 を含む) を直接ダウンロードして /Applications/Ollama.app に配置するだけのシンプルな仕組みです。
curl -fsSL https://ollama.com/install.sh | sh
スクリプトを実行する前に中身を確認したい場合は以下で読めます。
curl -fsSL https://ollama.com/install.sh | head -100
macOS 部分は (1) /Applications/Ollama.app の有無を確認・あれば削除、(2) zip をダウンロード、(3) 展開して /Applications に配置、(4) /usr/local/bin/ollama にシンボリックリンクを張る、という流れです。途中で sudo パスワードを求められることがあります。
自動起動を抑制したい場合は環境変数で制御できます。
curl -fsSL https://ollama.com/install.sh | OLLAMA_NO_START=1 sh
インストール後、バイナリが ARM64 ネイティブを含むことを確認します。
file /Applications/Ollama.app/Contents/Resources/ollama
# Mach-O universal binary with 2 architectures: [x86_64:...] [arm64]
arm64 が含まれていれば M4 Pro で Metal GPU 経由の推論が可能です。
2. モデル保管先を外部 SSD に向ける
外部 SSD 上にモデル用ディレクトリを作成し、環境変数 OLLAMA_MODELS で Ollama に教えます。
# 1. ディレクトリ作成
mkdir -p /Volumes/Samsung/ollama-models
# 2. .zshrc に export を追記
echo '' >> ~/.zshrc
echo '# Ollama: store models on external Samsung SSD' >> ~/.zshrc
echo 'export OLLAMA_MODELS="/Volumes/Samsung/ollama-models"' >> ~/.zshrc
# 3. 現在のセッション (Ollama が GUI 起動するため launchctl 経由) にも反映
launchctl setenv OLLAMA_MODELS /Volumes/Samsung/ollama-models
launchctl setenv は macOS の GUI アプリが見る環境変数 を設定するためのコマンドです。Ollama.app は GUI アプリとして起動するため、シェルの .zshrc だけでは値を拾えません。両方に書いておくのが安全です。
3. Ollama を起動してモデルを pull
open -a Ollama --args hidden
メニューバーに Ollama アイコンが常駐します。サーバー疎通を確認:
curl http://localhost:11434/api/version
# {"version":"0.21.2"}
モデルを pull します。今回は Qwen2.5-Coder 7B と 14B を入れます。
ollama pull qwen2.5-coder:7b
ollama pull qwen2.5-coder:14b
7B が約 4.7GB、14B が約 9GB なので、回線次第で 5-10 分かかります。
4. 外部 SSD に保存されたか検証
ここが本記事のキモです。OLLAMA_MODELS が正しく効いていれば、モデルファイルが内蔵ではなく外部 SSD に保存されているはずです。
du -sh /Volumes/Samsung/ollama-models
# 13G /Volumes/Samsung/ollama-models ← 外部にある
du -sh ~/.ollama
# 20K /Users/master/.ollama ← 内蔵には漏れていない
筆者環境ではこの結果で OLLAMA_MODELS が機能していることを確認できました。
動作確認: 推論テスト
簡単な推論を投げて疎通確認します。
ollama run qwen2.5-coder:7b "Write a one-line Jest test for: function add(a,b){return a+b}"
数秒〜十数秒で以下のような出力が返ります。
test('adds 1 + 2 to equal 3', () => expect(add(1, 2)).toBe(3));
筆者環境 (M4 Pro 48GB) での実測は 11 秒 (初回ロード込み)。2 回目以降は model が warm 状態で 4-5 秒程度で返ります。
M4 Pro 48GB での実機ベンチ
calculateMonthlyRevenue という 18 行の TypeScript 関数を題材に 4 シナリオを計測しました。
| シナリオ | モデル | 実時間 | 速度 (tok/s) |
|---|---|---|---|
| Vitest テスト 3 ケース生成 | 7B | 11s (初回) | 47 |
| ヘルパー関数抽出 refactor | 7B | 4s (warm) | 48 |
| JSDoc + @example 付与 | 14B | 29s (初回) | 25 |
| 同じ refactor | 14B | 9s (warm) | 25 |
メモリ使用は 7B が 4.9GB / 14B が 9.7GB の VRAM、両モデル同時ロードで合計 14.6GB です。48GB 機なら他作業に支障は感じませんでした。32GB 機では 14B 単独運用 (7B はアンロード) が安全圏です。
品質面では、7B はテスト雛形は十分こなすが refactor でロジックバグを混入させた事例があり、Cmd+I のデフォルトに置くのは危険でした。詳細は ベンチ結果と役割分担の処方箋。実機での 7B refactor バグ混入の具体例も掲載。MAX プランから Pro プランへ — Claude Code の節約術 (Ollama 分業設計)
起動運用 (再起動後の注意)
外部 SSD にモデルを置く構成では、起動時の SSD 接続順序 に注意が必要です。
推奨手順
- Mac 起動後、まず外部 SSD を接続 (
/Volumes/Samsungがマウントされたことを確認) launchctl setenv OLLAMA_MODELS /Volumes/Samsung/ollama-modelsを実行 (再起動で揮発するため)open -a Ollamaで Ollama 起動
.zshrc の export OLLAMA_MODELS=... は新規シェルで有効になるので、ターミナルから ollama コマンドを叩く分には自動で効きます。問題は GUI 起動の Ollama.app で、こちらは launchctl setenv が効いた状態で起動しないと内蔵 ~/.ollama を見にいってしまいます。
毎回手で打つのが面倒なら、起動スクリプトを ~/bin あたりに用意しておくと楽です。
#!/bin/bash
# ~/bin/start-ollama.sh
launchctl setenv OLLAMA_MODELS /Volumes/Samsung/ollama-models
open -a Ollama --args hidden
chmod +x ~/bin/start-ollama.sh
注意点 (運用してわかったこと)
- SSD は常時接続前提: 推論中に抜くとプロセスがクラッシュします
- スリープ復帰でアンマウント されることがあります。
/Volumes/Samsungの存在確認は起動スクリプトに入れるのを推奨 - ボリューム名にスペースや日本語を入れない:
/Volumes/My Driveのような名前は環境変数のクオートで詰まりがち - 次世代 Apple Silicon の SSD 帯域: M4 Pro 内蔵 NVMe は ~5000 MB/s、Samsung T7/T9 (USB-C) は ~1000-2000 MB/s。初回ロードが遅くなる差はあるが推論速度自体は同等 なので体感は気になりません
まとめ
Apple Silicon Mac でローカル LLM を試すなら、外部 SSD 運用は内蔵ストレージを圧迫しない実用的な選択肢です。注意点は (1) brew が Intel 版でないか確認、(2) 公式インストーラー使用、(3) OLLAMA_MODELS を .zshrc と launchctl setenv の両方に書く、の 3 点。これだけ押さえれば 15 分でセットアップが終わります。
ローカル LLM を実際に活用するためのエディタ統合 (VS Code 拡張 Continue) は別記事にまとめています。
関連記事
Continue (VS Code 拡張) を Ollama で完全無料運用 — Cursor の代替を月額 ¥0 で作る
本記事で立てた Ollama を VS Code から呼ぶ拡張 Continue のセットアップ。Cursor との 80% 互換比較表とロール分配の config.yaml 付き。
MAX プランから Pro プランへ — Claude Code の節約術 (Ollama 分業設計)
本記事で動かしたローカル LLM を、Claude Code とどう分業させるかの設計。実機ベンチと判断フローチャート付き。
Claude Crew Lab Free — 毎月の実験記録をメールで
Claude Code × 個人開発のリアルな事故・発見・SaaS アイデアを毎月第1月曜にお届け。登録で「収益化チェックリスト 15 項目」を無料プレゼント。
Lab Free 登録(月1回・無料)
この記事が役に立ったらシェア