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

Gemma 4 で日本語テキスト処理アプリを作る — 要約・感情分析を Antigravity で実装する

Gemma 4 の高い日本語対応力を活かし、Antigravity で Python アプリを実装する手順を解説。テキスト要約・感情分析のコードをステップ別に示します。

gemma412python26nlp日本語処理antigravity435

日本語のテキストデータをクラウドに送らずにAI処理したい——そう考えたとき、真っ先に選択肢に上がるのが Gemma 4 です。Google がオープンソースで公開しているこのモデルは、日本語の理解精度が前世代から大きく向上しており、個人情報を含む日本語コンテンツの処理にも適しています。

ここではAntigravity を使って Python 環境を整え、日本語テキストの要約と感情分析を実装する流れを実際のコードと合わせて紹介します。「Gemma 4 を使ってみたいけど、何を作ればいいか分からない」という方にとって、最初の手がかりになれば嬉しいです。

Gemma 4 が日本語処理に向いている理由

Gemma 4 は多言語コーパスで学習されており、日本語・英語・中国語・韓国語など主要言語を同一モデルで扱えます。前世代の Gemma 3 と比べると、日本語の文章構造(主語省略・助詞の多様性)への対応が改善されており、要約・翻訳・感情分析といったタスクで実用的な精度が出るようになりました。

もうひとつの強みはサイズの選択肢です。Gemma 4 には複数のパラメータ数のバリアントがあり、ローカルマシンのスペックに合わせてモデルを選べます。API経由で使う場合はモデル選択が不要なので、まずは API から試してみることをおすすめします。

Antigravity で Python 開発環境を整える

Antigravity の新規プロジェクトを開いたら、まずターミナルで必要なパッケージをインストールします。

# Google GenAI SDK をインストール
pip install google-genai
 
# 環境変数ファイルを作成(APIキーは直接コードに書かない)
touch .env

.env ファイルに API キーを書き込みます(コードに直接書くと Git 管理時に漏洩リスクがあります)。

GEMINI_API_KEY=YOUR_GEMINI_API_KEY

Antigravity の場合、.env ファイルはプロジェクトルートに置くだけで IDE が自動認識します。環境変数の読み込みには python-dotenv を使うか、OS 環境変数に直接設定する方法を使います。

import os
from dotenv import load_dotenv
from google import genai
 
load_dotenv()
 
client = genai.Client(api_key=os.environ["GEMINI_API_KEY"])

日本語テキスト要約の実装

最初に作るのは要約機能です。ニュース記事・レポート・メールなど、長い日本語テキストを指定した文章数に収める関数を作ります。

def summarize_japanese(text: str, max_sentences: int = 3) -> str:
    """
    日本語テキストを指定した文章数以内で要約する。
    
    Args:
        text: 要約したい日本語テキスト
        max_sentences: 要約の最大文章数(デフォルト3)
    
    Returns:
        要約されたテキスト
    """
    if not text.strip():
        raise ValueError("テキストが空です")
    
    prompt = f"""以下の日本語テキストを{max_sentences}文以内で要約してください。
重要な情報を優先し、元のテキストにない情報は追加しないでください。
要約のみを出力し、前置きや説明は不要です。
 
テキスト:
{text}"""
    
    response = client.models.generate_content(
        model="gemma-4-27b-it",  # Gemma 4 27B(instruction-tuned)
        contents=prompt,
        config={"temperature": 0.3}  # 低めの温度で安定した出力を得る
    )
    
    return response.text.strip()
 
# 動作確認
sample_text = """
東京都は19日、2026年度の予算案を発表した。総額は15兆3千億円で、
前年度比で約3%増となる。重点項目として、子育て支援の充実と
デジタルインフラの整備が挙げられた。子育て支援では、
保育所の定員を2万人分増やす計画が盛り込まれた。
デジタルインフラでは、5G基地局の拡充と行政手続きの
オンライン化を推進する方針が示された。
"""
 
result = summarize_japanese(sample_text, max_sentences=2)
print(result)
# 期待する出力例:
# 東京都は2026年度予算案(15兆3千億円、前年度比3%増)を発表した。
# 子育て支援(保育所定員2万人増)とデジタルインフラ整備が重点項目となっている。

プロンプトで「前置きや説明は不要」と指定しているのがポイントです。これを省くと「承知しました。以下が要約です:」のような余計な前置きが付くことがあります。

感情分析機能を追加する

次に、日本語テキストの感情(ポジティブ・ネガティブ・ニュートラル)を分析する機能を実装します。レビュー分析や SNS モニタリングなどに使える機能です。

from dataclasses import dataclass
import json
 
@dataclass
class SentimentResult:
    label: str          # "positive" / "negative" / "neutral"
    score: float        # 0.0 〜 1.0(確信度)
    reason: str         # 判定の根拠(日本語)
 
def analyze_sentiment(text: str) -> SentimentResult:
    """
    日本語テキストの感情を分析する。
    
    Returns:
        SentimentResult: ラベル・スコア・根拠を含む結果
    
    Raises:
        ValueError: モデルの出力が JSON 形式でない場合
    """
    prompt = f"""以下の日本語テキストの感情を分析し、JSON形式で返してください。
 
返すべきJSON:
{{
  "label": "positive" または "negative" または "neutral",
  "score": 0.0から1.0の確信度(小数点2桁),
  "reason": "判定の根拠(1文で)"
}}
 
JSON以外のテキストは一切含めないでください。
 
テキスト:
{text}"""
    
    response = client.models.generate_content(
        model="gemma-4-27b-it",
        contents=prompt,
        config={"temperature": 0.1}  # 感情分析は低温度で決定論的に
    )
    
    # JSON パース
    raw = response.text.strip()
    # コードブロックが含まれる場合はクリーニング
    if raw.startswith("```"):
        raw = raw.split("```")[1]
        if raw.startswith("json"):
            raw = raw[4:]
    
    try:
        data = json.loads(raw)
        return SentimentResult(
            label=data["label"],
            score=float(data["score"]),
            reason=data["reason"]
        )
    except (json.JSONDecodeError, KeyError) as e:
        raise ValueError(f"モデルの出力を解析できませんでした: {raw}") from e
 
# 動作確認
reviews = [
    "このカフェ、雰囲気も良くてコーヒーも美味しかったです。また来たいです!",
    "注文してから40分待たされた上に、料理が冷めていた。二度と行かない。",
    "普通の定食屋さんです。価格相応かと思います。",
]
 
for review in reviews:
    result = analyze_sentiment(review)
    print(f"[{result.label.upper()}] score={result.score:.2f} | {result.reason}")
    print(f"  テキスト: {review[:30]}...\n")

実際に試してみると、日本語特有の表現(婉曲表現・文末の語感)をかなりうまく捉えてくれます。「普通」「まあまあ」「悪くはない」といった微妙なニュアンスも、スコアに反映されます。

よくある実装のつまずきポイント

モデル名の指定ミス: gemma-4-27b-it のように -it(instruction-tuned)サフィックスが必要です。ベースモデル(gemma-4-27b)では指示追従の精度が大きく落ちます。利用可能なモデル名は client.models.list() で確認できます。

JSON 出力の不安定さ: 感情分析のように構造化された出力を期待する場合、モデルがたまに JSON 以外のテキストを混入させることがあります。上記のコードのようにコードブロックのクリーニング処理を入れておくと安定します。Google GenAI SDK の response_schema 機能を使って型を強制する方法もあります。

長文テキストのコンテキスト超過: Gemma 4 のコンテキストウィンドウは大きいですが、非常に長い文書(10万字超)はチャンクに分割して処理する必要があります。詳しくはAntigravity Python SDK でFunction Callingを実装する:AIに外部ツールを使わせる実践ガイドで、API呼び出しのベストプラクティスも紹介しています。

実用的なアプリに仕上げるために

2つの関数ができたら、FastAPI でAPIエンドポイントとして公開することもできます。社内ツールとして使う場合は、Antigravity のビルトイン Web サーバー機能でそのままデプロイできます。

また、Gemma 4 をローカルで動かす——開発環境に自前AIを組み込む実践手順では、API を使わずに完全ローカルで Gemma 4 を実行する方法も解説しています。個人情報を扱うデータでは、ローカル実行も選択肢に入れてみてください。

今日の次のステップとして、まず手元にある短い日本語テキスト(メール・メモ・レビューなど)で summarize_japanese() を動かしてみてください。Antigravity の Inline Chat でコードの改善提案を求めながら作業すると、想像以上にスムーズに進められます。

シェア

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

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

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

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

関連記事

AIツール2026-04-14
Gemma 4のImplicit Cachingをアンチグラビティで活かす——同じコードを何度も読み込ませるコストを削減させる方法
Gemma 4のImplicit Caching機能をAntigravityで最大限に活用する実践ガイド。大規模コードベースでのクレジット消費を大幅に削減するプロジェクト設計術を解説します。
AIツール2026-04-10
Gemma 4ファインチューニング入門:AntigravityでカスタムAIモデルを作成する実践ガイド
Gemma 4をLoRA/QLoRAでファインチューニングし、Antigravityに組み込む手順を実践的に解説。データセット準備からカスタムモデルの活用まで、コード例付きで丁寧に説明します。
Tips & 活用術2026-05-12
Gemma 4 生成コードで出るランタイムエラー4パターンと修正手順 — Antigravity 実践
AntigravityでGemma 4が生成したコードにランタイムエラーが出るとき、パターン別の原因診断と修正手順を解説します。TypeError・AttributeError・asyncio・import衝突の4パターンを実例付きで整理しています。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます
もっと見る →