LINE bot作成チュートリアルをやってみたPart2~開発編~

f:id:hedgehogweeklyreport:20190112112350p:plain

前回のLINE bot作成チュートリアルをやってみたPart1~環境構築~の続きから

※思ったより長くなったので開発編は分割

Railsプロジェクトの新規作成

参考:Railsドキュメント

任意のディレクトリにて下記Railsコマンドを実行

rails new <プロジェクト名> -d postgresql
コマンド/オプション 概要
rails new アプリケーションに最低限必要なフォルダや
ファイルを自動的に作成
-d データベースの種類

※データベースは自身の環境による。今回はPostgreSQLを指定
※プロジェクト名は任意で指定する

Rails new コマンド実行時に指定したプロジェクト名に当たるディレクトリが作成され、その配下に下記のディレクトリやファイルが作成される。

f:id:hedgehogweeklyreport:20190112113908p:plain

Gemファイルの編集

その前に、そもそもGemファイルってなんぞや?

項目 概要
Gem RubyGemsの管理ツール
Ruby言語用のライブラリ
Gemfaile Railsで使用するGemの依存関係を管理するファイル
Bundler アプリケーションで使用するgemのバージョン管理を行うプログラム

デフォルトのGemfile

source 'https://rubygems.org'
git_source(:github) { |repo| "https://github.com/#{repo}.git" }

ruby '2.5.1'

# Bundle edge Rails instead: gem 'rails', github: 'rails/rails'
gem 'rails', '~> 5.2.2'
# Use postgresql as the database for Active Record
gem 'pg', '>= 0.18', '< 2.0'
# Use Puma as the app server
gem 'puma', '~> 3.11'
# Use SCSS for stylesheets
gem 'sass-rails', '~> 5.0'
# Use Uglifier as compressor for JavaScript assets
gem 'uglifier', '>= 1.3.0'
# See https://github.com/rails/execjs#readme for more supported runtimes
# gem 'mini_racer', platforms: :ruby

# Use CoffeeScript for .coffee assets and views
gem 'coffee-rails', '~> 4.2'
# Turbolinks makes navigating your web application faster. Read more: https://github.com/turbolinks/turbolinks
gem 'turbolinks', '~> 5'
# Build JSON APIs with ease. Read more: https://github.com/rails/jbuilder
gem 'jbuilder', '~> 2.5'
# Use Redis adapter to run Action Cable in production
# gem 'redis', '~> 4.0'
# Use ActiveModel has_secure_password
# gem 'bcrypt', '~> 3.1.7'

# Use ActiveStorage variant
# gem 'mini_magick', '~> 4.8'

# Use Capistrano for deployment
# gem 'capistrano-rails', group: :development

# Reduces boot times through caching; required in config/boot.rb
gem 'bootsnap', '>= 1.1.0', require: false

group :development, :test do
  # Call 'byebug' anywhere in the code to stop execution and get a debugger console
  gem 'byebug', platforms: [:mri, :mingw, :x64_mingw]
end

group :development do
  # 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 :test do
  # Adds support for Capybara system testing and selenium driver
  gem 'capybara', '>= 2.15'
  gem 'selenium-webdriver'
  # Easy installation and use of chromedriver to run system tests with Chrome
  gem 'chromedriver-helper'
end

# Windows does not include zoneinfo files, so bundle the tzinfo-data gem
gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby]
項目 概要
source gemが置いてある場所を指定する
git_source Gitレポジトリが置いてある場所を指定する
ruby アプリケーションを実行するRubyのバージョンを指定
gem 使用するgemを指定する
group gemをインストールする環境を指定

バージョン指定方法

指定方法 概要
x.x.x バージョンを固定
>= x.x.x x.x.x以上のバージョンが必要
>= x.x.x, < y.y.y x.x.x以上、y.y.y以下のバージョンが必要
~> x.0 メジャーバージョンは固定で、マイナーバージョンは0~9が使用可能

デフォルトのGemファイルを例にすると

ruby '2.5.1'ruby '2.5.1'でバージョンを固定
gem 'rails', '~> 5.2.2'Rails 5.2.2のメジャーバージョンは固定でマイナーバージョンは2.2以上が可能
gem 'pg', '>= 0.18', '< 2.0'→ pg 0.18以上、pg 2.0 以下のバージョンが必要 となる

Line Messaging API

今回のLINEbotの作成にあたって必須のAPIMessagingAPI(line-bot-api)となります。

MessagingAPI(line-bot-api)はざっくり以下の2つに分類

Push API
①LINEを介してメッセージを自動送信する機能

Reply API
①LINEを介してメッセージを受信する機能
②受信したメッセージをプログラムされた通りに処理する機能
③処理した結果をLINEを介して送信する機能

f:id:hedgehogweeklyreport:20190112131600p:plain

また、使用するプランによって料金体系が違います

参考:LINE公式/プラン料金

f:id:hedgehogweeklyreport:20190112131202p:plain

一応公開して反応を見たいのでPush APIは使えないが制限のないフリープランでいこうと思う

LINE Developersの公式サイトに各種ドキュメントがあるので諸々参考にする
公式Messaging APIドキュメント一覧

公式Messaging APIリファレンス

LINE Messaging APIを使用する為に

公式のドキュメントよりMessaging APIを利用する為には以下の手順が必要とのこと

Messaging APIを使ってボットを作成するには、以下の手順に従います。

1.チャネルを作成する
2.ボットを作成する

ボットは後で作るので先ずは1.チャネルから

チャネル作成

LINE Developersコンソールにログイン

f:id:hedgehogweeklyreport:20190113094242p:plain

初めてログインする場合、開発者登録画面が表示されるので開発者名メールアドレスを入力し、LINE Developers Agreementの内容に同意します。にチェックを入れて確認画面に進むを押下

f:id:hedgehogweeklyreport:20190113094833p:plain

確認画面に遷移するので、内容を確認し問題がなければこの内容で作成するを押下する

f:id:hedgehogweeklyreport:20190113095129p:plain

LINE Developersトップ画面右上のアカウントアイコンをクリック

開発者情報のページに遷移したら認証用メールを送信を押下する

f:id:hedgehogweeklyreport:20190113095855p:plain

認証用のメールを受信するのでメールアドレスの認証リンクをクリックする
※認証用メールには有効期限があるので注意

f:id:hedgehogweeklyreport:20190113100203p:plain

再度、開発者情報のページに戻り、認証済になったことを確認する

f:id:hedgehogweeklyreport:20190113100416p:plain

開発者情報のページ下部のプロバイダーリストを押下

f:id:hedgehogweeklyreport:20190113100622p:plain

プロバイダーリスト画面より、新規プロバイダー作成を押下

f:id:hedgehogweeklyreport:20190113100751p:plain

新規プロバイダー作成画面にて任意のプロバイダー名を入力して確認するを押下

f:id:hedgehogweeklyreport:20190113101246p:plain

確認画面にてプロバイダー名を確認し、問題がなければ作成するを押下

f:id:hedgehogweeklyreport:20190113101345p:plain

作成完了画面に遷移するのでそのまま新規チャネルを作成する為、真ん中のMessaging API チャネルを作成するを押下

f:id:hedgehogweeklyreport:20190113101902p:plain

新規チャネル作成画面にてアプリアイコンアプリ名アプリ説明プラン大業種少業種メールアドレスをそれぞれ入力/登録して入力内容を確認するを押下

アプリアイコン…だと…
※テスト用なんで適当なフリー素材で済ませる

f:id:hedgehogweeklyreport:20190113103454p:plain

今回、プランはフリーを選択

f:id:hedgehogweeklyreport:20190113103747p:plain

利用規約が表示されるので同意するを押下

また、確認画面下部に利用規約チェックボックスがあるのでそれぞれチェックを入れて作成を押下

f:id:hedgehogweeklyreport:20190113104342p:plain

プロバイダー画面にて先程作成されたチャネルが表示されていれば作成完了

f:id:hedgehogweeklyreport:20190113104901p:plain

思ったより長かった…

Amazon API

参考
【Rails】Amazon APIで書籍検索アプリ作成

[Ruby] Amazon Product APIで商品検索してみた

今回はAmazonからデータを取得するLINEbotを作成するのでAmazon APIのgemであるamazon-ecsを使用

※ecsと聞くとAWSElastic Container Serviceの方をイメージしちゃって若干混乱

f:id:hedgehogweeklyreport:20190112144516p:plain

Amazon APIの登録

Amazon API登録の為には以下の手順が必要

Product Advertising API 開発者として登録する
アソシエイトへの登録
ライセンス契約を読む

※参照 Product Advertising API開発者ガイド(日本語)

他のブログ記事を読むとAPI開発者登録とアソシエイト登録の順序が逆が殆ど…
Product Advertising APIのページ自体がアソシエイトページ内にあるので恐らくアソシエイト登録が先…

Amazonアソシエイトにアクセスしてアソシエイト登録を行う

アソシエイト登録完了後、Amazon Product Advertising APIを開き、利用をはじめるを押下

f:id:hedgehogweeklyreport:20190113161144p:plain

認証情報のダウンロード画面が表示されるので認証情報をダウンロードするを押下してcsvをダンロードする

f:id:hedgehogweeklyreport:20190113161201p:plain

※認証情報csvは基本このタイミングでしかダウンロード出来ないので必ずダウンロードして、保管する

※シークレットキーを忘れたたりcsvを紛失した場合、下の画像を参考に既存の認証情報を削除して再度認証情報を作成する

f:id:hedgehogweeklyreport:20190113112612p:plain

環境変数の設定

参考:環境によって変わる設定値はdotenvを使うと便利

後々、Line Messaging APIAmazon API環境変数を設定の際にあると便利なものらしい

使用するGemはdotenv-rails

Gemfileに追記

Gemfileバックアップ作成

cp -pi Gemfile Gemfile.org

Gemfileファイル末尾に追記

f:id:hedgehogweeklyreport:20190112113908p:plain

echo -e "\ngem 'line-bot-api'\n\ngem 'dotenv-rails'\n\ngem 'amazon-ecs'" >> Gemfile

diffでバックアップファイルとの差分確認

diff Gemfile Gemfile.org

f:id:hedgehogweeklyreport:20190112152859p:plain

bundle install

プロジェクトディレクトリにて、Gemfileに記述された依存ライブラリのインストールを実行

pwd
bundle install

下記の様にメッセージが出力されれば成功

Bundle complete! 21 Gemfile dependencies, 84 gems now installed.
Use `bundle info [gemname]` to see where a bundled gem is installed.

f:id:hedgehogweeklyreport:20190112153946p:plain

上手くいっている模様

コントローラーの作成

コントローラーとはなんぞや?

参考:Rails controllerを徹底解説!知っておくべき3つの知識も紹介

Railsのcontrollerとは、一言で言うと、「パソコン(ブラウザ)からのリクエストを受け取り、model・viewと連携しながら結果をブラウザに送る(レスポンス)役割を担う部分」です。

らしい

modelとはなんぞや?

参考:Railsのmodelを徹底解説!知っておくべき3つの知識も紹介

Railsのmodelとは、「データベースとのやり取りを行うクラスのこと」です。

らしい

viewとはなんぞや?

参考:Railsドキュメント/view

HTML、XMLなどの各種フォーマットでのレスポンスを生成する。主に、ユーザに見せるインターフェイスのデザインを行う。

これら3つでMVCアーキテクチャ*1と呼ぶらしい

rails g controller <コントローラ名>

コントローラー名は任意

オプション 概要
g(generate) 生成

結果

f:id:hedgehogweeklyreport:20190112160612p:plain

コントローラー生成の確認

cd app/controllers/
pwd
ls

f:id:hedgehogweeklyreport:20190112161029p:plain

linebot_controller.rbが生成されていますね

デフォルトのcontrollerの中身

class LinebotController < ApplicationController
end

ここから細かい処理を公式のドキュメントなどを参考にcontrollerに書き込んでいくわけですが、余り複雑にせずシンプルに先ずは動作させる事を目指す…

*1:model view controller