AI Automate Lab
GAS自動化 中級

GASでLINE Botの作り方|60分で無料構築

著者: れん (更新: ) 約20分で読了
#GAS #LINE Bot #Messaging API #自動化 #チャットボット

この記事はGASでできること完全ガイドの実装編です。 「GASとは何か」から知りたい方は、先にそちらをご覧ください。

この記事では、GASとLINE Messaging APIを使って無料でLINE Botを構築する手順を解説します。 コードをコピペするだけで動くように、全コードを掲載しています。

この記事の前提

項目内容
必要なアカウントGoogle、LINE Developers
必要な知識GAS入門ガイドを読了済み
所要時間約60分
費用0円(GAS・LINE Messaging API無料枠)
完成物メッセージに自動応答するLINE Bot + スプレッドシートへのログ記録

この記事で作るもの

LINE Bot自動化とは、ユーザーからのメッセージに対してプログラムが自動で応答する仕組みです。今回は以下の流れで動作するBotを構築します。

ユーザーがLINEでメッセージ送信
  → LINE PlatformがWebhookでGASに通知
    → GASがメッセージを処理
      → 応答メッセージをLINEに返信
      → スプレッドシートにログを記録

完成すると、次の3つができるようになります。

  1. テキストメッセージへの自動応答: 受信したメッセージに対して即座に返信します
  2. 受信メッセージのスプレッドシートへの自動記録: 問い合わせ内容を蓄積し、傾向分析に活かせます
  3. 業務活用への拡張: FAQ Bot、問い合わせ記録、勤怠連絡など中小企業の実務に応用できます

GASもLINE Messaging APIの無料枠も費用がかからないため、中小企業でも気軽に導入できます。

準備・環境構築

環境構築とは、LINE BotをGASで動かすために必要なアカウントや設定を整える作業です。以下の4つを準備します。

準備項目取得方法備考
LINE DevelopersアカウントLINE Developersで登録LINEアカウントが必要
Messaging APIチャネルLINE Developersコンソールで作成「チャネルアクセストークン」を控える
GoogleアカウントGoogleで作成GAS実行に必要
GASプロジェクトGoogle Drive → 新規 → Google Apps Scriptスクリプトプロパティにトークンを保存

LINE Developersの設定

  1. LINE Developersにログインします
  2. 「プロバイダー」を新規作成します(任意の名前でOKです)
  3. 「Messaging API」チャネルを作成します
  4. 「Messaging API設定」タブでチャネルアクセストークン(APIを呼び出すための認証キー)を発行し、控えておきます

GASプロジェクトの作成とトークン保存

  1. Google Driveで「新規」→「その他」→「Google Apps Script」を選択します
  2. GASエディタが開いたら、左メニューの「プロジェクトの設定」(歯車アイコン)をクリックします
  3. 「スクリプトプロパティ」セクションで以下の2つを追加します
プロパティ名
LINE_ACCESS_TOKEN発行したチャネルアクセストークン
SHEET_IDログ記録用スプレッドシートのID(URLの /d//edit の間の文字列)

スクリプトプロパティ(GASが提供する安全な設定値の保存機能)を使うことで、コードにトークンをハードコードせずに管理できます。

実装手順

実装手順とは、Webhook受信・応答送信・ログ記録・デプロイの4ステップでBotを完成させる作業です。すべてのコードを1つのスクリプトファイルに貼り付けてください。

ステップ1 — Webhook受信処理(doPost関数)

doPost関数とは、外部からHTTP POSTリクエストを受け取ったときにGASが自動実行する関数です。LINEのWebhook(イベント発生時に指定URLへ通知する仕組み)は、この関数を通じてメッセージデータを届けます。

function doPost(e) {
  try {
    // LINEからのイベントデータを取得
    const events = JSON.parse(e.postData.contents).events;

    for (const event of events) {
      // テキストメッセージのみ処理
      if (event.type === 'message' && event.message.type === 'text') {
        const replyToken = event.replyToken;
        const userMessage = event.message.text;
        const userId = event.source.userId;

        // 応答メッセージを送信
        replyMessage(replyToken, `「${userMessage}」を受け取りました!`);

        // スプレッドシートにログを記録
        logToSheet(userId, userMessage);
      }
    }
  } catch (error) {
    // エラー内容をスプレッドシートに記録(デバッグ用)
    logToSheet('ERROR', error.message);
  }

  // LINEプラットフォームに200 OKを返す
  return ContentService.createTextOutput(
    JSON.stringify({ status: 'ok' })
  ).setMimeType(ContentService.MimeType.JSON);
}

このコードのポイント:

  • try-catchでエラー発生時もBotが停止しないようにしています
  • 複数イベントに対応するためfor...ofでループ処理しています
  • 最後に200 OKを返すことで、LINE側のタイムアウトエラーを防ぎます

本番運用時の注意: 本記事では学習用に省略していますが、実際の運用では x-line-signature ヘッダーによるリクエスト署名検証を実装してください。これにより、LINE以外からの不正なリクエストを防げます。詳細はLINE公式ドキュメントの署名検証を参照してください。

ステップ2 — 応答メッセージ送信(replyMessage関数)

replyMessage関数とは、LINE Messaging APIのReplyエンドポイント(応答用の送信先URL)にメッセージを送信する関数です。

function replyMessage(replyToken, text) {
  // スクリプトプロパティからトークンを取得
  const token = PropertiesService.getScriptProperties().getProperty('LINE_ACCESS_TOKEN');

  const url = 'https://api.line.me/v2/bot/message/reply';
  const payload = {
    replyToken: replyToken,
    messages: [{ type: 'text', text: text }],
  };

  const options = {
    method: 'post',
    contentType: 'application/json',
    headers: { Authorization: 'Bearer ' + token },
    payload: JSON.stringify(payload),
    muteHttpExceptions: true,
  };

  const response = UrlFetchApp.fetch(url, options);

  // エラー時はスプレッドシートにログを記録
  if (response.getResponseCode() !== 200) {
    logToSheet('API_ERROR', response.getContentText());
  }
}

このコードのポイント:

  • PropertiesService.getScriptProperties()でトークンを安全に取得しています
  • muteHttpExceptions: trueにより、HTTPエラー時にもスクリプトが中断しません
  • レスポンスコードを確認し、エラー時はスプレッドシートにログを残します

ステップ3 — スプレッドシートへのログ記録

GAS LINE通知の受信内容をスプレッドシートに記録することで、問い合わせの傾向分析や業務改善に活かせます。これが単なるオウム返しBotとの大きな違いです。

function logToSheet(userId, message) {
  const sheetId = PropertiesService.getScriptProperties().getProperty('SHEET_ID');
  const spreadsheet = SpreadsheetApp.openById(sheetId);
  const sheet = spreadsheet.getSheetByName('ログ') || spreadsheet.insertSheet('ログ');

  // ヘッダー行がなければ追加
  if (sheet.getLastRow() === 0) {
    sheet.appendRow(['日時', 'ユーザーID', 'メッセージ内容']);
  }

  // ログを追記
  sheet.appendRow([
    new Date(),
    userId,
    message,
  ]);
}

このコードのポイント:

  • 「ログ」シートが存在しない場合は自動作成します
  • ヘッダー行も自動で追加されるため、手動設定は不要です
  • 日時・ユーザーID・メッセージの3列でシンプルに管理します

ステップ4 — デプロイとWebhook設定

デプロイ(公開設定)とは、GASのコードをWebアプリとしてインターネット上に公開する作業です。

  1. GASエディタ右上の「デプロイ」→「新しいデプロイ」をクリックします
  2. 種類で「ウェブアプリ」を選択します
  3. 「アクセスできるユーザー」を「全員」に設定します(LINEからのリクエストを受け取るために必要です)
  4. 「デプロイ」をクリックし、表示されたURLをコピーします
  5. LINE Developersコンソールの「Messaging API設定」タブを開きます
  6. 「Webhook URL」にコピーしたURLを貼り付けます
  7. 「Webhookの利用」をONにします
  8. 「検証」ボタンをクリックして「成功」と表示されれば接続完了です

「応答設定」も忘れずに変更します。LINE Official Account Managerで以下をOFFにしてください。

  • あいさつメッセージ → OFF
  • 応答メッセージ → OFF(ONのままだとLINE公式の自動応答とBotの応答が二重に返ります)

動作確認・トラブルシューティング

動作確認とは、構築したBotが期待どおりに動くかテストする作業です。LINEアプリでBotを友だち追加し、テキストメッセージを送信してください。「〇〇を受け取りました!」と返信が来れば成功です。スプレッドシートの「ログ」シートにも記録が追加されているか確認しましょう。

よくあるエラーと解決策

エラー・症状原因解決策
Botが無反応デプロイしていない / バージョン未更新「新しいデプロイ」で再デプロイ。コード変更時は必ず新バージョンを作成
「Webhookの利用」がOFFLINE Developers設定ミスMessaging API設定 → Webhookの利用をONに変更
応答が二重に返るLINE公式の自動応答が有効LINE Official Account Manager → 応答メッセージをOFF
403エラーチャネルアクセストークンが無効スクリプトプロパティのLINE_ACCESS_TOKENを確認・再発行
GAS実行タイムアウト処理が6分を超過重い処理はトリガーで分離
スプレッドシートに記録されないシートIDの設定ミススクリプトプロパティのSHEET_IDとスプレッドシートURLのIDを照合

GASではWebhook経由の実行時にconsole.logの出力を直接確認できません。デバッグには本記事で実装したスプレッドシートへのログ書き出しが有効です。

応用・カスタマイズ例

応用・カスタマイズとは、基本のエコーBotをベースに業務向けの機能を追加していくことです。

中小企業向け業務活用シナリオ

シナリオ概要実現難易度
FAQ自動応答Botスプレッドシートに登録したQ&Aデータとキーワードマッチで自動回答。社内・顧客向けどちらにも対応★★☆
問い合わせ記録Bot顧客からの問い合わせをスプレッドシートに自動蓄積し、週次レポートを生成★☆☆
日報・勤怠連絡Bot定型フォーマット(例: 「出勤 9:00」)で受け取った内容をスプレッドシートに自動記録★☆☆

GASとスプレッドシートの連携について詳しくはGAS×スプレッドシート自動化をご覧ください。Slack通知との組み合わせはGAS×Slack通知で解説しています。

GAS・LINEの制限事項

運用前に以下の制限を把握しておきましょう。

制限事項上限対策
GAS実行時間6分/回重い処理はトリガーで分離
UrlFetch回数20,000回/日(アカウント合計)複数Bot運用時は注意
LINE無料メッセージ月200通(プッシュ)Reply(応答)は無制限。プッシュ配信は計画的に

LINE Messaging APIの料金プラン詳細はLINE公式サイトをご確認ください(2026年2月時点)。

まとめ

GASとLINE Messaging APIを組み合わせれば、約60分・無料でLINE Botを構築できます。スプレッドシートへのログ記録を加えることで、単なるオウム返しBotではなく業務データの蓄積基盤として活用できます。

GASの基礎から学びたい方はGAS入門ガイドをご覧ください。他のメッセージツールとの連携に興味がある方はGAS×Slack通知Discord Bot×GAS連携もあわせてご確認ください。

よくある質問

GASでLINE Botを作るのに費用はかかりますか?

GASもLINE Messaging APIも無料で利用できます。応答メッセージ(Reply)は無制限で送信可能です。プッシュメッセージは無料プランで月200通まで送信できます。有料プランの詳細はLINE公式サイト(https://www.linebiz.com/jp/service/line-official-account/plan/)をご確認ください(2026年2月時点)。

GASで作ったLINE Botが動かない・返信が来ないときは?

主な原因は4つあります。GASを「新しいデプロイ」で公開していない、コード修正後にバージョンを更新していない、LINE Developers側でWebhookの利用がOFFになっている、チャネルアクセストークンの設定ミスです。本記事のトラブルシューティング表で詳しく確認できます。

LINE Botの応答速度はどのくらいですか?

通常1〜3秒で応答します。GASにはコールドスタート(初回起動時の遅延)がありますが、実用上は問題ないレベルです。頻繁にアクセスがある場合はコールドスタートの影響はほとんどありません。

GASのLINE BotでChatGPTと連携できますか?

可能です。GASのUrlFetchAppを使ってOpenAI APIを呼び出すことで、ChatGPTによる自動応答Botを構築できます。ユーザーのメッセージをOpenAI APIに送信し、生成された回答をLINEで返す仕組みです。

GASのLINE Botでセキュリティは大丈夫ですか?

本記事ではスクリプトプロパティにトークンを保存する方法を採用しており、コードにトークンがハードコードされません。加えて、WebアプリURLの第三者への共有を避けること、定期的なチャネルアクセストークンの再発行を推奨します。

関連記事