ANTIGRAVITY LABEN
記事一覧/Antigravity 基本
Antigravity 基本/2026-05-02上級

Gemma 4 × Antigravity 完全実践ガイド — ローカルLLM・RAG・Ollama/LM Studio連携の全部入り

Antigravity と Gemma 4 を組み合わせて、ローカルLLM環境・RAG構築・Ollama/LM Studio連携・ファインチューニングまで全部を実用レベルで運用するための実践ガイド。プロンプト設計から運用上の注意まで網羅的に解説します。

Gemma 421Antigravity338ローカルLLM20Ollama12LM Studio5RAG5プレミアム3

「Antigravity で Gemma 4 をフル活用したいのですが、どこから手をつければ良いですか?」という質問が、私のもとに毎日のように届くようになりました。Antigravity が Gemma 4 をネイティブにサポートし始めて以来、ローカル LLM を本格的に業務で使いたい開発者の関心が一気に高まっています。

私自身、Antigravity と Gemma 4 を組み合わせて、いくつかの個人プロジェクトを運用してきました。ローカル LLM だけで完結するエディタ環境、RAG ベースのコードベース検索システム、ファインチューニングしたモデルの定常運用など、実務で踏んだ落とし穴も含めて、ここに体系的にまとめます。

通常記事には収まらないボリュームのため、プレミアム記事として整理しました。Antigravity を本気でローカル LLM 環境として運用したい方、Gemma 4 の真の実力を引き出したい方を想定読者としています。

Gemma 4 × Antigravity が選ばれる理由

最初に、なぜこの組み合わせが現在最も注目されているのかを整理します。

ひとつは、Antigravity が VS Code ベースのエディタとして Gemma 4 をネイティブ統合している唯一のメジャーツール であることです。Cursor や VS Code のサードパーティ拡張経由でも Gemma 4 を呼び出せますが、Antigravity ほど深くシームレスに統合されているケースは稀です。

もうひとつは、Gemma 4 自身の性能が、ローカル実行可能なモデルとして実用ラインを超えた ことです。27B パラメータの Gemma 4 は、コード生成や対話タスクで Claude や GPT-4o に肉薄する性能を出しつつ、ローカル GPU(24GB 程度の VRAM)で動作します。クラウド AI への依存を下げたい開発者にとって、ようやく実用的な選択肢が登場した形です。

私が個人的に重視しているのは、プライバシーとオフライン対応 です。クライアントワークで NDA のあるコードを扱う際、クラウド AI に送信できないことが多々あります。Gemma 4 をローカルで動かせれば、AI コーディング支援を維持したまま守秘義務を完全に守れます。

環境構築 — ハードウェアと OS の選定

Gemma 4 を Antigravity 経由で快適に動かすために、最低限必要なハードウェアスペックを整理します。

必要 VRAM は、量子化レベルによって大きく変わります。Gemma 4 27B を 8bit 量子化で動かす場合は約 32GB の VRAM が必要、4bit 量子化(GGUF Q4_K_M)なら約 18GB まで下がります。Apple Silicon の MLX 経由なら統合メモリで動作するため、M3 Max 64GB 以上が現実的なラインです。

RAM は VRAM とは別に最低 32GB を推奨します。Antigravity 自体のメモリ消費に加えて、モデルのロード時に一時的にシステムメモリを使うためです。

ストレージ は SSD で最低 100GB の空き容量が必要です。Gemma 4 27B は約 50GB、量子化版でも約 18GB のディスク容量を消費します。複数バリアントを切り替えて使う場合はさらに容量が必要です。

OS は macOS(Apple Silicon)、Linux(Ubuntu 22.04+)、Windows 11 のいずれも対応していますが、私の経験では macOS が最もトラブルが少ないです。Linux は CUDA まわりのドライバ問題が時々起きます。

Ollama 経由での Gemma 4 セットアップ

Ollama は最もシンプルな Gemma 4 ローカル実行方法です。Antigravity との統合も最も成熟しています。

# Ollama のインストール(macOS)
brew install ollama
 
# Ollama サービスの起動
ollama serve &
 
# Gemma 4 モデルの取得(4bit 量子化版)
ollama pull gemma4:27b
 
# 動作確認
ollama run gemma4:27b "Antigravity の特徴を 3 つ挙げてください"

ここで頻発する問題が、error: pull model manifest: file does not exist というエラーです。Ollama のレジストリに該当バージョンが存在しない、または指定モデル名がタイポしている場合に発生します。

# 利用可能なバリアントを確認
ollama list
 
# Ollama レジストリで利用可能なモデルを検索
curl https://ollama.com/api/tags | jq '.[] | select(.name | contains("gemma"))'
 
# 4b、12b、27b のサイズバリアントを試す
ollama pull gemma4:4b
ollama pull gemma4:12b

Ollama が起動したら、Antigravity 側の設定を行います。

// Antigravity の settings.json に追加
{
  "antigravity.localLLM.provider": "ollama",
  "antigravity.localLLM.endpoint": "http://localhost:11434",
  "antigravity.localLLM.defaultModel": "gemma4:27b",
  "antigravity.localLLM.contextSize": 32768,
  "antigravity.localLLM.temperature": 0.3
}

contextSize を 32768 に設定していますが、Gemma 4 のフルコンテキストは 128K まで拡張できます。VRAM に余裕があれば増やすことで、長いコードファイルを一度に処理できるようになります。

LM Studio 経由でのセットアップ

GUI ベースで管理したい場合は、LM Studio がおすすめです。Apple Silicon では MLX バックエンド経由で最高のパフォーマンスが出ます。

LM Studio をインストール後、検索画面で gemma-4-27b-it を検索し、量子化バリアント(GGUF Q4_K_M、MLX 4bit など)を選んでダウンロードします。ダウンロード後、ローカルサーバーモードを有効にすると、HTTP API でアクセスできるようになります。

// Antigravity の settings.json
{
  "antigravity.localLLM.provider": "lmstudio",
  "antigravity.localLLM.endpoint": "http://localhost:1234/v1",
  "antigravity.localLLM.defaultModel": "google/gemma-4-27b-it",
  "antigravity.localLLM.apiKey": "lm-studio"
}

LM Studio で頻発する問題のひとつが、モデルロード時の gemma 4 support is not ready yet エラー です。これは LM Studio のバージョンが古い場合に発生します。最新版(2026 年 5 月時点で 0.3.x 以降)にアップデートしてください。

もうひとつの問題が、Apple Silicon でのメモリ圧迫 です。MLX バックエンドはメモリ管理が独自のため、他のアプリの動作に影響することがあります。Activity Monitor でメモリ圧縮率を監視し、必要なら他のアプリを終了させるのが現実的です。

Antigravity の Agent モードで Gemma 4 を活用

Antigravity の真価は、Agent モードでローカル LLM を活用できる点にあります。クラウドモデルでは料金や速度の制約で躊躇するような長時間タスクも、ローカル Gemma 4 なら気軽に投げられます。

// Antigravity の Agent API を使った例
const agent = await antigravity.startAgent({
  task: 'src/ ディレクトリ全体を調査し、未使用の export を検出して削除する',
  scope: ['src/'],
  model: 'gemma-4-27b-local',
  options: {
    maxIterations: 50,
    maxRuntimeMinutes: 30,
    saveCheckpoints: true
  }
})
 
// 進捗を監視
agent.on('progress', (event) => {
  console.log(`[${event.iteration}] ${event.action}: ${event.target}`)
})
 
agent.on('checkpoint', (event) => {
  console.log(`Checkpoint saved: ${event.path}`)
})
 
const result = await agent.complete()
console.log(`完了: ${result.filesModified} ファイル修正`)

このコードで重要なのは、saveCheckpoints: true の指定です。ローカル LLM は時々応答が止まることがあり、その際にチェックポイントから再開できることが運用上の救いになります。

RAG パイプラインの実装

Gemma 4 を RAG(Retrieval-Augmented Generation)の生成側として使うパイプラインを構築します。これは、自分のコードベース全体を検索可能にして、Gemma 4 が回答に活用できる仕組みです。

# RAG パイプラインの最小構成(Python)
from sentence_transformers import SentenceTransformer
from qdrant_client import QdrantClient
from qdrant_client.models import Distance, VectorParams, PointStruct
import requests
import os
from pathlib import Path
 
# 埋め込みモデル(ローカル)
embedder = SentenceTransformer('intfloat/multilingual-e5-large')
 
# Qdrant でベクトル DB をローカル起動
client = QdrantClient(host="localhost", port=6333)
 
client.recreate_collection(
    collection_name="codebase",
    vectors_config=VectorParams(size=1024, distance=Distance.COSINE)
)
 
# コードベースをチャンク化してインデックス
def index_codebase(root_path: str):
    points = []
    for path in Path(root_path).rglob("*.py"):
        content = path.read_text()
        chunks = chunk_code(content, max_lines=50)
        for i, chunk in enumerate(chunks):
            embedding = embedder.encode(chunk).tolist()
            points.append(PointStruct(
                id=f"{path}:{i}",
                vector=embedding,
                payload={"path": str(path), "chunk": chunk}
            ))
    client.upsert(collection_name="codebase", points=points)
 
def chunk_code(content: str, max_lines: int) -> list[str]:
    lines = content.split("\n")
    return ["\n".join(lines[i:i+max_lines]) for i in range(0, len(lines), max_lines)]
 
# Gemma 4 で回答を生成
def query_codebase(question: str) -> str:
    query_vector = embedder.encode(question).tolist()
    results = client.search(
        collection_name="codebase",
        query_vector=query_vector,
        limit=5
    )
    context = "\n\n".join([r.payload["chunk"] for r in results])
    
    response = requests.post(
        "http://localhost:11434/api/generate",
        json={
            "model": "gemma4:27b",
            "prompt": f"以下のコード断片を参考に質問に答えてください。\n\n{context}\n\n質問: {question}",
            "stream": False
        }
    )
    return response.json()["response"]
 
# 使用例
index_codebase("./src")
answer = query_codebase("認証フローはどこで実装されていますか?")
print(answer)

このパイプラインで実用上のポイントは、チャンクサイズの選定 です。50 行というのは私の経験から得た値で、コード全体の構造を保ちつつ、Qdrant の検索精度を最大化する妥協点です。チャンクが小さすぎると文脈が失われ、大きすぎると無関係な情報まで取得されます。

もうひとつのポイントは、埋め込みモデルとして multilingual-e5-large を使う ことです。日本語のコメントとコードの両方を検索する場合、英語特化モデルでは精度が出ません。多言語対応モデルを使うことで、コメントが日本語でも英語でも安定して検索できます。

ファインチューニング — LoRA で Gemma 4 をカスタマイズ

特定のドメイン知識を Gemma 4 に学習させたい場合、LoRA(Low-Rank Adaptation)でのファインチューニングが現実的です。フル学習よりはるかに少ないリソースで、自分のコードスタイルや業務知識を反映できます。

# LoRA ファインチューニングの最小構成
from transformers import AutoModelForCausalLM, AutoTokenizer
from peft import LoraConfig, get_peft_model
from datasets import load_dataset
from transformers import TrainingArguments, Trainer
 
# モデルとトークナイザーをロード
model_name = "google/gemma-4-27b-it"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(
    model_name,
    load_in_4bit=True,
    device_map="auto"
)
 
# LoRA 設定
lora_config = LoraConfig(
    r=16,
    lora_alpha=32,
    target_modules=["q_proj", "v_proj"],
    lora_dropout=0.1,
    bias="none",
    task_type="CAUSAL_LM"
)
model = get_peft_model(model, lora_config)
 
# データセット準備(自社のコードレビューコメント等)
dataset = load_dataset("json", data_files="./training_data.jsonl")
 
# トレーニング
training_args = TrainingArguments(
    output_dir="./gemma4-lora-output",
    num_train_epochs=3,
    per_device_train_batch_size=2,
    gradient_accumulation_steps=8,
    learning_rate=2e-4,
    fp16=True,
    save_steps=100,
    logging_steps=10,
)
 
trainer = Trainer(
    model=model,
    args=training_args,
    train_dataset=dataset["train"],
    tokenizer=tokenizer,
)
trainer.train()
 
# ファインチューニング済みモデルを保存
model.save_pretrained("./gemma4-lora-finetuned")

ファインチューニング後、生成された LoRA アダプタを Ollama または LM Studio で読み込めば、Antigravity から自分専用にカスタマイズされた Gemma 4 を呼び出せます。

ファインチューニングで頻発する問題が、過学習 です。学習データが少ない(数百例以下)と、Gemma 4 のベース知識を破壊してドメイン外の質問に答えられなくなります。学習率を下げる(2e-5 程度)、エポック数を減らす(1 〜 2)、データ量を増やす(最低 1,000 例)ことで対処します。

もうひとつの問題が、メモリ不足エラー です。load_in_4bit=True の指定で大幅に削減されますが、それでも 24GB VRAM が下限です。さらに削減したい場合は gradient_checkpointing=True を追加します。

量子化の選び方 — 性能とメモリのトレードオフ

Gemma 4 を実用するうえで、量子化レベルの選定は最も重要な意思決定です。

FP16(量子化なし) は最高品質ですが、27B モデルで約 54GB の VRAM が必要です。実質的にデータセンター GPU 専用です。

Q8(8bit 量子化) は、品質劣化が体感ではほぼ感じられないレベルで、VRAM を半分(約 30GB)に削減できます。RTX 4090(24GB)では収まらないため、A100 や M3 Ultra クラスが必要です。

Q5_K_M(5bit) は、品質劣化が軽微で、VRAM を約 20GB まで削減できます。RTX 4090 や M2 Pro 32GB で快適に動きます。私が日常使いしているのはこのバリアントです。

Q4_K_M(4bit) は、品質劣化が場面によっては感じられる程度で、VRAM を約 18GB まで削減できます。RTX 4080 や M2 Pro 16GB でも動作可能になります。コーディング用途では十分実用的です。

Q3 / Q2 は、品質劣化が顕著で、コード生成では誤りが目立ちます。チャット用途や試験的な実装では使えますが、本番コードの生成には推奨しません。

私の推奨は、RTX 4090 や M3 Max クラスなら Q5_K_M、より下位のハードウェアなら Q4_K_M です。Q4 と Q5 は体感差が小さい場面が多いため、メモリに余裕があるなら Q5_K_M を選んでおくのが無難です。

運用上の注意 — 実プロジェクトで踏んだ落とし穴

実プロジェクトで Gemma 4 + Antigravity を運用してきた中で、私が踏んだ落とし穴を共有します。

ひとつ目 は、ロングコンテキスト処理時のメモリ急増です。128K のフルコンテキストで動作させると、VRAM が一気に消費されます。実用上は 32K 〜 64K に制限し、必要なときだけ拡張するほうが安定運用できます。

ふたつ目 は、Ollama サービスの突然の停止です。Ollama は時々ハングアップして応答しなくなり、Antigravity が connection refused エラーを返す状態になります。ollama serve を systemd や launchd で常駐化し、ヘルスチェック付きで自動再起動する仕組みを組むのが現実的です。

みっつ目 は、モデルファイルの破損です。Ollama の更新中に通信が切れると、モデルファイルが壊れることがあります。ollama list で表示されても実際は動かない状態が起きるため、定期的に動作確認するスクリプトを回しておくと早期発見できます。

よっつ目 は、Antigravity の更新による互換性問題です。Antigravity が更新されると、ローカル LLM の設定スキーマが微妙に変わることがあります。settings.json をバージョン管理しておき、更新後に動作確認するワークフローを習慣化するのが安全です。

私の現在の運用構成 — 参考までに

参考までに、私が 2026 年 5 月時点で運用している Gemma 4 + Antigravity 構成を共有します。

ハードウェアは Mac Studio(M3 Ultra 96GB)です。MLX バックエンドで Gemma 4 27B Q5_K_M を常時ロードしています。VRAM 統合メモリで余裕があるため、複数モデル(Gemma 4 27B、Gemma 4 12B、Embedding モデル)を同時にロードできています。

エディタは Antigravity(VS Code ベース)です。Agent モードでは Gemma 4 27B Q5_K_M を使い、シンプルなコード補完では Gemma 4 12B を使い分けています。後者は高速応答が必要な場面(タイピング中の補完など)で活躍します。

RAG パイプラインは Qdrant + multilingual-e5-large の組み合わせで、自分の個人開発リポジトリ群(合計約 50 万行)をインデックス化しています。「過去のあのプロジェクトでどう書いていたか」を瞬時に検索できる体験が、開発スピードを大きく押し上げました。

LoRA ファインチューニングは、自分のコードスタイル(命名規則、コメントの書き方、設計パターン)を学習させたバージョンを月 1 回程度の頻度で更新しています。ベースの Gemma 4 と、自分専用にチューニングされたバージョンを切り替えながら使い分けています。

全体を振り返って

Gemma 4 と Antigravity の組み合わせは、ローカル LLM ベースの本格的な開発環境を構築する上で、現時点で最も現実的な選択肢です。Ollama または LM Studio による実行、RAG パイプラインの構築、LoRA によるカスタマイズ、量子化レベルの最適化を組み合わせることで、クラウド AI に匹敵する開発体験をオフラインで実現できます。

導入のハードルは確かに高いですが、いったん環境が整えば、月額の AI 利用料金から完全に解放されます。プライバシーが厳しいクライアントワーク、オフライン環境での開発、コストを徹底的に下げたい個人プロジェクトなど、ローカル LLM が活きる場面は少なくありません。

私自身、すべてをローカルに移行したわけではなく、用途に応じてクラウド AI とローカル LLM を使い分けています。ただ、Gemma 4 + Antigravity という選択肢が成熟したことで、「ローカルで十分な場面が増えた」という実感は確実にあります。

この記事の手順を順に試していただければ、ご自身の環境で Gemma 4 + Antigravity の本格運用が始められるはずです。詰まったポイントがあれば、当サイトの個別記事でも詳しく解説していますので、合わせて参照してみてください。

シェア

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

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

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

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

関連記事

Antigravity 基本2026-04-23
Antigravity × ローカルLLM(Ollama / LM Studio / LM Link)を本番運用する実践接続ガイド
AntigravityとOllama・LM Studio・LM Linkの接続は、『とりあえず繋がる』までは比較的簡単でも、本番作業で1日8時間走らせると切断・応答遅延・モデル切替失敗といった問題に必ず突き当たります。接続層の安定化、モデル選定の判断基準、フォールバック設計、監視の仕組みまで、実務で使える形にまとめました。
Antigravity 基本2026-04-09
Antigravity でローカル LLM を設定して活用する手順
Antigravity でローカルLLMを設定する方法を完全解説。Ollama・LM Studio との連携から実際のコーディング支援活用まで、プライバシー重視の開発環境を構築します。
Antigravity 基本2026-04-16
Gemma 4 を Antigravity で動かす — Ollama 接続の設定とローカル/クラウドの使い分け
Gemma 4 を Antigravity IDE からローカルで使う手順をまとめました。Ollama の導入、接続できたかを確かめる3段階の切り分け、keep_alive による読み込み待ちの解消、Gemini 2.5 Pro との現実的な使い分けまで、日々の開発で定着した構成をお伝えします。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます
もっと見る →