ANTIGRAVITY LABEN
記事一覧/AIツール
AIツール/2026-04-19上級

Gemma 4 × Antigravity でローカルLLMを本番環境で動かす——セットアップから安定運用まで

Gemma 4 を Antigravity と繋いでローカルで本番運用するまでの道筋です。モデルサイズの選び方・Ollama のチューニング・API連携・応答が遅いときの対処を、実装例を添えて追っていきます。

gemma-420local-llm16ollama8antigravity436production59fine-tuning7

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 serve

Antigravityと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.tool

Antigravityを再起動しても繋がらない場合、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に依頼する」というものです。

  1. Antigravityを開いてローカルモデル(gemma4:9b)を選択
  2. リファクタリングしたいファイルをコンテキストに追加
  3. 「このファイルのエラーハンドリングをより堅牢にして。変更は最小限にすること」と伝える
  4. 生成されたコードをAntigravityのdiff viewで確認してから適用する

クラウドAPIと比べると応答は遅いですが、機密性が高いコードや、バッチ処理で大量のファイルを処理するような用途では、ローカルLLMの方が適しています。

まずは gemma4:9b でセットアップして、実際にAntigravityとの連携を体験してみてください。体験してみると「どんなタスクにローカルLLMが向いているか」が自然に分かってきます。

シェア

お読みいただきありがとうございます

Antigravity Lab は広告なしで運営しており、サーバー費用などの運営コストはメンバーシップのご支援で賄っています。実装コード・ベンチマーク・本番設計パターンなど、実務でお役立ていただける記事を毎日更新しています。もし読んでよかったと感じていただけましたら、ぜひご覧ください。

  • コピー&ペーストで使える実装コード付き
  • 毎日新しい上級ガイドを追加
  • ¥580/月 または ¥1,480 の永久アクセス
メンバーシップを見る →

もしこの記事がお役に立ちましたら、チップ(¥150)で応援いただけると大変励みになります。広告なしでの運営を続けるため、皆さまのご支援が大きな力になっています。

関連記事

AIツール2026-06-12
RAG の「それっぽいのに違う」回答を減らす — Gemma 4 × Antigravity で組む検索品質の評価ハーネス
RAG の回答が時々ズレる問題を数値に置き換える評価ハーネスの作り方。30問のゴールデンデータセット、recall@5・MRR・nDCG の実装、Gemma 4 による忠実性審査、pytest の回帰テストまで、ローカル環境の実測値と共に共有します。
AIツール2026-05-10
Gemma 4 を Antigravity で動かすとき、Q4 と Q5 のどちらを選ぶか — M2 Mac で実測した3軸の結果
Gemma 4 を Antigravity でローカル運用するときに迷う Q4_K_M / Q5_K_M / Q8_0 / fp16 の選び方を、M2 Mac 16GB の実機で速度・メモリ・出力品質の3軸で測った結果から解説します。
AIツール2026-04-21
Gemma 4 を自分用に仕上げる — LoRA / QLoRA ファインチューニングを現実的な予算で回すための実務ノート
Gemma 4 をフルファインチューニングするのは個人には荷が重いですが、LoRA/QLoRA で軽量に『自分用』に仕上げるのは現実的な予算で可能です。データ準備、学習設定、落とし穴、評価方法、そして Antigravity で活用するまでを、実体験ベースで掘り下げます。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます
もっと見る →