土曜日, 5月 31, 2025
ホームニューステックニュース【やってみた】Google Cloud RunとNode.jsで作る オウム返し LINE Bot 構築ガイド #GoogleCloud

【やってみた】Google Cloud RunとNode.jsで作る オウム返し LINE Bot 構築ガイド #GoogleCloud



【やってみた】Google Cloud RunとNode.jsで作る オウム返し LINE Bot 構築ガイド #GoogleCloud

簡単な LINE Bot を構築する機会をいただきました。
せっかくなのでナレッジ残してみました。

Google Cloud RunNode.js を使って、簡単にLINE Botを開発する手順を解説します。

ユーザーが送信したメッセージを、そのままオウム返しするシンプルなBotです。

技術スタック

  • バックエンド: Google Cloud Run
  • 言語: Node.js
  • 機密情報管理: Google Secret Manager
  • Botプラットフォーム: LINE Messaging API

全体的な流れ

2025-05-25_221738.png

Step 1: 【LINE】チャネルの準備と2種類のキー取得

まず、LINE Botの本体となる「チャネル」を用意します。
現在のLINEの仕様では、先にLINE公式アカウントを作成してから、Bot機能(Messaging API)を有効化します。

  1. LINE Developersにログインとプロバイダー作成
    LINE Developersコンソールにログインし、任意の名前で「プロバイダー」を作成します。

  2. LINE公式アカウントの作成
    プロバイダーを選択し、チャネル作成画面に進むと、「Messaging APIチャネルを直接作成することはできなくなりました」と表示されます。
    画面の指示に従い、「Create a LINE Official Account」ボタンからLINE公式アカウントを作成してください 。

  3. Messaging APIの有効化
    LINE公式アカウントの管理画面(LINE Official Account Manager)に移動したら、「設定」>「Messaging API」を開き、APIの利用を有効化します。

  4. 2種類のキーを取得する
    Botをプログラムから操作するには、役割の違う2つのキーが必要です。
    LINE Developersコンソールに戻り、作成したチャネルを開いて取得します。

    ① Channel Secret(合言葉的なやつ)
    LINEからの通信が本物か検証するためのキーです。
    * 場所: 「Basic settings」タブ
    * 取得方法: ページ中ほどの「Channel secret」に表示されている文字列をコピー。

    ② Channel Access Token(許可証みたいなもの)
    Botがユーザーにメッセージを返信するために使うキーです。
    * 場所: **「Messaging API」**タブ
    * 取得方法: ページ最下部の「Channel access token」にある「Issue」ボタンを押して、表示された長い文字列をコピーします。

Step 2: 【Google Cloud】プロジェクト準備とAPI有効化

  1. Google Cloudコンソールでプロジェクトを作成または選択します。
  2. ナビゲーションメニュー >「APIとサービス」>「ライブラリ」で、以下の4つのAPIを検索し、すべて「有効にする」をクリックします。
    • Cloud Run API
    • Secret Manager API
    • Cloud Build API
    • Artifact Registry API

Step 3: 【Google Cloud】機密情報の安全な保管

Step 1で取得した2つのキーを、安全な金庫である「Secret Manager」に保管します。

ナビゲーションメニュー >「セキュリティ」>「Secret Manager」を開き、「シークレットを作成」から以下の2つを作成します。

  • 名前: line-channel-secret

    • シークレットの値: 取得した「Channel Secret」の文字列を貼り付けます。
  • 名前: line-channel-access-token

    • シークレットの値: 取得した「Channel Access Token」の文字列を貼り付けます。

Step 4: 【Google Cloud】Botプログラムの作成

ブラウザ上の開発環境「Cloud Shell」(コンソール右上の >_ アイコン)を起動し、Botのプログラムを作成します。

  1. Cloud Shellのターミナルで、作業ディレクトリを作成します。

    mkdir line-bot-app && cd line-bot-app
    
  2. Cloud Shellの「エディタを開く」ボタンを押し、以下の3つのファイルを line-bot-app ディレクトリ内に作成します。

    Dockerfile

    # Node.js v20 の公式イメージをベースに使用
    FROM node:20-slim
    
    # アプリケーション用のディレクトリを作成
    WORKDIR /usr/src/app
    
    # アプリケーションの依存関係をインストール
    COPY package*.json ./
    RUN npm install --production
    
    # アプリケーションのソースコードをコピー
    COPY . .
    
    # コンテナ起動時にアプリケーションを実行
    CMD [ "npm", "start" ]
    

    package.json

    {
      "name": "line-bot-express",
      "version": "1.0.0",
      "description": "LINE Bot echo server on Cloud Run",
      "main": "index.js",
      "scripts": {
        "start": "node index.js"
      },
      "dependencies": {
        "@line/bot-sdk": "^9.2.0",
        "express": "^4.19.2"
      }
    }
    

    index.js

     // 「厳格モード」有効
    'use strict';
    
    // 必要なライブラリをインポート
    const express = require('express');    // Webサーバーを構築するためのフレームワーク
    const line = require('@line/bot-sdk'); // LINE Messaging APIを簡単に利用するための公式ライブラリ
    
    // Google Cloud Runによって設定された環境変数から、アクセストークンとチャネルシークレットを読み込み
    const config = {
      channelAccessToken: process.env.LINE_CHANNEL_ACCESS_TOKEN,
      channelSecret: process.env.LINE_CHANNEL_SECRET,
    };
    
    const app = express();
    
    // '/callback' というパスにPOSTリクエストが来たときに、この部分が実行される
    app.post('/callback', line.middleware(config), (req, res) => {
      // 署名検証が成功した場合、以下の処理実行
      // Webhookリクエストには複数のイベントが含まれることがあるらしく、Promise.allですべてのイベントを処理
      Promise
        .all(req.body.events.map(handleEvent))
        .then((result) => res.json(result))
        .catch((err) => {
          console.error(err);    // コンソールにエラーログを出力。
          res.status(500).end(); // LINE Platformに対して「500 Internal Server Error」を返す。
        });
    });
    
    // 個々のイベントを処理する非同期関数
    function handleEvent(event) {
      // イベントが「メッセージ」であり、かつ「テキストメッセージ」でなければ、何もしないで処理を終了
      // スタンプや画像は無視
      if (event.type !== 'message' || event.message.type !== 'text') {
        return Promise.resolve(null);
      }
      const client = new line.Client(config);                  // LINE SDKのクライアントを作成
      const echo = { type: 'text', text: event.message.text }; // オウム返しするメッセージを作成
      return client.replyMessage(event.replyToken, echo);      // 作成したメッセージをユーザーに返信
    }
    
    const port = process.env.PORT || 8080;
    app.listen(port, () => {
      console.log(`listening on ${port}`);
    });
    

Step 5: 【Google Cloud】Cloud Runへのデプロイ

5-1. IAM権限の事前設定

デプロイ時には、裏側で2人の担当者(サービスアカウント)が動きます。
この2人にあらかじめ適切な権限を与えておきましょう。

  1. ナビゲーションメニュー >「IAMと管理」>「IAM」を開きます。

  2. ページの右上にある「Google 提供のロール付与を含める」に必ずチェックを入れます
    ※これをしないと、担当者が見えません。

  3. プリンシパル(担当者)の一覧から、以下の2つのアカウントを探し、それぞれの行の右端にある鉛筆アイコンをクリックして、指定のロールを追加・保存します。

    ① ビルド担当者への権限付与
    【対象アカウント】:
    [数字]@cloudbuild.gserviceaccount.com
    【追加するロール】:
    1. Cloud Build サービスエージェント
    2. サービス アカウント ユーザー

    ② 実行担当者への権限付与
    【対象アカウント】:
    [数字][email protected] (Default compute service account)
    【追加するロール】:
    1. Secret Manager シークレット アクセサー

5-2. デプロイコマンドの実行

権限設定が完了したら、Cloud Shellに戻り、デプロイを実行します。

  1. プロジェクトIDなどを変数に設定します。(your-project-idはご自身のGCPプロジェクトIDに書き換えてください)
    PROJECT_ID="your-project-id"
    REGION="asia-northeast1"
    SERVICE_NAME="line-bot-service"
    
  2. デプロイコマンドを実行します。
    gcloud run deploy $SERVICE_NAME \
      --source . \
      --platform managed \
      --region $REGION \
      --allow-unauthenticated \
      --set-secrets="LINE_CHANNEL_SECRET=line-channel-secret:latest" \
      --set-secrets="LINE_CHANNEL_ACCESS_TOKEN=line-channel-access-token:latest" \
      --project=$PROJECT_ID
    
  3. デプロイが成功すると、Service URL: が表示されます。
    このURLをコピーしてください。
    Service URL: https://XXXXXXXXXXXXXXXXXXXXXXXXX.asia-northeast1.run.app
    

Step 6: 【LINE & Google Cloud】Webhook設定による連携

最後に、LINEに「ユーザーからメッセージが来たら、このURLに知らせてね」と教えます。

  1. LINE Developersコンソールの「Messaging API」タブに戻ります。
  2. 「Webhook settings」にある「Webhook URL」の「Edit」ボタンを押します。
  3. Step 5でコピーしたCloud RunのURLを貼り付け、末尾に /callback と追記するのを忘れないでください。
    • 例: https://XXXXXXXXXXXXXXXXXXXXXXXXX.asia-northeast1.run.app/callback
  4. 「Update」をクリックし、その下にある「Use webhook」のスイッチをON(緑色)にします。

Step 7: 動作確認

LINE Developersコンソールの「Messaging API」タブにあるQRコードをスマートフォンで読み取り、作成したBotを友だち追加して、メッセージを送ってみましょう。
メッセージがそのまま返ってきたら成功です✅

ここまで読んでいただいてありがとうございます🙇‍♀️
だれかの参考になっていたらうれしいです。





Source link

Views: 0

RELATED ARTICLES

返事を書く

あなたのコメントを入力してください。
ここにあなたの名前を入力してください

- Advertisment -