👶

【GAS×Gemini】AIが娘になりきる!家族が喜ぶパーソナルLINE Botの作り方

に公開

📍 はじめに

本記事では、プログラミング初心者でも取り組みやすいGoogle Apps Script (GAS) を利用し、Google Geminiの強力なAI機能と連携させて、「娘になりきって会話できるLINE公式アカウントBot」 を構築する方法を解説します。

このBotは以下の3つの機能を実現し、家族や親戚間のコミュニケーションを豊かにします。

  1. 画像ガチャ機能: 「ガチャ」と送ると、Googleドライブからランダムで娘の写真が送られてくる。
  2. 会話AI: 「好きな食べ物は?」などの質問に、娘になりきって可愛く返答する。
  3. API節約&高速化: よくある挨拶にはAIを使わず、定型文で即座に返答する。

💻 開発環境と準備

項目 利用技術 備考
プラットフォーム LINE Developers (Messaging API) Botの入り口
コード Google Apps Script (GAS) サーバーレスで運用
AI機能 Google Gemini API (gemini-2.5-flash-lite) 会話生成を担当
写真保管 Google Drive フォルダの公開設定が必須

事前準備

  1. LINE Developers:Webhook URLの取得とチャンネルアクセストークンを発行します。
  2. Gemini API Key:Google AI StudioでAPIキーを発行します。
  3. Google Driveフォルダ:写真を保存するフォルダを作成し、「リンクを知っている全員(閲覧者)」で共有設定をします。このフォルダのID(URL末尾の文字列)を控えておきます。

📜 1. GASコードの実装(メインロジック)

GASエディタに以下のコードを貼り付けます。これにより、LINEからのメッセージに応じて「ガチャ」「定型文」「AI会話」の処理を振り分けます。

// 【主な設定と定型文、API通信部分は省略。詳細は本文を参照してください】

// ==========================================
// メイン処理 (doPost)
// ==========================================
function doPost(e) {
  // ... (LINEからのイベント取得処理) ...
  
  const event = json.events[0];
  const replyToken = event.replyToken;
  const userMessage = event.message.text || "";

  // 1. 友だち追加イベント時の処理 (follow)
  if (event.type === 'follow') {
    // 友だち追加時の案内メッセージを送信
    // ...
    return;
  }

  // 2. 画像ガチャ機能
  if (userMessage.match(/ガチャ|写真|画像|アルバム/)) {
    sendRandomPhoto(replyToken);
    return;
  }

  // 3. 定型文チェック(API節約ロジック)
  const fixedReply = getFixedReply(userMessage);
  if (fixedReply) {
    // 定型文に案内文を足して返信 (FOOTER_MSGを使用)
    // ...
    return;
  }

  // 4. AI会話(Gemini連携)
  const aiReply = chatWithMone(userMessage);
  // AI返答に案内文を足して返信 (FOOTER_MSGを使用)
  // ...
}

// ==========================================
// Gemini連携 (chatWithMone)
// ==========================================
function chatWithMone(text) {
  // ... (APIキーやモデル名のチェック) ...
  const model = "gemini-2.5-flash-lite"; 

  // プロンプト(MONE_PERSONA)で「40文字以内」など人格と文字数を定義
  // ...

  // UrlFetchApp.fetch() で APIを叩く
  // ...
  
  // APIからのテキストを短文で取り出して返す
  // ...
}

// ==========================================
// 画像ガチャ機能 (sendRandomPhoto)
// ==========================================
function sendRandomPhoto(replyToken) {
  // DriveApp.getFolderById(CONFIG.FOLDER_ID) でフォルダを取得
  // フォルダ内のファイルリストからランダムでIDを選ぶ
  // 画像URL形式: https://drive.google.com/uc?export=view&id=ファイルID を利用してLINE画像メッセージとして送信
}

⚙️ 2. スクリプトプロパティの設定

GASエディタの歯車アイコンから、以下の3つのプロパティを設定します。

プロパティ名
LINE_CHANNEL_ACCESS_TOKEN LINE Developersで発行したトークン
GEMINI_API_KEY Gemini APIで発行したキー
GOOGLE_DRIVE_FOLDER_ID 共有設定した写真フォルダのID

🚀 3. デプロイと連携

  1. デプロイ: GAS画面右上の「デプロイ」→「新しいデプロイ」でウェブアプリとして公開し、URLをコピーします。(アクセス権限は「全員」)
  2. LINE設定: LINE DevelopersのWebhook URLに、コピーしたURLを貼り付け、「Webhookの利用」をオンにします。

これでBotが稼働します。

💰 4. 運用とAPI節約のテクニック

このBotは以下の工夫により、無料枠内で安定運用できるように設計されています。

① API料金の節約(定型文ロジック)

  • 無料の定型文: 「おはよう」「可愛い」「疲れた」など、返答がパターン化できるものは、getFixedReply() 関数で処理し、Gemini APIへの呼び出し(課金対象)を回避しています。
  • Liteモデル採用: gemini-2.5-flash-lite は、処理が速く、より安価な最新モデルです。

② LINE無料枠の活用

  • 会話は無制限: ユーザーのメッセージに返信する形(Reply)で動作するため、LINEの「月間200通」の無料制限にカウントされません。*家族が何百回会話しても無料です。

👨‍👩‍👧 5. 共同管理と手動送信

  • 手動送信: 夫婦で手動メッセージ(例: 「公園に来てるよ!」)を送りたい場合、LINE公式アカウントのスマホアプリから送信するのが最も簡単で安全です。
  • 共同管理者: LINE Official Account Managerから妻などを「管理者」として招待することで、夫婦で協力してBotの運用が可能です。

💡 まとめ

GASとLINE, LLMの連携は非常に強力で、少ないコード量で実用的なパーソナルBotを実現できます。ぜひ、この「娘ちゃんBot」を基盤として、音声ボイスの再生や誕生日通知など、さらに高度な機能を追加してみてください!

Discussion