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へのデプロイ手順(無料プラン)
- プロジェクトを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の無料枠でデプロイしたい方
Discussion