OpenCodeは、OpenAI互換APIに対応したターミナルベースのコーディングアシスタントです。Gemma 4を動かしているローカルのOllamaインスタンスを指定すれば、無料のコーディングアシスタントとして使えます。コードが外部に送信される心配もありません。

Apple Silicon搭載Macでのセットアップ手順はシンプルです。OllamaをインストールしてGemma 4をpullし、OpenCodeに接続するだけです。

必要なもの

  • Apple Silicon(M1/M2/M3/M4/M5)搭載Mac、ユニファイドメモリ16GB以上
  • HomebrewがインストールされたmacOS
  • OpenCodeがインストール済み(opencode.ai を参照するか、パッケージマネージャーでインストールしてください)

Gemma 4のデフォルト8Bモデルはロード時に約9.6GB使用するため、16GBのユニファイドメモリがあればOllamaとOpenCodeの両方を問題なく同時に実行できます。

ステップ1: Ollamaをインストールする

brew install --cask ollama-app

これでOllama.app/Applications/にインストールされ、ollama CLIも/opt/homebrew/bin/ollamaに配置されます。

ステップ2: Ollamaを起動する

open -a Ollama

メニューバーにアイコンが表示されるのを待ってから、サーバーが動作していることを確認します。

ollama list

ステップ3: Gemma 4をpullする

ollama pull gemma4

約9.6GBダウンロードされます。確認:

ollama list
# NAME             ID              SIZE      MODIFIED
# gemma4:latest    ...             9.6 GB    ...

テスト:

ollama run gemma4:latest "Hello, what model are you?"

GPUアクセラレーションの確認:

ollama ps
# Should show CPU/GPU split, e.g. 14%/86% CPU/GPU

Apple Silicon上のOllama v0.19以上は、推論の高速化のためにAppleのMLXフレームワークを自動的に使用します。

ステップ4: OpenCodeでGemma 4を使えるように設定する

OpenCodeは~/.config/opencode/opencode.jsoncにある設定ファイルを使用します。Ollamaをカスタムプロバイダーとして追加します。

{
  "provider": {
    "ollama": {
      "npm": "@ai-sdk/openai-compatible",
      "options": {
        "baseURL": "http://localhost:11434/v1"
      },
      "models": {
        "gemma4:latest": {}
      }
    }
  }
}

Ollamaはローカルで動作するため、APIキーは不要です。ただしOpenCodeの仕様上、認証エントリが必要なため、~/.local/share/opencode/auth.jsonにプレースホルダーを追加します。

{
  "ollama": {
    "type": "api",
    "key": "ollama"
  }
}

OpenCodeを再起動し、/modelsを使ってollama/gemma4:latestに切り替えます。

ステップ5: Gemma 4をメモリに常駐させる

Ollamaはデフォルトで5分間アイドル状態が続くとモデルをアンロードします。1日中コーディングアシスタントとして使う場合、このままでは不要なコールドスタートが頻発します。

keep-aliveを無期限に設定します。

launchctl setenv OLLAMA_KEEP_ALIVE "-1"

この設定を反映するにはOllamaを再起動してください。システムを再起動しても設定を維持するには、~/.zshrcに追加します。

export OLLAMA_KEEP_ALIVE="-1"

ログイン時に起動するには、Ollamaのメニューバーアイコンをクリックし、Launch at Login を選択します。

起動時に自動プリロードする

LaunchAgentを作成して、再起動後もGemma 4がすぐに使える状態にしておきます。

cat << 'EOF' > ~/Library/LaunchAgents/com.ollama.preload-gemma4.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.ollama.preload-gemma4</string>
    <key>ProgramArguments</key>
    <array>
        <string>/opt/homebrew/bin/ollama</string>
        <string>run</string>
        <string>gemma4:latest</string>
        <string></string>
    </array>
    <key>RunAtLoad</key>
    <true/>
    <key>StartInterval</key>
    <integer>300</integer>
    <key>StandardOutPath</key>
    <string>/tmp/ollama-preload.log</string>
    <key>StandardErrorPath</key>
    <string>/tmp/ollama-preload.log</string>
</dict>
</plist>
EOF

launchctl load ~/Library/LaunchAgents/com.ollama.preload-gemma4.plist

これにより5分ごとに空のプロンプトでモデルにpingを送信し、メモリに保持します。

Gemma 4がOpenCodeで得意なこと

Gemma 4 8Bは無料でローカルで動作し、日常的なコーディング作業に驚くほど役立ちます。

  • コードの説明。 関数の動作、モジュールの構造、正規表現が何に一致するかなどを質問できます。標準的なコードベースに対しては明確で正確な回答が得られます。
  • 簡単な編集。 タイポの修正、importの更新、型定義へのフィールド追加、変数名の変更など。単一ファイルの変更が得意分野です。
  • ボイラープレートの生成。 設定ファイル、テストスタブ、APIルートのスキャフォールディング、Dockerfileのテンプレートなど。あまり推論を必要としない一般的なパターンに向いています。
  • シェルコマンドのヘルプ。 gitのフラグやjqのフィルターを忘れたとき、Stack Overflowを開かなくてもコマンドを教えてくれます。

苦手なこと

  • 複数ステップの推論。 複数ファイルにまたがる計画立案や複雑な制御フローの理解が必要なタスクは、不完全な結果になりがちです。
  • 大規模なリファクタリング。 コードベース全体で整合性を保ちながら変更する必要がある場合、8Bモデルは一貫性を失います。ファイル単位では動作しますが、全体像を把握できません。
  • エッジケースや微妙なバグ。 明らかな問題は検出できますが、深いドメイン知識や境界条件を考慮した推論が必要なバグは見逃します。

さらに活用する:Haimakerでクラウドモデルを追加

Gemma 4のローカル実行は基本的な用途をカバーします。複雑なデバッグ、複数ファイルのリファクタリング、深い推論が必要なタスクなど、対応しきれない場面が出てきたら、クラウドモデルに切り替えましょう。Haimakerは、Claude Opus、GPT-5、Gemini Proなどに1つのAPIキーでアクセスできるサービスです。

Ollamaに加えて、Haimakerを2つ目のプロバイダーとして追加します。

{
  "provider": {
    "ollama": {
      "npm": "@ai-sdk/openai-compatible",
      "options": {
        "baseURL": "http://localhost:11434/v1"
      },
      "models": {
        "gemma4:latest": {}
      }
    },
    "haimaker": {
      "npm": "@ai-sdk/openai-compatible",
      "options": {
        "baseURL": "https://api.haimaker.ai/v1"
      },
      "models": {
        "anthropic/claude-sonnet-4-6": {},
        "openai/gpt-5": {},
        "google/gemini-2.5-pro": {}
      }
    }
  }
}

HaimakerのAPIキーを~/.local/share/opencode/auth.jsonに追加します。

{
  "ollama": {
    "type": "api",
    "key": "ollama"
  },
  "haimaker": {
    "type": "api",
    "key": "YOUR_HAIMAKER_API_KEY"
  }
}

これでOpenCodeの/modelsでローカルモデルとクラウドモデルを切り替えられます。簡単な作業にはGemma 4を使い、難しいタスクにはSonnetやGPT-5に切り替えましょう。

haimaker.aiでサインアップしてAPIキーを取得し、モデルカタログをご覧ください。

HaimakerのAPIキーを取得する

トラブルシューティング

/modelsにプロバイダーが表示されない。 設定ファイルを編集した後はOpenCodeを再起動してください。OpenCodeの実行中はopencode.jsoncへの変更が反映されません。

「Model not found」というエラー。 設定内のモデルIDがOllamaに表示される名前と完全に一致していることを確認してください。ollama listを実行し、表示された名前(通常はgemma4:latest)を使用してください。

Ollamaでの認証エラー。 Ollama自体は認証を必要としませんが、OpenCodeのプロバイダーシステムはauth.jsonにエントリを要求します。プレースホルダーの"key": "ollama"で十分です。

応答が遅い。 Apple SiliconでMLXアクセラレーションを利用するにはOllama v0.19以上であることを確認してください。ollama --versionで確認できます。また、ユニファイドメモリを圧迫するアプリを閉じてください。タブを多数開いたブラウザが原因であることが多いです。

コンテキストウィンドウの問題。 Gemma 4は大きなコンテキストウィンドウをサポートしていますが、16GB構成の環境では安定した出力品質のために32Kトークン以下に抑えることをおすすめします。長いプロンプトで応答品質が低下する場合、これが原因である可能性が高いです。

便利なOllamaコマンド

コマンド説明
ollama listダウンロード済みモデルの一覧表示
ollama ps実行中のモデルとメモリ使用量の表示
ollama run gemma4:latestインタラクティブチャット
ollama stop gemma4:latestメモリからモデルをアンロード
ollama pull gemma4:latest最新バージョンに更新
ollama rm gemma4:latestモデルの削除

すでにHaimakerをOpenCodeで使っていますか?モデルの追加についてはカスタムプロバイダー設定ガイドをご覧ください。