【LINE bot】初めてのおみくじbot

## はじめに

- Line bot勉強会の資料です。
- このスライドでは環境構築を目的としています。

---

## LINE bot勉強会の流れ
|流れ|<font color="red">step1</font>|step2|step3|
|:--:|:--:|:--:|:--:|
|機能|<strong>[おみくじbot](https://qiita.com/4geru/items/438a2dfcaf9eea4bdbb5)</strong>|[カウントbot](https://qiita.com/4geru/items/ef59098cec4708a6b7a3)|[最寄駅検索bot](https://qiita.com/4geru/items/30fa69c65e9fcdd12108)|
|学ぶこと|LINE botの作り方|DB・リッチニュー|ボタンアクション・URIスキーマ・外部API|

その他TIPS

- [可愛くするために](https://qiita.com/4geru/items/398a38c89cf01bb8f151)
 - スタンプの使い方
 - 絵文字の使い方

---
## 今回学ぶこと
- LINE Messaging APIの利用法
- 乱数を用いた処理 

---

## 利用環境

|環境|利用するもの|
|:--|:--|
|言語|ruby|
|フレームワーク|sinatra|
|Server|heroku|

---
### 必要なパッケージのインストール

---
Gemfileの作成

```shell
$ gem install bundler
$ bundle init 
```

---
Gemfileの記述

```ruby:Gemfile
gem 'sinatra'
gem 'sinatra-contrib'
gem 'rake'
gem 'line-bot-api'
```

gemのインストール

```shell
$ bundle
```

---

### sinatraが動くかの確認

```shell
$ touch app.rb
```

```ruby:app.rb
require 'bundler/setup'
Bundler.require

get '/' do
    'true'
end
```

--- 
### サーバーを起動
起動した先に`true`が表示されれば大丈夫。

```shell
$  bundle exec ruby app.rb
```

---
# line botを動かす
---
### プログラムの記述
`src/line.rb`を作成し、[line-bot-sdk-ruby](https://github.com/line/line-bot-sdk-ruby)のサンプルコードをコピー

```shell
$ mkdir src
$ touch src/line.rb 
```

```ruby:src:line.rb
require 'sinatra'
require 'line/bot'

def client
...
...
```


---

### `app.rb`から`src/line.rb`を呼び出す

```ruby:app.rb
require 'bundler/setup'
Bundler.require
require './src/line'
...
...
```
---

### config.ru

```ruby:config.ru
require 'bundler'
Bundler.require

require './app'
run Sinatra::Application
```

---
##gitの作成

```
git init
git add -A
git commit -m 'initial commit'
```

---
##herokuの作成
あらかじめherokuのアカウントを作成しておきます。
herokuにログインをし、アプリケーションを作成します。

```
$ heroku login
$ heroku create _original_application_name_
```

---
##環境変数の設定
アプリケーションを作成するとアプリケーションのプロジェクトファイルを作成します。
herokuの[ダッシュボード](https://dashboard.heroku.com)から
作成したアプリのSettings > Reveal Config Varsで環境変数を設定していきます。
<img width="896" alt="スクリーンショット 2018-03-18 22.45.49.png" src="https://qiita-image-store.s3.amazonaws.com/0/64677/d5fe61c4-75a9-02fb-d1e9-af48e4b56af0.png">

---
### botのアカウントを作る
環境変数を設定するために元となるbotを作成します。
[LINE developers](https://developers.line.me/ja/)からMessaging APIを選択しbotを作り始めます。
<img width="1039" alt="スクリーンショット 2018-03-16 21.45.24.png" src="https://qiita-image-store.s3.amazonaws.com/0/64677/3f75bc5e-112d-e6cb-b5ce-d0dddb035bcb.png">

---
### 環境変数をとる
次に環境変数をherokuに設定します。
<img width="808" alt="スクリーンショット 2018-03-18 22.46.29.png" src="https://qiita-image-store.s3.amazonaws.com/0/64677/1cb74d2f-ae58-1bc8-234a-e49783395536.png">

---
####LINE_CHANNEL_SECRET
Channel Secretをコピーし、LINE_CHANNEL_SECRETに保存します。
<img width="1276" alt="スクリーンショット 2018-03-16 21.47.27.png" src="https://qiita-image-store.s3.amazonaws.com/0/64677/62648b23-32fe-3b88-5191-83c0d87531f1.png">

---
####LINE_CHANNEL_TOKEN
アクセストークンを発行し、LINE_CHANNEL_TOKENを設定します。有効時間が出て来ますが、24hで大丈夫です。
<img width="1280" alt="スクリーンショット 2018-03-16 21.48.00.png" src="https://qiita-image-store.s3.amazonaws.com/0/64677/dfbae060-c096-4d21-18d7-1d3a1919f75c.png">

---
### Webhock　URL
「利用しない」から「利用する」に変更。
先ほど起動したweb serverのurl+'/callback'をWebhock URLに指定する。
`_heroku_app_name_.herokuapp.com/callback`

---
## おみくじbotを作る
---
### おみくじの機能

次のようにおみくじのプログラムを実装します。

```ruby:./src/line.rb
37 if event.message['text'] =~ /おみくじ/
38  message[:text] = 
     ["大吉", "中吉", "小吉", "凶", "大凶"].shuffle.first
39  end
```
---
#### おみくじプログラム解説1
if文で[正規表現](https://qiita.com/tossh/items/635aea9a529b9deb3038)でパターンマッチングをしています。

```ruby
if event.message['text'] =~ /おみくじ/
```
---
#### おみくじプログラム解説2
配列の中の順番をランダムに並び替え一番最初の要素を返します。

```ruby
["大吉", "中吉", "小吉", "凶", "大凶"].shuffle.first
```

---
以上でおみくじbotは終了です。