👨

Gemini × LINEで作る辞書Bot|FastAPIで爆速構築

に公開

📚 Gemini × LINE 辞書Botを無料で作ってみた話

~FastAPI × Render × Gemini APIで、今すぐ動くAIチャットBot~

最近話題の「Gemini(旧Bard)」を使って、自分だけのLINE Botを作ってみませんか?

本記事では、LINEに送った言葉の意味をGeminiが即返してくれる“辞書Bot” を、
Python(FastAPI)と無料クラウド(Render)を使って構築した事例を紹介します。


✅ こんな人におすすめ

  • LINE Botの作り方を知りたい
  • Gemini API(Google生成AI)を活用してみたい
  • FastAPIと外部APIの連携に興味がある
  • ポートフォリオに載せられる生成AIプロジェクトを作りたい

🔍 本記事で学べること

  • Gemini Flash API(無料プラン)の使い方
  • LINE Messaging APIとの接続方法
  • FastAPIによるWebhook構成とメッセージ処理
  • Render(無料枠)でのサーバーレスデプロイ手順
  • Quota超過・APIエラー時の例外処理とログ管理

例えば、LINEで「機械学習とは?」と送ると…

🤖 Geminiがやさしく定義を返してくれるBotが完成します。

学習目的でも、仕事に近いBot構築スキルの習得にもおすすめの構成です!


1. Botの構成

このBotは、以下のような構成で動作しています。

構成図付きの全体像

  • FastAPI:LINE PlatformからのWebhookを受け取り、処理を非同期で実行

  • Gemini API:Googleの生成AI(Flashモデル)を利用し、短時間で定義を生成

  • Render:Webhookアプリをホスティング。無料プラン対応

2. Google Gemini API キーの取得

Google AI Studio にアクセス
「APIキーを作成」から取得

.env または Render 環境変数で GOOGLE_API_KEY に設定

GOOGLE_API_KEY=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
MODEL_NAME=gemini-1.5-flash

3. LINE DevelopersでBot設定

https://developers.line.biz/ にログインし「Messaging APIチャネル」を作成

Webhook URLを https://your-app-name.onrender.com/callback に設定

チャネルアクセストークンとシークレットを .env に記述

LINE_CHANNEL_ACCESS_TOKEN=xxxxxxxxxxxxxxxxxxxxxxxx
LINE_CHANNEL_SECRET=xxxxxxxxxxxxxxxxxxxxxxxx

4. FastAPI ソース解説(app.py)

@app.post("/callback")
async def callback(request: Request):
    """LINEプラットフォームからのWebhook受信処理"""
    body = await request.body()
    signature = request.headers.get("X-Line-Signature", "")
    try:
        handler.handle(body.decode("utf-8"), signature)
    except InvalidSignatureError:
        logger.error("署名検証に失敗")
        raise HTTPException(status_code=400, detail="Invalid signature")
    return "OK"

POST /callback がLINEのWebhookエンドポイント

リクエストボディと署名を検証し、LINE SDKの handler でイベント処理を委譲

応答を非同期処理にして応答遅延を回避

その後、メッセージイベントの処理は以下のようになります:

@handler.add(MessageEvent, message=TextMessage)
def handle_message(event: MessageEvent):
    user_input = event.message.text
    reply = gemini.generate_reply(user_input)
    line_bot_api.reply_message(
        event.reply_token,
        TextSendMessage(text=reply)
    )

ユーザーのテキストをGemini APIに渡して辞書的な応答を生成

LINEにそのまま返信します

5. Gemini APIの呼び出し処理(gemini_client.py)

Geminiとのやり取りは、Google提供の google-generativeai ライブラリを使ってシンプルに実装できます。

import google.generativeai as genai

class GeminiClient:
    def __init__(self, api_key: str, model_name: str):
        genai.configure(api_key=api_key)
        self.model = genai.GenerativeModel(model_name)

    def generate_reply(self, user_input: str) -> str:
        prompt = f"{user_input} わかりやすく説明してください。"
        try:
            response = self.model.generate_content(prompt)
            return response.text.strip()
        except Exception as e:
            return f"Gemini APIエラー: {str(e)}"

✅ ポイント
generate_content() により、自然な定義文が高速で得られる

無料枠の Flash モデル(gemini-1.5-flash)を指定可能

API制限エラーなどもキャッチして、LINE Botに伝達されます

🚀 Renderへのデプロイ手順(無料プラン)

  1. プロジェクトをGitHubにPush
    以下のような構成でプロジェクトを用意:

.
├── app.py
├── gemini_client.py
├── requirements.txt
├── render.yaml
├── Procfile
└── .env(Renderに直接設定)
2. Renderで「Web Service」作成
Render にサインアップ/ログイン

New → Web Service → GitHub連携

render.yaml を自動読み取り

環境変数を以下のように設定

LINE_CHANNEL_ACCESS_TOKEN=xxxx
LINE_CHANNEL_SECRET=xxxx
GOOGLE_API_KEY=xxxx
MODEL_NAME=gemini-1.5-flash

6. worker.py を使う場合(オプション)

非同期で重い処理を回したい場合は、Renderの「Background Worker」機能を使い、worker.py を別プロセスとして動作させられます。

🧪 テストとデバッグ方法
単体テストの例(test_gemini_client.py)

from gemini_client import GeminiClient
import os

def test_generate_reply():
    api_key = os.getenv("GOOGLE_API_KEY")
    model = os.getenv("MODEL_NAME", "gemini-1.5-flash")
    client = GeminiClient(api_key, model)
    reply = client.generate_reply("機械学習とは?")

✅ まとめ

このプロジェクトは、次のような方におすすめです:

Gemini APIの実践的な使い方を学びたい方

FastAPI × LINE Bot連携のプロトタイプを作成したい方

Renderの無料枠でデプロイしたい方

🙌 github

お問い合わせはこちら👇

問い合わせフォーム


Discussion