ブログ

【リライトしてみた】GASの便利な機能をLineBotのコードで解説

こんにちはYuiです。

実はこちらのツイートで書いた通り、迫さん(@yuki_99_s)にブログを添削してもらったんですよ。

ものすごくわかりやすかったので、私の記事を実際に見て、添削前と添削後の違いを感じて頂こうと思って今回リライトしてみました。

内容はほとんど同じですが、前回よりももう少しGASの機能について焦点を当てた書き方をしています。

大分わかりやすくなったかと思うのでぜひ!

こんにちは、最近プログラミングの案件をとろうと躍起になっているYuiです。

アホYui
アホYui
何かお仕事あれば案件ほしいんだなあ・・
おしゃべりマン
おしゃべりマン
まずは実力をつけろよ

はい、おしゃべりマンの言う通りですね。これに関しては私が頑張るのみなので、引き続き勉強します。笑

案件取れたら経験ゼロで案件取れたという記事を書きたいので頑張るぞ~~!

まあ、こんな私の決意表明は置いといて、今回はLineBotのコードを参考に、Google Apps Script(以下GAS)の機能について説明したいと思います。

というのも、GASって本当に便利な機能があるのですよ。

最初、私がRailsをherokuにデプロイする形でLineBotを作ろうとしたとき、正直なところ挫折しかけました。(もちろん、良い勉強にはなりました)

アホYui
アホYui
コード書いて、gemfileを編集して、gemインストールして、デプロイして・・って手順多すぎぃぃ!

そして私は思いました。

アホYui
アホYui
もっと簡単に作りたーい!!

そこで、いろいろ調べたらどうやらJavaScriptが書ければGASで超簡単にLineBotが実装できるらしいと。早速作ってみると、本当に10分くらいで作れました!

そこで少しGASについて勉強したのですが、本当に色んな機能が付いててとても便利なのですね。なので、今回はGASの機能についてGASでのLineBotの作り方の記事で使ったコードを参考に紹介していきたいと思います。

簡単にLineBotを作りたい人はこちら

10分でできるGASでのLineBotの作り方

GASで繰り返しLineBotを作る時の流れ

まずは前回書いたコードを見ながらGASで繰り返しLineBotを作るときの流れについて簡単に見てみましょう。

下記のようなコードを書きました。

一応ほんの少しだけコードの解説をしておくと、最初の部分はWeb上でアクセスを受け取ったときにコードの中身を表示させてあげる場合ならGETメソッドなので、function doGet()と書くべきなのですが、LINE Messaging APIは、POSTメソッドでデータを送ってくるのでdoGetではなくdoPostを使います。

その中に実際の動きとなるコードを書いていきます。

LineBotが実際に働くまでの流れをまとめると、下記のようになります。

  1. ユーザーからのメッセージを取得
  2. そのメッセージをJSONでパースして変数userMessageを宣言
  3. 応答用のトークンをJSONでパースして変数reply_tokenを宣言
  4. LineBotAPIを導入(対応したURLを変数line_urlとして宣言)
  5. LineBotAPIの動く範囲でコードを書く
  6. 実装する

今回はJavaScriptで書いてあることもあって、JSONを利用してデータの受け渡しをしています。

流れを図解するとこんな感じです。

なんとなくイメージはわいたでしょうか?

正直、この流れはどの言語を使っても、どの環境で開発しても変わりません。

ただ、GASではAPIの導入とデプロイ作業が圧倒的に楽になるのです!

GASでのAPIの導入方法

さて、APIの導入方法について見てみます。

まずはRailsで開発した場合とGASで開発した場合について比較してみましょう。

GASではAPIの導入のためにgemfileをいじる必要はありません。

各APIに対応したURLを定義して、それをコードの中に組み入れれば簡単に実装できます!

RailsでAPIを導入する場合 GASでAPIを導入する場合
  • gemfileを編集してAPIのgemを追加
  • 開発環境でsqlite3、本番環境でpostgresqlを使うようにgemを編集
  • gemをインストール
  • APIに対応したURLを定義する

一気に手順が減りましたね!

APIに対応したURLを定義するとはどういうことかというと、実はコードのこの部分でAPIに対応したURLを定義しています。

var line_url = 'https://api.line.me/v2/bot/message/reply';

そしてどこで使っているのかというと、ここです。

UrlFetchApp.fetch(line_url, {

これがまさにGASの便利なところなのですが、GASでは外部のサイトにアクセスする処理としてUrlFetchAppというオブジェクトが用意されています。

このオブジェクトはいろいろな使い方があるのですが、今回はfetchというメソッドを呼び出して、LineMessagingAPIにアクセスしています。

まあ、この中にURLを入れたら、簡単に外部からデータを持ってこれるんだな~と思っておいてください。

(もしメソッドとオブジェクトに関してもっと興味がわいた方は「GAS メソッド オブジェクト」とでもググってみるとわかるかと思います!)

これらの機能を使うことで、普通は外部のWebサイト(今回だとAPI)から情報を得る場合、まずはダウンロードをして、そのデータにアクセスする処理を書かなければいけませんが、GASではその必要はありません。

GAS以外の場合 GASの場合
  1. 外部のWebサイトのデータを使いたい!
  2. まずはダウンロードしてパソコン内にデータを保存
  3. そのデータにアクセスする処理を書く
  1. 外部のWebサイトのデータを使いたい!
  2. そのURLをUrlFetchApp.fetch(URL)の中にコピペ

コードがほぼ不要なんです!

UrlFetchApp.fetch(URL)

この引数に、アクセス先となるURLを指定するだけで、そこにアクセスしてサーバーからデータを取り出すことができる。

実装方法

さて、次にGASでのLineDevelopersへの実装方法を見ていきましょう。

herokuでデプロイする場合 GASの場合
  1. git add.
  2. git commit
  3. pushする
  4. https://herokuのapp名.herokuapp.com/callbackをURLとして利用
  1. 「公開」部分をクリック
  2. 「ウェブアプリケーションとして導入」をクリック
  3. 発行されるURLを利用

GASの実装方法についてはこちらの記事に詳しく書いています。

簡単にLineBotを作りたい人はこちら

10分でできるGASでのLineBotの作り方

めんどくさくなりがちな実装作業もものすごく簡単ですね。

GASの場合はデプロイ作業でさえもコード不要でクリックだけで勝手にやってくれるんですね!

ちなみに、今回はLineBotなので、発行されたURLをLineDevelopersに入力して利用しますが、Webアプリ開発とかだったらそのURLで誰でもアクセスできます。

GASのオブジェクトについて(応用編)

こちらは結構マニアックな記事になります。

もし「とりあえず簡単なLineBot作るために必要な機能を知りたい♪」という程度なら読む必要はありません。

GASが好きだ!もっと隅々まで知りたいんだ!ドゥフフフという私みたいな変態は読むと楽しいかもしれません。

先ほど、UrlFetchApp.fetch(URL)でアクセス先を指定するだけで簡単に外部のサイトにアクセスできると書きましたが、実はさらに便利な機能があるのです。

じつは第2引数に必要な情報をオプションとして用意することができるんです。

UrlFetchApp.fetch(URL, ここにオプション)

オプションを指定することで、外部サイトにアクセスする際の動きをより細かく指定することができます。

具体的に見ていきましょう。

まず、今回のように外部のAPIにアクセスする際は、情報をヘッダ情報として送り、サーバーとやり取りをすることが必要です。(これが'headers'部分)

そのために必要な情報を連想配列としてまとめた上で、'Content-Type'のところではJSONを使うことを宣言して、文字化けしないようにUTF-8に指定しています。

また、実はまだアクセストークンを認証させていませんでした(最初のvar~~の部分では、変数として定義しただけ)ので、'Authorization'の部分で認証させてあげています。

そのあとに、'method'でメソッドの種類を(今回だとPOST型なので’post’)、'payload'で同時に送信する情報を入力しているのですが、JavaScriptの値を JSONに変換する必要があるので、ここではJSON.stringifyメソッドを使っています。

以下、まとめます。

  • UrlFetchApp.fetch(URL, ここにオプション)で簡単に外部のURLにアクセスして、さらにオプションを指定することで、どのようにアクセスしたいかを指定することが出来る。
  • GASのオプションを使うとより簡単にコードを書ける。
  • 'headers'でヘッダ情報を詳しく指定
  • 'Content-Type'でコンテンツの種類を指定
  • 'Authorization'でアクセストークンを認定させる
  • 'method'でメソッドの種類を指定
  • 'payload'で同時に送信する情報を指定

 

いかがでしょうか?

最後は大分マニアックな記事になってしまいましたが、GASの機能は奥が深いですね!

ただ難点として、GAS上だけで開発しようとすると、基本言語がJavaScriptになるので、できることが限られてきそうですね。

それを打破するために、今はPythonでデータをスクレイピングしてGASに持ってきてということをやっております。

また理解が深まれば記事にしたいと思います!

いかがでしょうか、元の記事と比べて大分変わったのではないでしょうか。

BlogHacksに関しての関連記事