こんにちは、Yuiです!
前回Cloud9上でRailsを使ってLineBotを作る方法について書いたのですが、今回はもっと簡単にサクッとBotを作る方法について書きます。
というのも、Cloud9でherokuを使ってデプロイするとどうしてもタイムラグが発生するのですね。
自分がターミナルでコードを起動させている状態ならすぐにかえって来ますが、閉じてからLineを送ると、下記のような流れになってるのでBot側からの返事が遅れます。
①Lineで何かメッセージを送る
②LineDevelopersが受け取って、結び付けられているCloud9とHerokuを起動する
(ここで起動まで時間がかかるので、タイムラグが生じる)
③コードの指示通りにBotから返信
大体30秒から1分程度のタイムラグが生じます。
まあ、大したタイムラグではないのですが、できれば即レスBotの方が可愛げありますよね?
また、Bot相手に「返事返ってくるかな?既読無視かな?(ドキドキ)」という変なドキドキ感を味わうのも時間の無駄だと思うので、そのタイムラグ問題をサクッと解決しちゃいましょう!
そのために使うのはGoogle Apps Script(以下GAS)というGoogle先生が無償で提供してくれているサーバーサイド・スクリプト環境です。
(ちなみに、AWSのままで開発を進めたいなら、Lambdaというコンピューティングサービスを使えば即レスBotを作るのことも可能です。)
使い方はそんなに難しくないので、もし気になった人は調べてみてください。
今回は、おそらく最も簡単にLineBotを開発できるであろうGASにて、LineBotの作り方をサクッと書いてみます。
Google Apps Scriptを使うメリット
まず、なぜGASを使うの?ということですが、GASを使うとサーバーを構築せずにコードの実行ができます。
簡単に言うと、本番環境の構築が不要で、サーバーレスで開発ができます!
Cloud9や他のローカル開発環境でコードを書いているとそれを外部からアクセスできるようにするために、本番環境の構築が不可欠です。(herokuなど)
前に書いたLineBotの作り方ではCloud9でコードを書いて、LineDeveloperと結び付けてherokuを使ってデプロイするという流れでした。
それがGASを使うとコードを書いたらそのまま本番環境に結び付けられるので、手順がものすごく簡単です。
ただ、言語がJavaScriptに制限されるので、PHPやRubyなど他の言語で開発を進めたい人には不向きかもしれません。
ともかく、早速GASでLineBotの開発を進めていきたいと思います。
LineBot作成の手順
まずはLineBot開発に必要な手順をおさらいしてみましょう。
1、LineDeveloperでアカウントを作る
2、メッセージを返信するためのプログラムを書く
3、サーバーを用意する
(私の前の記事ではherokuにデプロイして用意してました。)
上記のような流れが最低限必要なのでした。
LineDeveloperのアカウント作成に関してはこちらの記事を参考にしてみてください。
さて、LineBotのアカウントができたら早速GASでコードを書いていきたいと思います。
GASを触ってみよう
まずはGASとは何ぞや?という状態から脱出しましょう。
GoogleChromeを開いてください。
検索画面の右上の■が九つあるようなボタンがあるかと思います。
それをポチッとしたら、こんな画面がでます。

こちらの「ドライブ」をクリックして下さい。これでグーグルドライブが表示されました。
その中の「新規」を押して、「その他」→「GoogleAppsScrips」の手順でGASを開きます。

これで「無題のプロジェクト」という画面が表示されたかと思います。この無題のプロジェクトにどんどんコードを書いていきます。
早速コードを書いてみる
ここまでできたら早速コードを書いていきましょう。
例えば繰り返しBotだと、以下のようなコードになります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
var CHANNEL_ACCESS_TOKEN = 'あなたのアクセストークン'; function doPost(e) { // ユーザーのメッセージを取得 var userMessage = JSON.parse(e.postData.contents).events[0].message.text; // 応答用Tokenを取得 var reply_token= JSON.parse(e.postData.contents).events[0].replyToken; //ついでにエラー処理 if (typeof reply_token === 'undefined') { return; } // 応答メッセージ用のAPI URL var line_url = 'https://api.line.me/v2/bot/message/reply'; UrlFetchApp.fetch(line_url, { 'headers': { 'Content-Type': 'application/json; charset=UTF-8', 'Authorization': 'Bearer ' + CHANNEL_ACCESS_TOKEN, }, 'method': 'post', 'payload': JSON.stringify({ 'replyToken': reply_token, 'messages': [{ 'type': 'text', 'text': userMessage, }], }), }); return ContentService.createTextOutput(JSON.stringify({'content': 'post ok'})).setMimeType(ContentService.MimeType.JSON); } |
コードが書けたら、早速デプロイ作業をしてみましょう。
デプロイする
さて、後は簡単です。
まず、「公開」の「ウェブアプリケーションとして導入」をクリックします。

こんな感じになりますね。
これの、「アプリケーションにアクセスできるユーザー」の部分を全員(匿名ユーザーを含む)に選択してあげてください。
そして、「導入」を選んで下さい。そうすると、認証してくださいというようなことを言われますが、とことん認証して次に進みましょう。
そうすると、URLが発行されますね。

このURLをコピーして、Line DevelopersのWebhook URLの部分に入れてあげて、更新、接続確認をしてみてください。
はい、これで実装完了です!!
どうですか?ものすごく簡単なのではないでしょうか。。
注意点としては、何度かコードを書きなおして、再度実装するときに、必ずこの画面で「プロジェクトバージョン」を新規作成にするところですね。

コードの意味は次の記事で書いていくので、今回はこんなに簡単に実装できるんだ~という感覚を味わってみてください♪
大分LineBotのハードルが下がったと思うので、どんどん作っていきましょう!