2018年10月26日こんにちは、最近「Yui」ではなく「行動力おばけ」と呼ばれるYuiです。前に繰り返しLineBotの作り方について書いたわけですが、実際に繰り返しBotを作ってみたらこんなこと思いませんでしたか?アホYui繰り返しだけじゃなくてもっと発展させたい!でもコードを張り付けただけだからどこをいじれば良いのかわからない・・!実は繰り返しBotだけだったら、ググれば数多くの記事が出てくるんですよね。実際のところコードを張り付けて動かしてるだけだから、発展させようとしたときに実際にどこを動かせば良いかわからないという現象が起きてしまいました。(ほとんどのブログでも前回私が書いたみたいに「コピペして下さい」としか言われない)そこで、今回は繰り返しLineBotのコードを見ながら、必要な3つの知識について解説したいと思います。(もし、コードを見ただけで分かったわ!という方はさら~と流してくださいね!)※今回は前に書いた繰り返しBotの作り方のコードを見ながら解説を進めていきます。APIが用意してくれてる型を使いこなすべし環境変数を(軽くでも良いので)理解しておくべしAPIを使いこなすべしまず、前回紹介した繰り返しBotの実際のコードがこちらです。:okendendまず、LineBotを作成するにあたって、専用のAPIを利用することが必要になります。Interface」の略語。端的にいうと「すでにこの世に存在するプログラムを共有する仕組み」のことです。先人たちがすでによく使う機能をAPIとして用意してくれているので、これを利用すれば、わざわざ一からプログラムを組まなくて良いんです!楽ちんですねえ。(Yuipediaより)私の代表(?)作であるおしゃべりマンも人工知能APIとWikiAPIと星占いAPIを導入しています。いろんな機能をつけている割にはほとんどコードを書いていないんですよね。LineBotに関してはすでにBot作成のために必要なプログラムがAPIとして共有されているんですよ。‘line-bot-api’と追加したのを覚えているでしょうか。これでBotに必要な機能として、「投稿されたものを受け取る機能」「プログラム通りに投稿する機能」が追加されたわけです。‘line/bot’というコードなわけです。APIの導入のさせ方は言語によって異なりますが、Railsでは以下の流れになります。‘pg’を入れる(LineBotの場合。productionで追記したGemをインストール4コントローラーにAPIを導入するためのコードを書くこれは今後どんなAPIを導入するとしても同じ手順なので、まずLineBotに導入したい機能があれば、例えばWikipedeiaAPIのように「○○API」という感じで調べたいAPIをググって、導入させてみてください。APIが用意してくれてる型を使いこなすべしBot作成において大事になってくるのが、型を使いこなすことです。APIは本当に優秀で、すでにテンプレートとして様々な型を用意してくれているんですね。いうことかというと、下のコードを見てください。ここの部分が実際に繰り返しBotの核となる部分です。簡単に右側に解説をつけましたが、さらに詳しくみていきましょう。←reply(返信)時にコードを実行endendまず、入力された値をevent.typeで受け取ってますね。Line::Bot::Event::MessageType::Textというコードが出てきて戸惑った方も多いのではないでしょうか。これは何をしているのかというと、入力されたevent.typeの値がテキストタイプであるときに反応すると言ってあげているんですね。Lineってメッセージだけでなく写真、位置情報など、たくさんのものが送れますよね。人間だったらすぐに見たらわかりますが、相手はコンピュータ。どれがテキストかを認識させてあげないといけないんですよ。APIの方で用意されているというわけです!いや~楽ちんですねぇ。最後のTextをLocationにしたら位置情報を認識します!(あくまでこれは認識だけなので、実際に位置情報を読み取るためには、位置情報認識APIを導入してあげることが必要です)そしてさらにその下を見てください。何やら”message”の中で”type”を指定してあげています。APIがテンプレートとして用意してくれている型です。メッセージタイプで送信したい場合、まず送信する型は”message”で指定してあげて具体的にどのようなタイプなのかを指定してあげます。今回はテキスト型なので、”text”です。これ、本当に様々な型があって、例えばグラフ形式で送ったりとかボタン形式で送ったりとかもできます。それらに関しては私も今クイズBotなどを作っていきながら勉強している最中なので、また実例をあげて紹介していきたいと思っています。気になる方は調べてみてくださいね!そのあとに、具体的にどのようなtextにするかを書くわけです。今回は受け取ったままを書きたいので、受け取った文字をそのまま変数にいれてあげて、そのまま返してあげていますが、例えばこのように書くことも可能です。最後は上記に書いてあるままですが、今回は文字を受け取った場合に返信としてこの動作をしてあげたいのでclient.reply_messageとしてあげています。Botからメッセージを送ってあげたい場合はreplyをpushにしてください。(フリータイプの場合はBotからのPushメッセージは送れません。APIが用意してくれている型を利用すれば素早く開発ができそうですね!環境変数を(軽くでも良いので)理解しておくべし環境変数に関してはそもそもプログラミングに関する基礎知識なので、この知識が直接LineBotを発展するときに役に立つというわけではないのですが、ここを理解すると、今後ググって色んなLineBotのコードを見た場合に理解しやすくなるので、長い目で見たら必須知識だと思うので書きますね。(実際私は最初環境変数が理解できずにコードを見て戸惑いました。笑)さて、下のようなコードがありましたね。SecretとTokenを直接ベタ打ちしても動くんですが、セキュリティ上あまりよろしくない&今後Botアカウントを変えたときに応用が利かないので、環境変数というものを利用してあげているんですね。環境変数とはある特定の値を保存する入れ物のようなものです。これだけ見るとただの変数と同じですが、同一コンピュータ内(または同一ユーザー内)で有効な変数です。環境変数を使うことで、何度も同じことを書かなくてもよくなると同時に普遍的に皆が共通して同じコードを使えるというメリットがあります。(Yuipediaより)つまり、環境変数は同一のコンピュータ/ユーザー内で動くことができます。要はただの変数よりも動く範囲が広いんですね。SecretとTokenはLineDevelopersの中で設定されています。それを違う場所(開発環境)で定義しても使えるのは、同じコンピュータ/ユーザー間で環境変数が動くからなんです。他のコンピュータやユーザーで動作させることが出来ないので、万が一コードが流出しても大事な情報は洩れないというわけですね!ではどこでそもそも環境変数を定義したのかというところですが、前のBot作成の記事のときに下記のように書いたのを覚えているでしょうか。SecretとTokenを入れてあげることで、自分のパソコン内で環境変数を定義してあげているわけです。SecretとTokenを上書きしてあげれば良いだけなのでコードは一切触る必要がありません。実はもう一つ、LineBotを作る上で必ず必要な環境変数が定義されているんですね。request.env['HTTP_X_LINE_SIGNATURE']この部分です。これは何をしているのかというと、下記のように公式サイトに解説があります。X-Line-Signatureリクエストヘッダーに含まれる署名を検証して、リクエストがLINEプラットフォームから送信されたことを確認する必要があります(LineDevelopers公式サイトより)実はお使いのLineBotアカウントの種類によって、LineBotAPIを使ってメッセージを送信出来るかというのは決まってるんですね。Line社としてもリクエストがきちんと正常に実行されたかどうかを把握する必要があります。その処理をこの数行で行っているというわけです!まあ、こちらに関しては正直、LineBot作りには必ず入れないといけない処理なんだな~程度に思ってもらえれば大丈夫です!環境変数に関しては理解しないままベタ打ちしても編集は可能ですが、今後様々な環境変数が出てきたときになんとなく混乱するかと思ったので書いてみました!いかがでしたでしょうか。意外とLineBot作り簡単だなと思ったのではないかなと思います。旅のプロ×行動力おばけYuiフットワークがひたすら軽いYuiです!単語わからないという語学力ゼロの状態からドイツに留学し、1ヶ月後には独英を取得、語学力を活かして独英間の通訳や翻訳をボランティアで行う。その後、20万程度で約40ヶ国をカバン1つで世界一周。自由に生きるために現在プログラミングをもう勉強中。作ったもの:LineBot【おしゃべりマン】(下のLineマークから登録できます。