LoginSignup
5
3

More than 3 years have passed since last update.

LINE botをVS Codeで開発してAzure Functionsへデプロイするメモ (Node.js版)(※動作確認でcloudflaredを使用する手順を追加)

Last updated at Posted at 2021-02-12

はじめに

LINE botをmacOS上のVS Codeで開発してAzure Functionsへデプロイする手順です。
Azure FunctionsでNode.js版LINE botを動かします。

手順(準備)

1. VS Codeをインストールする

執筆時点のバージョンは1.53でした。
https://code.visualstudio.com/

スクリーンショット 2021-02-07 14.45.10.png

2. VS CodeにAzure Functions拡張機能を追加する

スクリーンショット 2021-02-07 14.46.11.png

3. Node.jsをインストールする

執筆時点のバージョンは14.15.4 LTSでした。
https://nodejs.org/

スクリーンショット 2021-02-07 14.47.15.png

4. ローカル環境でLINE Botを動作確認するための準備

ngrokを使用する方法とcloudflaredを使用する方法があります。

4-1. ngrokをインストールする

ダウンロードしてzipを解凍する。
https://ngrok.com/download

スクリーンショット 2021-02-07 14.56.35.png

サインアップ(または、ログイン)して、authtokenの値を確認する。

スクリーンショット 2021-02-07 15.07.31.jpg

コマンドを実行してauthtokenを登録する。

$ ./ngrok authtoken <authtokenの値>

4-2. cloudflaredをインストールする

サインアップの必要はありません。

$ brew install cloudflare/cloudflare/cloudflared

5. LINE Developers Consoleでアカウントを作成する

新規チャンネル(Messaging API)を作成します。
https://developers.line.biz/console/

手順(LINE botの作成)

1. VS CodeのAzure Functionsで新規プロジェクトを作成する

azure_1.jpg

フォルダを選択する
スクリーンショット 2021-02-07 15.25.51.png

言語(JavaScript)を選択する
スクリーンショット 2021-02-07 15.26.49.png

テンプレート(HTTP trigger)を選択する
スクリーンショット 2021-02-07 15.27.35.png

functionに名前(HTTP trigger1)をつける (そのまま改行でOK)
スクリーンショット 2021-02-07 15.28.36.png

Authorization level(Function)を選択する
スクリーンショット 2021-02-07 15.28.49.png

プロジェクトを開く (Open in current windowを選択する)
スクリーンショット 2021-02-07 15.29.13.png

2. サンプルコードを実行する

サンプルコードをStart Debugging[F5]で実行する。
sample_code.jpg

TERMINAL画面に表示されるURLをクリックしてブラウザで表示確認する。
スクリーンショット 2021-02-07 16.03.57.png

ブラウザのURLの最後にパラメータ(?name=test)を追加して、表示が変わることを確認する。
スクリーンショット 2021-02-07 16.04.24.png
スクリーンショット 2021-02-07 16.04.39.png

3. チャンネルアクセストークンを設定する

LINE Developers ConsoleのMessaging API設定からチャンネルアクセストークンの値をコピーする。
スクリーンショット 2021-02-07 15.50.58.jpg

ローカル実行用の環境変数を設定する。(local.settings.jsonに環境変数を追加)
"ACCESS_TOKEN": "<チャンネルアクセストークンの値>",

スクリーンショット 2021-02-07 16.11.27.png

4. index.jsの内容をLINE botに変更する。

スクリーンショット 2021-02-07 16.16.24.png

ソースコードはこちらです。
https://raw.githubusercontent.com/kitazaki/azure_functions_nodejs_line_bot/main/index.js

index.js
const line = require('@line/bot-sdk');

const client = new line.Client({
    channelAccessToken: process.env.ACCESS_TOKEN

});

module.exports = async function (context, req) {
    context.log('JavaScript HTTP trigger function processed a request.');
    console.log(req);

    if (req.query.message || (req.body && req.body.events)) {
        if (req.body && req.body.events[0]) {
            message = {
                type: "text",
                text: req.body.events[0].message.text
            }
            console.log(message);
            if (req.body.events[0].replyToken) {
                client.replyMessage(req.body.events[0].replyToken, message);
            }
        }
        else {
            context.res = {
                status: 200,
                body: req.query.message
            };
        }
    }
    else {
        context.res = {
            status: 200,
            body: "Please check the query string in the request body"
        };
    };
};

5. LINE botを実行する

TERMINALからline bot sdkをインストールする。

$ npm i @line/bot-sdk

スクリーンショット 2021-02-07 16.22.22.png

Start Debugging[F5]で実行する。

スクリーンショット 2021-02-07 19.49.31.png

(参考)脆弱性の対応

執筆時点でline bot sdkに脆弱性が1件含まれていました。
脆弱性を解消するためにはLINE botを停止して、手動で対応する必要があります。

$ npm audit

スクリーンショット 2021-02-07 16.25.15.png

bot-sdkに含まれるaxiosのバージョンが低いため、手動で更新します。

$ cd node_modules/\@line/bot-sdk
$ vi package.json
package.json
(変更前)
"axios": "^0.20.0",
(変更後)
"axios": "^0.21.1",
$ npm i
$ npm audit fix
$ cd ../../..
$ npm i

脆弱性が0件になったことを確認します。

$ npm audit
found 0 vulnerabilities

6. ngrokまたはcloudflaredを実行する

6-1. ngrokを実行する

ターミナルを開いてngrokを実行します。

$ ./ngrok http 7071

スクリーンショット 2021-02-07 19.53.28.png

6-2. cloudflaredを実行する

ターミナルを開いてcloudflaredを実行します。

$ cloudflared tunnel --url localhost:7071

EyQNoswUcAE0S5r.jpg

7. LINE developers consoleでWebhookの設定をする

LINE developers consoleのMessaging API設定からWebhookの設定をします。
URLはngrokまたはcloudflaredを実行する毎に変わります。

ngrokの例.

https://c174833025ae.ngrok.io/api/HttpTrigger1

スクリーンショット 2021-02-07 19.55.20.png

cloudflaredの例.

https://dh-lost-prefer-por.trycloudflare.com/api/HttpTrigger1

EyQNKImU8AMgaTJ.jpg

「検証」ボタンを押して成功(OK)が表示されれば問題ありません。
ngrokを実行したターミナルとVS CodeのTERMINAL画面にログが表示されます。

スクリーンショット 2021-02-07 19.55.48.png
スクリーンショット 2021-02-07 19.56.04.png

cloudflaredの場合、VS CodeのTERMINAL画面にのみログが表示されます。

EyQNplnU4AAP9v-.jpg

手順(Azure Functionsへデプロイ)

1. Azureへログインする

スクリーンショット 2021-02-07 20.38.10.png

2. Azure Functionsへデプロイする

デプロイアイコン(上向きの矢印)を押して、「+Create new Function App in Azure...」を選択します。

deploy_0.jpg

アプリ名を入力します。(以降はline-bot02を例に説明します。)

スクリーンショット 2021-02-07 20.19.32.png

Node.jsのバージョンを選択します。(ここではNode.js 14 LTSを選択します。)

deploy_3.jpg

デプロイ先を選択します。(ここではJapan Eastを選択します。)

deploy_4.jpg

デプロイが完了するまで少し時間がかかります。

3. チャンネルアクセストークンを設定する

Application Settingsで「Add New Settings...」を選択してチャンネルアクセストークンを設定します。

deploy_5.jpg

キーの名前(ACCESS_TOKEN)を入力します。

スクリーンショット 2021-02-07 20.26.32.png

キーの値(LINE developers consoleのチャンネルアクセストークンの値)を入力します。

スクリーンショット 2021-02-07 20.29.17.png

4. Webhook URLを確認する

FunctionsのHttpTrigger1から「Copy Function Url」を選択します。

deploy_6.jpg

LINE developers consoleのMessaging API設定からWebhookの設定をします。

スクリーンショット 2021-02-07 20.34.33.png

5. ログを確認する

Logsの「Connect to Log Stream...」を選択します。

スクリーンショット 2021-02-07 20.35.32.png

5
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
3