Gemma 4がGoogleからリリースされて以来、「Antigravity でローカルLLMとして動かしたい」という声を多く見かけるようになりました。プライバシー上の理由でクラウドAPIに送れないデータを扱いたい、コストを抑えたい、インターネット接続なしで使いたい——そういったニーズにGemma 4 × Antigravityの組み合わせはよく応えてくれます。
ただ、ローカルで動かすには「どのモデルサイズを選ぶか」「どう設定すれば安定するか」「Antigravityとどう繋ぐか」などの判断が必要で、情報が散在していて把握しにくい状況があります。ここではこの組み合わせを実際に運用した経験をもとに、セットアップから安定運用まで一通り解説します。
Gemma 4のモデルサイズ選択
まずどのサイズのGemma 4を使うかを決めます。これはマシンのスペックと用途によって変わります。
Gemma 4は以下のバリアントが公開されています。
- Gemma 4 4B: 4Gバイト程度のVRAM/RAM で動く。単純なコーディング補助・要約向け
- Gemma 4 9B: 8〜12GBのVRAM で動く。バランスが良く、Antigravityと組み合わせるなら最もよく使われる
- Gemma 4 27B: 16GB以上のVRAM 推奨。高度な推論・コード生成に向く
Apple Silicon Mac(M1/M2/M3/M4)を使っている場合、統合GPUとMetalFrameworkのおかげで、27Bモデルでも比較的快適に動きます。
# Ollamaでモデルをダウンロード
ollama pull gemma4:4b # 軽量版(Mac 16GB RAM以上で快適)
ollama pull gemma4:9b # バランス型(Mac 24GB RAM以上推奨)
ollama pull gemma4:27b # 高性能版(Mac 32GB RAM以上推奨)
# ダウンロード済みモデルを確認
ollama list
# 動作確認
ollama run gemma4:9b "Pythonでバブルソートを実装してください"OllamaのパフォーマンスチューニングでAntigravityを快適に使う
デフォルト設定でもGemma 4は動きますが、いくつかのパラメータを調整することで体感速度が大きく変わります。
# Ollamaの環境変数設定(~/.bashrc または ~/.zshrc に追加)
# GPUレイヤー数(Apple Silicon/NVIDIAのGPUを最大活用する)
export OLLAMA_GPU_LAYERS=999 # 全レイヤーをGPUに乗せる(VRAMが十分な場合)
# export OLLAMA_GPU_LAYERS=32 # VRAMが少ない場合は調整
# 並列リクエスト数
export OLLAMA_NUM_PARALLEL=4 # 4つまで同時リクエストを処理
# コンテキストウィンドウサイズ
export OLLAMA_CONTEXT_LENGTH=32768 # デフォルトより大きく設定
# Ollamaのサーバー起動
ollama serve &
# 設定が反映されているか確認
curl http://localhost:11434/api/generate -d '{
"model": "gemma4:9b",
"prompt": "Hello",
"stream": false
}'Apple Silicon Mac 向けの追加設定:
# Apple Silicon では NUM_GPU を明示的に設定するとMetalが最大活用される
OLLAMA_METAL=1 ollama serveAntigravityとOllamaをAPI経由で連携する
Antigravityの設定でOllama接続を有効にするだけでなく、APIとして直接呼び出す方法も覚えておくと応用範囲が広がります。
import requests
import json
from typing import Generator
OLLAMA_BASE_URL = "http://localhost:11434"
MODEL_NAME = "gemma4:9b"
def generate_with_ollama(
prompt: str,
system: str = "",
temperature: float = 0.7,
max_tokens: int = 2048
) -> str:
"""
Ollamaに通常のリクエストを送信して結果を取得する。
"""
payload = {
"model": MODEL_NAME,
"prompt": prompt,
"system": system,
"stream": False,
"options": {
"temperature": temperature,
"num_predict": max_tokens,
"num_ctx": 32768, # コンテキストウィンドウ
}
}
response = requests.post(
f"{OLLAMA_BASE_URL}/api/generate",
json=payload,
timeout=120 # ローカルLLMは時間がかかるため長めに設定
)
response.raise_for_status()
result = response.json()
return result["response"]
def stream_with_ollama(
prompt: str,
system: str = "",
temperature: float = 0.7
) -> Generator[str, None, None]:
"""
Ollamaにストリーミングリクエストを送信する。
長い応答をリアルタイムで受け取る際に使用。
"""
payload = {
"model": MODEL_NAME,
"prompt": prompt,
"system": system,
"stream": True,
"options": {
"temperature": temperature,
"num_ctx": 32768,
}
}
with requests.post(
f"{OLLAMA_BASE_URL}/api/generate",
json=payload,
stream=True,
timeout=300
) as response:
response.raise_for_status()
for line in response.iter_lines():
if line:
chunk = json.loads(line)
if not chunk.get("done", False):
yield chunk.get("response", "")
# 使用例
print("=== 通常の生成 ===")
result = generate_with_ollama(
prompt="Pythonの非同期処理について200文字で説明してください",
system="あなたは簡潔に説明するPythonの専門家です",
temperature=0.3
)
print(result)
print("\n=== ストリーミング生成 ===")
for chunk in stream_with_ollama(
prompt="Dockerの基本コマンドをまとめてください",
system="箇条書きで分かりやすく説明してください"
):
print(chunk, end="", flush=True)
print()OpenAI互換APIでAntigravityから使う
OllamaはOpenAI互換のAPIエンドポイントも提供しています。これを使うと、OpenAI SDK対応のツールからそのまま接続できます。
from openai import OpenAI
# OllamaのOpenAI互換エンドポイントに接続
client = OpenAI(
base_url="http://localhost:11434/v1",
api_key="ollama" # Ollamaは認証不要だがキーが必要なため適当な値を設定
)
def chat_with_gemma4(messages: list, temperature: float = 0.7) -> str:
"""
OpenAI SDK互換の形式でGemma 4と会話する。
Antigravityや他のOpenAI互換ツールと同じコードで使える。
"""
response = client.chat.completions.create(
model="gemma4:9b",
messages=messages,
temperature=temperature,
max_tokens=2048,
stream=False
)
return response.choices[0].message.content
# マルチターン会話の例
conversation = [
{"role": "system", "content": "あなたはコードレビューの専門家です。"},
{"role": "user", "content": "以下のコードをレビューしてください:\n\ndef calc(a,b):\n return a/b"},
]
review = chat_with_gemma4(conversation)
print(review)
# 会話を続ける
conversation.append({"role": "assistant", "content": review})
conversation.append({"role": "user", "content": "ゼロ除算の対策を追加したバージョンも書いてください"})
improved = chat_with_gemma4(conversation)
print(improved)AntigravityのWorkspace設定でローカルLLMを使う
AntigravityをローカルLLMと組み合わせて最大限に活用するための設定です。
// .antigravity/config.json(プロジェクト固有の設定)
{
"model": {
"provider": "ollama",
"name": "gemma4:9b",
"baseUrl": "http://localhost:11434",
"temperature": 0.2,
"maxTokens": 4096,
"contextLength": 32768
},
"agent": {
"maxSteps": 20,
"autoApprove": false, // 本番環境では false を推奨
"tools": ["read_file", "write_file", "search_files", "run_terminal"]
},
"context": {
"includePatterns": ["src/**/*.ts", "src/**/*.tsx"],
"excludePatterns": ["node_modules/**", "dist/**", "*.lock"]
}
}temperature: 0.2 はコーディング用途での推奨値です。コードの正確性を重視するなら低め、アイデア出しや説明文生成なら 0.7〜0.9 にします。
よくあるトラブルと対処法
❌ トラブル1: Gemma 4 の応答が遅い
原因と対処:
- GPUが使われていない可能性:
ollama psでモデルのGPU利用状況を確認する - 並列リクエストが多すぎる:
OLLAMA_NUM_PARALLEL=1に下げてみる - コンテキストが長すぎる:プロンプトを短くするか、
num_ctxを下げる
# GPU利用状況の確認
ollama ps
# 出力例: gemma4:9b 9.1 GB 100% GPU
# リソース使用状況の確認(Apple Silicon)
sudo powermetrics --samplers gpu_power -i 500 -n 5❌ トラブル2: Antigravityがローカルモデルに接続できない
# Ollamaが正常に起動しているか確認
ps aux | grep ollama
# ポートが使用中か確認
lsof -i :11434
# 直接APIをテスト
curl -s http://localhost:11434/api/tags | python3 -m json.toolAntigravityを再起動しても繋がらない場合、localhost の代わりに 127.0.0.1 を試してみてください。
❌ トラブル3: 応答の途中でモデルが止まる
ローカルLLMは max_tokens に達すると静かに止まります。generate_with_ollama 関数の max_tokens を増やすか、Ollamaの num_predict パラメータを調整してください。
# 長い応答が必要な場合
result = generate_with_ollama(
prompt="長い技術ドキュメントを生成してください",
max_tokens=8192, # デフォルト(2048)より大きく設定
temperature=0.3
)❌ トラブル4: メモリ不足でクラッシュする
Gemma 4 27Bをメモリが少ないマシンで動かそうとするとクラッシュします。
# 量子化版を使う(精度を少し落とす代わりにメモリを大幅削減)
ollama pull gemma4:9b-q4_K_M # 9Bの4ビット量子化版(約6GB)
ollama pull gemma4:27b-q4_K_M # 27Bの4ビット量子化版(約16GB)量子化版でも多くのコーディング・説明タスクでは十分な品質が得られます。
AntigravityのエージェントとローカルLLMを組み合わせた実用パターン
ローカルLLMをAntigravityのバックエンドとして使うと、インターネット接続なしでコーディング補助ができます。特に機密情報を含むコードを扱う場面で重宝します。
私がよく使うパターンは「Antigravityのエージェントモードで特定ファイルのリファクタリングをGemma 4に依頼する」というものです。
- Antigravityを開いてローカルモデル(gemma4:9b)を選択
- リファクタリングしたいファイルをコンテキストに追加
- 「このファイルのエラーハンドリングをより堅牢にして。変更は最小限にすること」と伝える
- 生成されたコードをAntigravityのdiff viewで確認してから適用する
クラウドAPIと比べると応答は遅いですが、機密性が高いコードや、バッチ処理で大量のファイルを処理するような用途では、ローカルLLMの方が適しています。
まずは gemma4:9b でセットアップして、実際にAntigravityとの連携を体験してみてください。体験してみると「どんなタスクにローカルLLMが向いているか」が自然に分かってきます。