2018年11月27日こんにちはYuiです。実はこちらのツイートで書いた通り、迫さん(@yuki_99_s)にブログを添削してもらったんですよ。2018ものすごくわかりやすかったので、私の記事を実際に見て、添削前と添削後の違いを感じて頂こうと思って今回リライトしてみました。【徹底解説】なぜGASで簡単にLineBotが実装できるのか内容はほとんど同じですが、前回よりももう少しGASの機能について焦点を当てた書き方をしています。わかりやすくなったかと思うのでぜひ!こんにちは、最近プログラミングの案件をとろうと躍起になっているYuiです。アホYui何かお仕事あれば案件ほしいんだなあ・・おしゃべりマンまずは実力をつけろよはい、おしゃべりマンの言う通りですね。これに関しては私が頑張るのみなので、引き続き勉強します。Script(以下GAS)の機能について説明したいと思います。いうのも、GASって本当に便利な機能があるのですよ。最初、私がRailsをherokuにデプロイする形でLineBotを作ろうとしたとき、正直なところ挫折しかけました。(もちろん、良い勉強にはなりました)アホYuiコード書いて、gemfileを編集して、gemインストールして、デプロイして・・って手順多すぎぃぃ!そして私は思いました。アホYuiもっと簡単に作りたーい!!そこで、いろいろ調べたらどうやらJavaScriptが書ければGASで超簡単にLineBotが実装できるらしいと。作ってみると、本当に10分くらいで作れました!そこで少しGASについて勉強したのですが、本当に色んな機能が付いててとても便利なのですね。今回はGASの機能についてGASでのLineBotの作り方の記事で使ったコードを参考に紹介していきたいと思います。GASのオブジェクトについて(応用編)GASで繰り返しLineBotを作る時の流れまずは前回書いたコードを見ながらGASで繰り返しLineBotを作るときの流れについて簡単に見てみましょう。下記のようなコードを書きました。APIは、POSTメソッドでデータを送ってくるのでdoGetではなくdoPostを使います。その中に実際の動きとなるコードを書いていきます。LineBotが実際に働くまでの流れをまとめると、下記のようになります。応答用のトークンをJSONでパースして変数reply_tokenを宣言LineBotAPIを導入(対応したURLを変数line_urlとして宣言)LineBotAPIの動く範囲でコードを書く実装する今回はJavaScriptで書いてあることもあって、JSONを利用してデータの受け渡しをしています。流れを図解するとこんな感じです。なんとなくイメージはわいたでしょうか?正直、この流れはどの言語を使っても、どの環境で開発しても変わりません。GASではAPIの導入とデプロイ作業が圧倒的に楽になるのです!GASでのAPIの導入方法さて、APIの導入方法について見てみます。Railsで開発した場合とGASで開発した場合について比較してみましょう。GASではAPIの導入のためにgemfileをいじる必要はありません。開発環境でsqlite3、本番環境でpostgresqlを使うようにgemを編集gemをインストールAPIに対応したURLを定義する一気に手順が減りましたね!APIに対応したURLを定義するとはどういうことかというと、実はコードのこの部分でAPIに対応したURLを定義しています。'https://api.line.me/v2/bot/message/reply';そしてどこで使っているのかというと、ここです。{これがまさにGASの便利なところなのですが、GASでは外部のサイトにアクセスする処理としてUrlFetchAppというオブジェクトが用意されています。このオブジェクトはいろいろな使い方があるのですが、今回はfetchというメソッドを呼び出して、LineMessagingAPIにアクセスしています。この中にURLを入れたら、簡単に外部からデータを持ってこれるんだな~と思っておいてください。オブジェクト」とでもググってみるとわかるかと思います!)これらの機能を使うことで、普通は外部のWebサイト(今回だとAPI)から情報を得る場合、まずはダウンロードをして、そのデータにアクセスする処理を書かなければいけませんが、GASではその必要はありません。外部のWebサイトのデータを使いたい!まずはダウンロードしてパソコン内にデータを保存そのデータにアクセスする処理を書く外部のWebサイトのデータを使いたい!そのURLをUrlFetchApp.fetch(URL)の中にコピペコードがほぼ不要なんです!UrlFetchApp.fetch(URL)この引数に、アクセス先となるURLを指定するだけで、そこにアクセスしてサーバーからデータを取り出すことができる。実装方法さて、次にGASでのLineDevelopersへの実装方法を見ていきましょう。「公開」部分をクリック「ウェブアプリケーションとして導入」をクリック発行されるURLを利用GASの実装方法についてはこちらの記事に詳しく書いています。簡単にLineBotを作りたい人はこちら10分でできるGASでのLineBotの作り方めんどくさくなりがちな実装作業もものすごく簡単ですね。GASの場合はデプロイ作業でさえもコード不要でクリックだけで勝手にやってくれるんですね!ちなみに、今回はLineBotなので、発行されたURLをLineDevelopersに入力して利用しますが、Webアプリ開発とかだったらそのURLで誰でもアクセスできます。GASのオブジェクトについて(応用編)こちらは結構マニアックな記事になります。「とりあえず簡単なLineBot作るために必要な機能を知りたい♪」という程度なら読む必要はありません。GASが好きだ!もっと隅々まで知りたいんだ!ドゥフフフという私みたいな変態は読むと楽しいかもしれません。先ほど、UrlFetchApp.fetch(URL)でアクセス先を指定するだけで簡単に外部のサイトにアクセスできると書きましたが、実はさらに便利な機能があるのです。じつは第2引数に必要な情報をオプションとして用意することができるんです。ここにオプション)オプションを指定することで、外部サイトにアクセスする際の動きをより細かく指定することができます。具体的に見ていきましょう。userMessage,}],}),});まず、今回のように外部のAPIにアクセスする際は、情報をヘッダ情報として送り、サーバーとやり取りをすることが必要です。(これが'headers'部分)そのために必要な情報を連想配列としてまとめた上で、'Content-Type'のところではJSONを使うことを宣言して、文字化けしないようにUTF-8に指定しています。実はまだアクセストークンを認証させていませんでした(最初のvar~~の部分では、変数として定義しただけ)ので、'Authorization'の部分で認証させてあげています。JSONに変換する必要があるので、ここではJSON.stringifyメソッドを使っています。ここにオプション)で簡単に外部のURLにアクセスして、さらにオプションを指定することで、どのようにアクセスしたいかを指定することが出来る。GASのオプションを使うとより簡単にコードを書ける。'headers'でヘッダ情報を詳しく指定'Content-Type'でコンテンツの種類を指定'Authorization'でアクセストークンを認定させる'method'でメソッドの種類を指定'payload'で同時に送信する情報を指定いかがでしょうか?最後は大分マニアックな記事になってしまいましたが、GASの機能は奥が深いですね!ただ難点として、GAS上だけで開発しようとすると、基本言語がJavaScriptになるので、できることが限られてきそうですね。それを打破するために、今はPythonでデータをスクレイピングしてGASに持ってきてということをやっております。理解が深まれば記事にしたいと思います!いかがでしょうか、元の記事と比べて大分変わったのではないでしょうか。旅のプロ×行動力おばけYuiフットワークがひたすら軽いYuiです!単語わからないという語学力ゼロの状態からドイツに留学し、1ヶ月後には独英を取得、語学力を活かして独英間の通訳や翻訳をボランティアで行う。その後、20万程度で約40ヶ国をカバン1つで世界一周。自由に生きるために現在プログラミングをもう勉強中。作ったもの:LineBot【おしゃべりマン】(下のLineマークから登録できます。