Ruby	on	RailsでLINEBOTを試した記録
CoEdo.rb	Ruby	/	Railsビギナーズ勉強会	第12回

2016/06/26	Fumiya	Sakai
自己紹介と簡単な経歴など
✦ 今までの仕事履歴(本業)
石川県金沢市生まれ
本業はサーバーサイドのプログラマ	※Rails&PHP使い
26歳〜31歳: Webプログラマ(PHP	&	Rubyがキャリア長い)
23歳〜25歳: Webデザイナー兼ディレクター
チャンスがあればiOSアプリ開発も絶賛やってみたい!
趣味:シルバーアクセサリー集め・スイーツ作り・アプリ開発
女子向け・グルメ・エンタメ関連のお仕事が多い
Qiita	:	http://qiita.com/fumiyasac@github
Github	:	https://github.com/fumiyasac
✦ 酒井文也(さかい	ふみや)
東京(大塚)住まいの31歳
こんな格好を普段からしているので

遊び人に見られますがエンジニアです。
文系卒に思われますが

実は数学科で理系卒です。
めっちゃお酒好きそうに見えますが

ビール苦手でお酒も超弱いです。
今でもたまにUIまわりとか触りたく

なることがあったりなかったり
今年の4月からフリーランスです。

こちらはこっそりと…ね。
最近のはまっている食べ物は

カボチャと担々麺です。
最近はSwift以外ではRailsやLaravel・CakePHP・Node.jsなんかも
これまでに作ったもの(ネイティブアプリ)
①	簡易家計簿アプリ「Coffre」
②	ゲームアプリ「10秒虫食い算」
・カレンダーを自作しています
・シンプルなお小遣い帳感覚で支出管理できます
・全問正解者ほとんどいません…
・不定期ですがコラムも書いています
・サーバーサイドはRuby	on	Railsを使用
http://www.coffre.me/
・デザインにもこだわってみました(特にグラフ)
・実はちょっとバグがあります。
・問題は今後追加予定(現在110問収録)
個人的にはなりますが、他にもアプリ・Webサービスなど開発中です(2016年も宜しくお願いします)
・サイト等は次回のアップデートで公開予定
http://blog.just1factory.net/services/284
・若干の中毒性を含みます
✦ 2016年4月に「BOT	API	Trial	Account」が発表されたので便乗
LINEBOTに関する参考資料
せっかくRailsに取り組んでいるのだから自分なりにアレンジしてみたい!
★LINEがBOTアカウントを自由に開発できる「BOT	API	Trial	Account」を提供を発表
https://linecorp.com/ja/pr/news/ja/2016/1320
Qiita等でもLINEBOTを試してみた的なエントリがかなり賑わっていたので自分でもやってみよう!
★LINEBOTを作るための流れを把握するのに役に立ったサイトなど
・(参考1):LINE	BUSINESS	CENTER
https://business.line.me/ja/
・(参考2):アカウントの作成〜大まかなながれまで
http://ysklog.net/line_bot/3922.html
・(参考3):LINE	BOT	API利用を考えているエンジニアが参考にしたい「BOT作ってみた」記事7つ
https://techstars.jp/blog/line-bot-kij-4542/
✦ RailsでLINEBOTを作成するにあたり必要なもの
必要なものやその他
LINEBOTのアカウントにつぶやいてオウム返しをするBOTを試してみるだけなら、

ここまで準備ができればOK。
工夫次第では下記のような面白BOTを開発できちゃうかも?
★最低限準備しなければいけないもの
・Railsが動く環境
・heroku(SSL通信が可能なサーバーがあれば他のものでもOK)
★+αで工夫をする際に必要になるもの
(グルメ・美容・検索etc...)
・マッシュアップしたいWebサービスの公開APIのアカウント
・LINEビジネスアカウント
・(参考):LineBotの事例を21個まとめてご紹介
http://blog.minato.jp.net/entry/linebot
✦ 個人的にハマってしまった点や公開の際に注意すべきこと
はまりやすいポイントや注意点
LINE	developersのページの「Server	IP	Whitelist」にFixieの「Outbound	IPs」

に表示されているIPアドレスを追加
★herokuとSSL通信についての部分
・herokuにLINEBOTの処理を行うRails部分をデプロイする際に「Fixie」アドオンが必要
(追加時のコマンド)$	heroku	addons:create	fixie:tricycle
★アカウントの管理
・Channel	ID
herokuの定数として管理すると良い。
(追加時のコマンド)$	heroku	config:add	定数名="定数値"
・Channel	Secret
・MID
・Proxy	URL	(Fixieで表示されているもの)
・使うWebサービスのAPIキー
✦ 自分でもLINEBOTを作成してみたのでこんな動きをします
デモ
★ソースはこちらから
・Github:	https://github.com/fumiyasac/okashi-suggest-linebot
食べたいお菓子をレコメンドするようなLINEBOTを作りました。
<使用したAPI>
「Yahoo形態素解析API」
形態素解析を行って文章内の「名詞」を抽出して検索語句を抜き出す
「お菓子の虜WebAPI」
おすすめしたいお菓子の情報のURL・名称・値段を表示する
✦ 使用したメイン処理部分のGemはこの2つ
使用したGemと参考資料一覧
★LINEが提供しているLINE	BOT	APIへのアクセスにはFaradayを使用
(参照)LINEBOT	APIへのアクセス用ライブラリはこちら
LINE経由でメッセージ送信 LINEのアカウント側で設定したコールバックURLにアクセス
この部分でFaradayを利用している
LINEのアカウント側で設定したコールバックURLへ
Railsのwebhook_controller#index
ごにょごにょ…
形態素解析&お菓子データ返却
生成されたメッセージをLINE BOT APIへ送信 LINE�BOTにメッセージ表示
・(参考1)	Ruby	on	Rails	でlinebot。メンヘラbotを作ってみた。
http://qiita.com/clubysg/items/70309673376fd4cc7b2b#_reference-ed87881d938791c5f8c2
・(参考2)	Rails	HerokuでLINE	BOTを試してみた
http://qiita.com/Arahabica/items/98e3d0d5b65269386dc4
✦ 使用したメイン処理部分のGemはこの2つ
使用したGemと参考資料一覧
★形態素解析はyahoo-parse-apiを使用
(参照)Yahoo形態素解析部分のモジュールはこちら
LINE経由でメッセージ送信 LINEのアカウント側で設定したコールバックURLにアクセス
この部分で利用している
LINEのアカウント側で設定したコールバックURLへ
Railsのwebhook_controller#index
ごにょごにょ…
形態素解析&お菓子データ返却
生成されたメッセージをLINE BOT APIへ送信 LINE�BOTにメッセージ表示
・(参考)	Yahoo!の日本語形態素解析APIのgemを作ってみた
http://kyohei8.hatenablog.com/entry/2013/12/14/125726
こんな感じで使用している
(例)「ばかうけが食べたい!」というメッセージを解析して「ばかうけ」を抽出する
✦ 正しく検索語句を抜き出しているかのチェックはRspecで行った
検索語句を抜き出す部分のテスト
★形態素解析で検索用の語句を作成する部分やAPIからデータ取得部分は書こう!
(参照)形態素解析の部分で検索語句が抜き出せているかのテスト
LINE経由でメッセージ送信 LINEのアカウント側で設定したコールバックURLにアクセス
この部分で利用している
LINEのアカウント側で設定したコールバックURLへ
Railsのwebhook_controller#index
ごにょごにょ…
形態素解析&お菓子データ返却
生成されたメッセージをLINE BOT APIへ送信 LINE�BOTにメッセージ表示
今回のBOT作成で痛感した反省点
・テストを先に書いておくとやっぱり安心感が違った(今回のBOTは形態素解析部分ができないといけない仕様)
・重要なモジュールについてもModelやController同様テストコードがあると安心感がある
・個人的には書いていて楽しかった(笑)
✦ お試し感覚で利用してみたけれども面白かった
今回のまとめ
ご清聴ありがとうございました!またこのような機会があった際には是非ともよろしくお願い致します!
★実装サンプルが多くて開発自体は助かった
・アイデア次第では面白いBOTを作成できそうな予感があった
・アプリ開発と同じようにライブラリやサンプル開発にも注力をしていきたい
Qiita等で紹介されているサンプルを基に実装が本当に役に立った&試しやすい
★自分なりのアレンジの幅が広くて面白い
今回はかなり簡単に試してみただけなのですがカスタマイズによってはもっと活用できるものになるかも
★動作保証の難しさとテストの重要性
Rspecの練習にも具体的なアプリケーション構築の練習にもなるのでいい題材かもしれない
★サンプルやアプリ開発に加えて他にもライブラリの作成も今後してみたい
まだまだ機能追加やリファクタリング・テストケースの充実化などはしていく予定です

Ruby on railsでlinebotを試した記録