◉RORK LABEN
●GPT-6.1 SOL — Rork のモデルメニューに追加(09-29)。Low/Medium/High を選べ、Pro・Max に含まれます●SONNET 5.5 — UI づくりが得意で、Sonnet 5 より出力が速いモデルが選べます(09-28)●SDK 58 — Beta が 09/15 から。stable の案内はまだなく、Expo Go でのプロジェクト実行は 09/03 からログインが必要です●WIDGET — iOS のウィジェットが本番ビルドだけ真っ黒になる原因を追った報告が出ています●OBSERVE — EAS Observe がネイティブクラッシュも記録します(SDK 57.0.21 以降・10/07)●NEW — 起動広告が、背面から戻った回にしか出ていませんでした。「前面に戻った」合図が、…●GPT-6.1 SOL — Rork のモデルメニューに追加(09-29)。Low/Medium/High を選べ、Pro・Max に含まれます●SONNET 5.5 — UI づくりが得意で、Sonnet 5 より出力が速いモデルが選べます(09-28)●SDK 58 — Beta が 09/15 から。stable の案内はまだなく、Expo Go でのプロジェクト実行は 09/03 からログインが必要です●WIDGET — iOS のウィジェットが本番ビルドだけ真っ黒になる原因を追った報告が出ています●OBSERVE — EAS Observe がネイティブクラッシュも記録します(SDK 57.0.21 以降・10/07)●NEW — 起動広告が、背面から戻った回にしか出ていませんでした。「前面に戻った」合図が、…
記事一覧/アプリ開発
◇ アプリ開発/2026-04-11中級

Gemma 4をアプリ開発に活かす:オンデバイスAIの最前線

Googleが2026年4月にリリースしたGemma 4のE2B/E4Bモデルを使って、iOSやAndroidアプリにオンデバイスAIを組み込む方法を解説。プライバシー・オフライン動作・低レイテンシを実現する実践ガイドです。

Gemma 4アプリ開発76オンデバイスAI13iOS115Android55Rork585モバイルAI3

2026年4月2日にGoogleがリリースしたGemma 4は、モバイルアプリ開発者に新しい可能性を開いています。特にE2B(Effective 2B)とE4B(Effective 4B)は、スマートフォンに組み込むことを意識して設計された軽量モデルで、テキスト・画像・音声のマルチモーダル処理をデバイス上で直接実行できます。

オンデバイスAIのメリット

クラウドAPIではなくデバイス上でAIを動かすことには、大きな利点があります。

プライバシーの保護がまず挙げられます。ユーザーのデータがサーバーに送信されないため、個人情報・医療情報・ビジネス機密を扱うアプリでも安心して利用できます。GDPRや個人情報保護法などの規制対応にも有利です。

オフライン動作も大きな強みです。機内モードや地下など通信環境の悪い場所でも、AIの機能をフル活用できます。ユーザー体験の一貫性が保たれます。

低レイテンシも重要です。ネットワークのラウンドトリップがないため、AIの応答が即座に返ってきます。リアルタイムの音声処理や画像解析など、遅延に敏感なユースケースで特に効果的です。

コスト削減も見逃せません。API使用量に応じた従量課金がなくなるため、大規模なユーザーベースを持つアプリでは長期的なコスト面で有利になります。

Gemma 4 E2B / E4Bの仕様

Gemma 4のエッジモデルは以下の仕様を持っています。

E2Bはモデルサイズが2B(20億)パラメータ相当で、モバイルデバイスに最適化された軽量設計です。E4Bは4B(40億)パラメータ相当で、E2Bより高い精度が必要なケースに対応します。両モデルともコンテキストウィンドウは128,000トークンで、入力モダリティはテキスト・画像・動画・音声に対応しています。対応言語は140以上です。

iOSアプリへの統合

iOSアプリにGemma 4を組み込む主な方法は二つあります。

MediaPipe経由での組み込み

GoogleのMediaPipeフレームワークを使うと、LLMをiOSアプリに比較的簡単に統合できます。

import MediaPipeTasksGenAI
 
// LLMInferenceの初期化
// gemma-4-e2b-it.task ファイルを事前にバンドルしておく必要があります
guard let modelPath = Bundle.main.path(forResource: "gemma-4-e2b-it", ofType: "task") else {
    print("モデルファイルが見つかりません")
    return
}
 
let options = LlmInference.Options(modelPath: modelPath)
options.maxTokens = 1024
options.temperature = 0.7
 
do {
    let llmInference = try LlmInference(options: options)
    
    // テキスト生成の例
    let response = try llmInference.generateResponse(
        inputText: "このレシートの金額を合計してください:\(receiptText)"
    )
    print(response)
} catch {
    print("エラー: \(error)")
}

Core ML経由での最適化

Apple Siliconチップに最適化されたCore MLフォーマットに変換することで、さらに高速な推論が可能です。

# Pythonスクリプト:Gemma 4をCore MLに変換(前処理)
import coremltools as ct
from transformers import AutoModelForCausalLM, AutoTokenizer
 
# HuggingFaceからモデルをロード
model_id = "google/gemma-4-e2b-it"
tokenizer = AutoTokenizer.from_pretrained(model_id)
model = AutoModelForCausalLM.from_pretrained(model_id)
 
# Core MLに変換
traced_model = ct.convert(
    model,
    inputs=[ct.TensorType(shape=(1, 512))],
    compute_units=ct.ComputeUnit.ALL  # Neural Engineを活用
)
traced_model.save("gemma4_e2b.mlpackage")

Androidアプリへの統合

Androidでは、MediaPipeの他にLiteRTを使ったアプローチが有効です。

// Android Studio でのGemma 4統合例(Kotlin)
import com.google.mediapipe.tasks.genai.llminference.LlmInference
import com.google.mediapipe.tasks.genai.llminference.LlmInferenceOptions
 
class GemmaManager(private val context: Context) {
    
    private lateinit var llmInference: LlmInference
    
    fun initialize() {
        val modelPath = "${context.filesDir}/gemma-4-e2b-it.task"
        
        val options = LlmInferenceOptions.builder()
            .setModelPath(modelPath)
            .setMaxTokens(1024)
            .setTemperature(0.7f)
            .build()
        
        llmInference = LlmInference.createFromOptions(context, options)
    }
    
    // 非同期でテキスト生成
    suspend fun generateText(prompt: String): String {
        return withContext(Dispatchers.IO) {
            llmInference.generateResponse(prompt)
        }
    }
    
    // 画像を含むマルチモーダル入力
    suspend fun analyzeImage(bitmap: Bitmap, question: String): String {
        return withContext(Dispatchers.IO) {
            // MediaPipe Image を作成
            val mpImage = BitmapImageBuilder(bitmap).build()
            llmInference.generateResponse(question, listOf(mpImage))
        }
    }
    
    fun release() {
        llmInference.close()
    }
}

Rorkでの活用シナリオ

Rorkを使ってアプリを開発している場合、Gemma 4のAPIと連携することで強力なAI機能を実装できます。

// Rork + Gemma 4 APIの連携例(React Native / Expo)
// ローカルサーバー(LM Studio)経由でGemma 4を呼び出す
 
const callGemma4 = async (prompt, imageBase64 = null) => {
  const messages = [
    {
      role: "user",
      content: imageBase64
        ? [
            {
              type: "image_url",
              image_url: { url: `data:image/jpeg;base64,${imageBase64}` }
            },
            { type: "text", text: prompt }
          ]
        : prompt
    }
  ];
 
  const response = await fetch("http://localhost:1234/v1/chat/completions", {
    method: "POST",
    headers: { "Content-Type": "application/json" },
    body: JSON.stringify({
      model: "gemma-4-e4b",
      messages,
      temperature: 0.7,
      max_tokens: 512
    })
  });
 
  const data = await response.json();
  return data.choices[0].message.content;
};
 
// 使用例:カメラで撮影した商品の説明を生成
const analyzeProduct = async (cameraPhoto) => {
  const base64Image = await photoToBase64(cameraPhoto);
  const description = await callGemma4(
    "この商品について日本語で簡単に説明してください",
    base64Image
  );
  return description;
};

実用的なユースケース

Gemma 4をモバイルアプリに組み込むことで実現できる具体的な機能をいくつか挙げます。

リアルタイム翻訳: カメラで看板や文書を撮影すると、Gemma 4がOCRと翻訳を同時に行います。オフラインでも動作するため、海外旅行での実用性が高いです。

音声メモのAI整理: 音声入力(E2B/E4Bの機能)で録音したメモを自動的に要約・分類します。ネットワーク環境に依存しないため、電波の届かない場所でも使えます。

医療・ヘルスケアアプリ: 食事の写真を撮ると栄養情報を推定したり、症状を入力すると一般的な情報を提供したりする機能を、プライバシーを守りながら実現できます(ただし医療判断の代替ではありません)。

ビジネス文書処理: 名刺や領収書の写真からデータを抽出し、CRMや経費精算システムに自動入力する機能を、クラウドに送信せずに実現できます。

全体を振り返って

Gemma 4のE2B/E4Bは、これまでクラウドAPIに頼るしかなかったAI機能をデバイス上で実現する新しい道を切り開いています。Apache 2.0ライセンスで商用利用でき、プライバシー・オフライン動作・低レイテンシという三拍子揃ったオンデバイスAIは、モバイルアプリ開発者にとって非常に魅力的な選択肢です。

Rorkと組み合わせることで、AIを核心に据えた新しいアプリ体験を素早くプロトタイプできます。ぜひGemma 4を活かしたアプリ開発に挑戦してみてください。

シェア

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

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

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

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

関連記事

◇ アプリ開発2026-09-16
消したはずのトークンが再起動で戻る — SecureStore の削除失敗を検知する設計
サインアウト直後に getItemAsync が null を返しても、Android のディスクには値が残っていることがあります。削除の成否を読み出しで確かめていた実装を、戻り値で判断する形へ書き直した記録です。
◇ アプリ開発2026-08-18
Rork のプロジェクトで targetSdkVersion 36 を通すまでに直した3か所
app.json に targetSdkVersion 36 と書いてあるのに、ビルドが読んでいた値は 35 でした。実効値を報告するスクリプトと、引き上げ・更新停止・延長申請の三択の分け方を残します。
◇ アプリ開発2026-04-26
Rork でネイティブ iOS アプリを作る — SwiftUI 生成から TestFlight 配信までの実践ワークフロー
Rork の新規 iPhone プロジェクトは Swift/SwiftUI で生成され、Rork Pro で App Store まで届きます。古い Expo プロジェクトとの見分け方、クレジットで見る費用、骨格プロンプト、実機確認、Xcode に降りる基準、TestFlight 提出までを手順で追います。