LoginSignup
6
0

More than 1 year has passed since last update.

Ruby, Sinatra, HerokuでLINE Botを動かしてみた

Last updated at Posted at 2022-03-24

RubyでLINE Botを動かすための方法です

環境, ライブラリ

  • Windows10
  • Visual Studio Code
  • Ruby(3.1.1)
  • Sinatra
  • Heroku
  • LINE Message API

ファイル構成

  • Gemfile
  • Gemfile.lock
  • Procfile
  • app.rb
  • config.ru

前提

Ruby、Gitのインストールが完了していることが前提です。

[手順1] ボット用のチャネルを作成する

LINE Developersコンソールでボット用のチャネルを作成します。

1. LINE Developersコンソールにログインする

LINE Developersサイト の右上の[ログイン]をクリックします。
image.png

次の画面で、[LINEアカウントでログイン]または[ビジネスアカウントでログイン]をクリックします。
image.png

LINE Developersコンソールに初めてログインしたときは、名前とメールアドレスを入力して開発者アカウントを作成します。
image.png

2. 新規プロバイダーを作成する

ホーム画面の[新規プロバイダー作成]をクリックします。
image.png

[新規プロバイダー作成]画面で任意の[プロバイダー名]を入力し、[作成]をクリックします。
自分の名前や企業名で大丈夫です。
image.png

3. チャネルを作成する

作成したプロバイダーページで、[チャネル設定]タブの[Message API]をクリックします.
image.png

チャネルに必要な情報を入力していきます。「LINE」またはそれに類する文字列をチャネル名に含めることはできません。
image.png

最後にチャネルが作成されたことを確認して、アカウントの作成は終了です。

[手順2] Herokuアカウントを作成する

Herokuアカウント を作成します(作成は無料です)。
image.png

次に、Herokuをインストール します。
image.png

[手順3] ファイルを作成する

※手順3はVScode上で操作しています。

ファイル構成は次のとおりです。

  • Gemfile
  • Gemfile.lock
  • Procfile
  • app.rb
  • config.ru

これらのファイルを入れておく適当なフォルダを用意してください。

Gemfile

Gemfile
source "https://rubygems.org"
gem "sinatra"
gem 'puma'

次にGemfile.lockを作ります。中身は空で大丈夫です。

ファイルを作成したら、$ bundle installでインストールします。(ターミナル上)

Procfile

Procfile
web: bundle exec rackup config.ru -p $PORT

config.ru

config.ru
require './app.rb'

run Sinatra::Application

app.rb

app.rb
require 'bundler/setup'
require 'sinatra'

get '/' do
  'hello world!'
end

ここまでできたらデプロイしていきます。
この先はターミナル上に入力します。
Herokuにログインするために、$ heroku loginを入力します。
image.png
上の画像のように出たら、指示通りキーを押します。ブラウザでHerokuが開き、ログイン画面になるのでログインします。

再びターミナル上に戻ってきて次を入力します。{HEROKU_APP_NAME}は好きなアプリ名を入力します。このアプリ名はどこかにメモしておきます。

$ heroku create {HEROKU_APP_NAME}
$ git init
$ heroku git:remote -a {HEROKU_APP_NAME}
$ git add .
$ git commit -m "first commit"
$ git push heroku master
$ heroku open

デプロイでエラーが出なければ、https://アプリ名.herokuapp.com/にアクセスしたときに「hello world!」と出ています。(heroku openでこのURLがブラウザで開きます)

[手順4] サンプルボットを動かしてみる

LINE BotのLINE Message API SDK for Rubyechoボット のサンプルコードをコピーします。

コピーしたものをapp.rbの下に貼り付けます。貼り付けて整えたコードがこちらです。

app.rb
require 'bundler/setup'
require 'sinatra'
require 'line/bot'

get '/' do
  'hello world!'
end

def client
    @client ||= Line::Bot::Client.new { |config|
      config.channel_secret = ENV["LINE_CHANNEL_SECRET"]
      config.channel_token = ENV["LINE_CHANNEL_TOKEN"]
    }
end
  
post '/callback' do
    body = request.body.read
  
    signature = request.env['HTTP_X_LINE_SIGNATURE']
    unless client.validate_signature(body, signature)
      halt 400, {'Content-Type' => 'text/plain'}, 'Bad Request'
    end
  
    events = client.parse_events_from(body)
  
    events.each do |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
    end
  
    "OK"
end

Gemfilegem 'line-bot-api'を加えます。

LINE Developersコンソール

LINE Developersコーンソールのチャネルページの[チャネル基本設定]のチャネルシークレットと[Message API設定]のチャネルアクセストークンを確認します。チャネルアクセストークンがない場合は[発行]をクリックします。
image.png

[Message API設定]のWebhook設定https://{HEROKU_APP_NAME}.herokuapp.com/callbackを入力し(アプリ名はHerokuで作ったアプリ名)、[有効]にします。応答メッセージとあいさつメッセージは[無効]にしておきます。
image.png

Heroku

ブラウザでHerokuのダッシュボードを開いて、先ほど作ったHerokuのアプリをクリックします。
[setting] => Config Varsの[Reveal Config Vars]をクリックします。
image.png

image.png

  1. [KEY]にapp.rbLINE_CHANNEL_SECRETを、[VALUE]にチャネルシークレットを入力します
  2. [KEY]にapp.rbLINE_CHANNEL_TOKENを、[VALUE]にチャネルアクセストークンを入力します
    image.png

ターミナルに戻り、Herokuにプッシュします。

$ git add .
$ git commit -m "Update"
$ git push heroku master

LINE DevelopersコンソールのMessage API設定のWebhookの[検証]をクリックして成功すれば、LINEチャンネルのQRコードをLINEアプリの友だち追加で読み取って友だち追加します。

実際に動かしてみます。

LINE画面

オウム返しするLINE Botです。

20220324_172728.png

このあとは、サンプルコードを変えて自分の好きなLINE Botにしていきます!

うまく動作しない場合

LINE Botがうまく動かない場合は、$ heroku logs --tail --app {HEROKU_APP_NAME}でHerokuのログを確認します。

参考サイト

6
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
0