#はじめに
Railsチュートリアルを終わったばかりのペーペーが、まず作ってみようと思ったのがLINEbot。文字をそのまま返す「くり返しBot」を今まで学習したモノを使って理解度を深めようというのが今回の目的。なので、あえてGASなど便利なものを使わずに「Rails+Cloud9+Heroku」で開発します。
##目次
- LINE Developersアカウント&新規チャネル作成
- Herokuアカウントを作成
- cloud9上にRailsアプリ作成
- バージョン管理(Herokuデプロイ)
- Bot用にコード編集
- LINEで動作確認
#LINE Developersアカウント&新規チャネル作成
まずはLINE Developersにログインします。(https://developers.line.biz/ja/)
初めての方は、普段使っているLINEアカウントで簡単に登録できます。プロバイダー情報を登録し、新規チャネルを作成します。
詳しくはこちらの記事を参照ください。(https://qiita.com/nkjm/items/38808bbc97d6927837cd)
#Herokuアカウントを作成
すでにHerokuのアカウントを作成済であれば、ここは飛ばして次の工程へ進んでください。
Herokuを開いたら、新規登録のボタンをクリックしてアカウントを作成します。
(https://jp.heroku.com/)
後からでもできますが、ここでCloud9上でHerokuを使えるように設定しましょう。以下のコードを一つずつ順番にターミネルに打ち込むだけです。
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
無事ログインできればOKです。これで自身の開発環境でHerokuが使えるようになりました。
#cloud9上にRailsでアプリ作成
Railsを学んだ方はおなじみの「Rails new」でサクッとアプリを作りましょう。
rails new repeat-bot
次にGemfileを少し編集します。
gem 'line-bot-api'
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'
group :production do
gem 'pg'
end
end
新しく追加したGemをインストールしましょう。
bundle install --without production
#バージョン管理(Herokuデプロイ)
ここまで進んだところで一度Gitでバージョン管理しておきましょう。
git init
続いて、herokuのappとこのRails上のappを結び付けましょう。
heroku git:remote -a herokuのapp名
先ほどHerokuのapp名を登録したのであれば、その名を。特に変更していない場合は自動で英数字の羅列がふられているのでそれを打ち込んでください。(Herokuのページより確認)
そして先ほど登録したHerokuにデプロイします。
git add .
git commit -m "init"
最後にpushして終了です。
git push heroku master
#Bot用にコード編集
くり返しBot用にコードを付け加えていきます。まずはRailsでおなじみコントローラーの作成です。
rails g controller linebot
つぎに、今回作成したLINEbotの管理画面から、チャンネルシークレットとアクセストークンをコピーしてターミネルに貼り付けます。
以下のように記入してください。
heroku config:set LINE_CHANNEL_SECRET=あなたのchannel secret
heroku config:set LINE_CHANNEL_TOKEN=あなたのchannel token
くり返し返答させるように、コードを編集します。
コピペして貼り付けてください。
Rails.application.routes.draw do
post '/callback' => 'linebot#callback'
end
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
最後にもう一度デプロイしておきましょう。
git add .
git commit -m "add linebot_controller"
git push heroku master
そしてLINEbot管理画面から、Webhook URLを[https://herokuのapp名.herokuapp.com/callback]
で入力すれば完成です。
#LINEで動作確認
最後に実際にLINEで文字を入力して正しく返答されるのか見てみましょう。