AWS Cloud9で初めてのLINEbot作成（Rails＋Herokuデプロイ）

#はじめに
　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を使えるように設定しましょう。以下のコードを一つずつ順番にターミネルに打ち込むだけです。

```:terminal
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」でサクッとアプリを作りましょう。

```:terminal
rails new repeat-bot
```
　次にGemfileを少し編集します。

```: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をインストールしましょう。

```:terminal
bundle install --without production
```
#バージョン管理（Herokuデプロイ）
　ここまで進んだところで一度Gitでバージョン管理しておきましょう。

```:terminal
git init
```
　続いて、herokuのappとこのRails上のappを結び付けましょう。

```:terminal
heroku git:remote -a herokuのapp名
```
先ほどHerokuのapp名を登録したのであれば、その名を。特に変更していない場合は自動で英数字の羅列がふられているのでそれを打ち込んでください。（Herokuのページより確認）

そして先ほど登録したHerokuにデプロイします。


```:terminal
git add .
git commit -m "init"
```
最後にpushして終了です。

```:terminal
git push heroku master
```
#Bot用にコード編集
　くり返しBot用にコードを付け加えていきます。まずはRailsでおなじみコントローラーの作成です。

```:terminal
rails g controller linebot
```
つぎに、今回作成したLINEbotの管理画面から、チャンネルシークレットとアクセストークンをコピーしてターミネルに貼り付けます。
以下のように記入してください。

```:terminal
heroku config:set LINE_CHANNEL_SECRET=あなたのchannel secret
heroku config:set LINE_CHANNEL_TOKEN=あなたのchannel token
```
くり返し返答させるように、コードを編集します。
コピペして貼り付けてください。
```:routes.rb
Rails.application.routes.draw do
  post '/callback' => 'linebot#callback'
end
```


```:linebot_controller.rb
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
```

最後にもう一度デプロイしておきましょう。

```:terminal
git add .
git commit -m "add linebot_controller"
git push heroku master
```
そしてLINEbot管理画面から、Webhook URLを[https://herokuのapp名.herokuapp.com/callback]
で入力すれば完成です。

#LINEで動作確認
　最後に実際にLINEで文字を入力して正しく返答されるのか見てみましょう。