こんにちは、行動力だけが取り柄のYuiです!
LineBot【おしゃべりマン】で結構反響があったので、LineBotの作り方について書いてみたいと思います。
まずは、Botの基礎である繰り返しBotから!
私は繰り返しBotはCloud9上とGoogle Apps Script(以下GAS)上の両方で作りました。結論から言うと、GASの方がBot作成の面だけで言うと簡単にできるのですが、Cloud9上で作るための作業を一通りできれば、今後のWebアプリ作りにも利用できそうなのでまずはCloud9上でRailsを使ってBotを作ってみた話を書きますね。また、Cloud9以外の環境でプログラミングをしているという方でも、ほとんど手順は同じなので、参考になるかと思います。
ちなみに知識0!Railsを書いたことがない!という人でもわかるように書きますが、その場合、単純な流れ作業になってしまって、面白くないと思いますのである程度Railsでアプリを作ったりとかはしてからの方が楽しいと思うのでお勧めです。
まずはLine Botアカウントを作成
Bot作成で最初にやることはまずアカウント作りです。
というわけでまずは、Line Developerにアクセスしてください。
何やらスタイリッシュな画面が現れましたね。
ヘッダー部分(Line Developersというロゴの横)の『プロダクト』を押したら、『Messaging API』というメニューが見えるかと思います。そこを『今すぐ始めよう』で始めましょう。
最初のログインは自身の個人Lineアカウントで大丈夫です。誰が作ったかという情報に使われるだけなので、Botからご自身の情報が洩れることはありません。
プロバイダー情報も自分の名前とか、何でも良いです。要は開発者は誰かをLine側が知りたいだけなので。
プロバイダー情報も入力出来たら、新規チャネル作成へと進みましょう。

こんな画面が出ているかと思いますので、上から順に埋めていきましょう。
プランに関してですが、下記のような違いがあります。
・Developer Trial:Botを通してメッセージの送受信ができる。友達登録は50人まで。
・フリー:Botからメッセージを送ることはできないが、友達登録数は無制限。
正直、簡単なBot作成だけなら正直どっちでも良いです。が、今後のBot作りのためにもう少し説明しますね。
Developer Trialでは、よくあるBotからの一斉送信ができます。例えば、Botが新しい機能をつけたとして、友達登録してくれている人に、「新機能追加したよ!」とお知らせすることができます。ただ、その一方で、友達登録数が50人に限られるので、多くの人にBotを使ってもらいたい人には不向きです。また、途中から有料プランとかに切り替えることも出来ません。プランの変更=Bot作り直しという状態です。
フリーでは、Botの機能だけ(自動応対など、プログラムされている機能)なら十分事足ります。ただ、Botからの一斉送信ができないんですね。上の例でいうと、「新機能追加したよ!」とお知らせすることはできません。その代わり、友達登録数が無制限なのと、プランの切り替えができます。例えば、ある程度フリーで運用して友達登録数も増えてきたし、メッセージ送信機能も付けたいなと思って、有料にする場合、元あるBotのままで切り替えが可能です。
まあその辺は好みなので、サクッと選んで次に進みましょう!
大業種や小業種の欄も適当で大丈夫です。
後は確認をして完了です!
これでとりあえずBotの核となるアカウント作りが出来ました♪
herokuでアカウント作成&Bot用App作成
次にすることはherokuでアカウント作成をして、Bot用のApp作成です。
自分が書いたコードを公開するための本番環境作りですね。
herokuを開いたら、『新規登録』をクリックして、必要事項を入力して、『無料アカウント作成』を押してください。
そうすると、登録したメールアドレスにメールが届いているはずなので、リンクをクリックして、パスワードを設定してください。
促されるままに次へ進んだら、『Create New App』というボタンがあるはずなので、押して、Bot用のApp作成をしましょう。
これで第二段階のBot用App作成まで出来ました。
そのあと、自身の開発環境でherokuを使えるようにするのを忘れないようにしてください!
Cloud9をお使いの場合は、以下のコードをターミナルに打ち込んで、enterキーを押したら完了です。
1 2 3 4 5 |
curl -OL https://cli-assets.heroku.com/heroku-linux-x64.tar.gz tar zxf heroku-linux-x64.tar.gz && rm -f heroku-linux-x64.tar.gz sudo mv heroku /usr/local echo 'PATH=/usr/local/heroku/bin:$PATH' >> $HOME/.bash_profile source $HOME/.bash_profile > /dev/null |
ここまでできたら、ターミナル上でherokuにloginしておきましょう!
1 |
heroku login |
と入力すると、Eメールアドレスを入力する欄に移るので、登録したEメールアドレスを入力して、パスワードを入力してください。
1 |
Logged in as あなたのEメールアドレス |
上記のように出ていれば無事ログインできています!
プラグインを勉強してコードを少し見やすくしましたが、ターミナルでの入力表記も同じになっているため、少し見にくいかもしれません。また随時更新していきます。
Railsでアプリを作る
次はとうとうアプリ作りです。
Railsを勉強されてる方にはおなじみの以下のコードを書きます。
1 |
rails new repeat-bot |
もちろん、app名(repeat-bot)のとこをは何でもオッケーです。好きな名前を付けてください。
そしたら次にGemfileをいじります。
Gemfileを開いてもらったら、色んなGemfileがありますね。
その一番上にLinebot APIをダウンロードするために以下のコードを追加してください。
1 |
gem 'line-bot-api' |
これでLinebotを使うためのgemが追加されました。
また、そこから下に見ていくとこんなコードありますね。
1 |
gem 'sqlite3' |
これをカットして、下の方にある、group :development doの部分にペーストしてください。
下記のようになったはずです。
1 2 3 4 5 6 7 8 9 |
group :development do gem 'sqlite3'←ここが新しく追加された部分 # Access an interactive console on exception pages or by calling 'console' anywhere in the code. gem 'web-console', '>= 3.3.0' gem 'listen', '>= 3.0.5', '< 3.2' # Spring speeds up development by keeping your application running in the background. Read more: https://github.com/rails/spring gem 'spring' gem 'spring-watcher-listen', '~> 2.0.0' end |
このようになったら今度はgroup :production doをgroup :development doの上に(まあ場所は正直どこでも良いのですが)新しく書いて、その中にgem ‘pg’を追加してください。
下記が上記のgroup :development do~endの上に入ったかと思います。
1 2 3 |
group :production do gem 'pg' end |
これは何をしているのかというとRailsではデータベースを使うためにsqlite3というパッケージを使って開発をしているのですが、herokuでは違うデータベースにアクセスしないといけないため、pg(postgresqlの略)というパッケージを使ってデプロイ(アプリを公開すること)する必要があり、その指定をしてあげています。
なので、開発環境(group :development doの部分)ではsqlite3を指定して、本番環境(group :production doの部分)ではpostgresqlを指定しないといけないんです。
もっとかみ砕いて言うと、開発は英語で行っているけど、実際に公開するときは日本語でアップするから、開発環境の言語を指定する箇所で英語と入れて、公開するとき(本番環境)の言語を指定する箇所で日本語を入れてあげて、自動的に公開するときに日本語に翻訳してあげている感じです!(英語→sqlite3、日本語→postgresqlで置きかえて理解してみてください。)
そこまで出来たら、下記をターミナルで入力してあげて
1 |
bundle install --without production |
本番環境以外に新しく追加されたgemをインストールしてください。
ここまででようやく行程の半分ぐらいは終わりました。あと少し・・!!
herokuへデプロイする
ここまで来たらもうあとは気合いです。
ターミナルに以下のコードを順番に入力してください。
1 |
git init |
を入力してgitで管理できるように初期化してあげます。
1 |
heroku git:remote -a herokuのapp名 |
上記のheroku git:remote -aというコマンドの後にスペースを一個だけ開けて、先ほど登録したherokuのアプリ名を入力してあげます。
これでherokuのappとこのRails上のappを結び付けることができました。
あとはおなじみのデプロイ作業ですね。
1 |
git add . |
ここはgit add *でももちろん大丈夫です。ここでgitによるバージョン管理の対象の範囲を全部に指定してあげています。
1 |
git commit -m "init" |
ここももちろん””内はただのコメントなので、”initial commit”でもオッケーです。
これで保存が出来ました。後はherokuにpushしてあげるだけですね!
1 |
git push heroku master |
繰り返しBotのコードを書いていきましょう!
はい、皆さんここまでお疲れ様でした!環境は整ったので、後は繰り返しBot用のコードを書いてあげるだけです。
まずはRailsおなじみの手順の一つ、コントローラーの作成です。
1 |
rails g controller linebot |
もちろん、コントローラー名(linebot)は何でも大丈夫です。
そして、heroku側にどのLineBotを使うのか教えてあげましょう。
1 |
heroku config:set LINE_CHANNEL_SECRET=あなたのchannel secret |
これはLine Botの管理画面からわかります。
1 |
heroku config:set LINE_CHANNEL_TOKEN=あなたのchannel token |
もし最初に何も記載がなければ、『再発行』を押せば出てきます。
ここまで出来たらあとはルートとコントローラーを少しいじるだけです。
1 2 3 |
Rails.application.routes.draw do post '/callback' => 'linebot#callback' end |
これで、何か入力されたら/callbackで受け取って、自動的にlinebotコントローラーのcallbackアクションを呼び出されるようにします。
後はLinebotコントローラーを開いて、繰り返しBot用のコードを書いていきましょう!下記をコピペすればオッケーです。
繰り返しBot用のコードは実はGit公式サイトにも載ってるのですが、最初のrequire ‘sinatra’などはいらないので、公式サイトではなく以下をそのままコピペしてください。
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 31 32 33 34 35 36 37 38 39 |
class LinebotController < ApplicationController require 'line/bot' protect_from_forgery :except => [:callback] def client @client ||= Line::Bot::Client.new { |config| config.channel_secret = ENV["LINE_CHANNEL_SECRET"] config.channel_token = ENV["LINE_CHANNEL_TOKEN"] } end def callback body = request.body.read signature = request.env['HTTP_X_LINE_SIGNATURE'] unless client.validate_signature(body, signature) error 400 do 'Bad Request' end end events = client.parse_events_from(body) events.each { |event| case event when Line::Bot::Event::Message case event.type when Line::Bot::Event::MessageType::Text message = { type: 'text', text: event.message['text'] } client.reply_message(event['replyToken'], message) end end } head :ok end end |
はい、ここまで完成したら、あとはもう一回デプロイ作業をするだけです。
1 |
git add . |
1 |
git commit -m "add linebot_controller" |
ここで初めてのデプロイ作業ではないので、コメント部分だけ少し変えてあげています。
1 |
git push heroku master |
これであとはLine Developersのページを開いてあげて、Webhook送信を『利用する』に変えてください。
そしてWebhook URLを、https://herokuのapp名.herokuapp.com/callbackで入力したら接続確認をして・・・
完成です!!
送ってみてください!
長かったですね。お疲れ様でした。今回は単純な繰り返しBotでしたが、今後、この中身をいじってどんどん進化させていってください!
次回はその進化のさせ方について書きたいと思います!