LINE Bot × Java(Spring Boot)構築手順

このエントリーはGMOアドマーケティング[Advent Calendar 2018](https://qiita.com/advent-calendar/2018/gmo-am)の21日目です。前日は@thomi40さんの[WebVRのフレームワーク「A-Frame」について](https://qiita.com/thomi40/items/9a005127a3b49fa60bc3)でした。

こんにちは[@zakisanbaiman](https://twitter.com/zakisanbaiman)です。
普段は広告配信アプリケーションのロジック部分（Java）を担当しています。

最近LINE botで遊んでたので、その構築方法を紹介します。

## 構築の流れ

1. LINE@アカウント作成
2. Messaging API
3. Herokuの準備
4. SDK準備
5. botのデプロイ
6. LINE DeveloperでWebhook設定

## 1. LINE@アカウント作成
まずLINE@アカウントを作成します
アカウントは２種類あるのですが、趣味用なら一般アカウントでOKです。
![スクリーンショット_2018-12-09_15_32_14.png](https://qiita-image-store.s3.amazonaws.com/0/88176/44601ebd-f3bf-5860-332f-be41ec120696.png "スクリーンショット_2018-12-09_15_32_14.png")

アカウント作成画面です。
業種は「個人」でいいでしょう。
![スクリーンショット 2018-12-09 15.40.24.png](https://qiita-image-store.s3.amazonaws.com/0/88176/c340f6ec-67ad-06d1-db18-94cbb629ac7a.png "スクリーンショット 2018-12-09 15.40.24.png")

アカウントが発行されると、LINE@MANAGERにログインできます。
ここでボットのアイコンやステータスメッセージなど設定できます。とはいえあんまりこの画面は使いません。
![スクリーンショット_2018-12-09_15_51_54.png](https://qiita-image-store.s3.amazonaws.com/0/88176/e2acb8cf-859f-89b0-bcc4-2013e9ff5cc0.png "スクリーンショット_2018-12-09_15_51_54.png")

今回はボットをMessaging APIを使うので、「LINE Developers」に移りましょう。￥
![スクリーンショット_2018-12-09_15_47_25.png](https://qiita-image-store.s3.amazonaws.com/0/88176/5bf87e7e-5fe9-f2c7-27f8-3b5a2a46eb64.png "スクリーンショット_2018-12-09_15_47_25.png")

以下が「LINE Developers」の画面です。主にこのサイトを使ってボットの設定をしていきます。

![スクリーンショット_2018-12-09_16_05_33.png](https://qiita-image-store.s3.amazonaws.com/0/88176/b72d69d2-77d2-b236-ca94-47209d8385ad.png)

2. Messaging API

「プロバイダー」を設定していきます。
ここでいうプロバイダーとは、botのサービス提供者のことです。

![Kobito.Uof4qL.png](https://qiita-image-store.s3.amazonaws.com/0/88176/002de1bf-0cb5-f048-e724-f4e27cf5b277.png "Kobito.Uof4qL.png")|
|:-:|

プロバイダーが作成されました。
続いてチャネルを作ります。
![ites01.png](https://qiita-image-store.s3.amazonaws.com/0/88176/9fb1759d-92a9-ce11-0261-30bef7c7350a.png "ites01.png")

プランは一旦「Developer Trial」で良いと思います。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/88176/d6330227-41f4-f5b7-8759-65e12a0fa497.png)

ここでアプリ名やアプリアイコンを設定します。
![Kobito.dv18ve.png](https://qiita-image-store.s3.amazonaws.com/0/88176/d9c49bfd-dd02-d20c-85f5-7e29a549df58.png "Kobito.dv18ve.png")

これでアプリはできました。
「チャンネル基本設定」の下の方に友達追加用のQRコードがあるので、友達追加してみましょう。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/88176/280f7ef4-a462-6127-0e3f-48ee5e3cf503.png)|
|:-:|

友達登録すると、初期設定であいさつだけしてくれます。

![Kobito.GM1Ugt.png](https://qiita-image-store.s3.amazonaws.com/0/88176/0f3c8800-d0ca-8a34-603f-568e086713b7.png "Kobito.GM1Ugt.png")|
|:-:|

ここまでOKなら、続いてボットのプログラムを作って行きましょう。

## 3. Herokuの準備
プログラムを乗せるためのサーバを用意します。
今回は無料で簡単に用意できるherokuというクラウドプラットフォームを使います。
![スクリーンショット 2018-12-18 10.59.50.png](https://qiita-image-store.s3.amazonaws.com/0/88176/5f8541e4-a085-fc8e-d15b-a63332dc13d1.png)

ここでは一旦Sign upだけ済ましときましょう。
herokuのセットアップはもうちょっと後ろでやります。
![スクリーンショット 2018-12-19 23.36.13.png](https://qiita-image-store.s3.amazonaws.com/0/88176/92bb21f1-f843-85f3-8330-3c0eb6dfedf2.png)

## 4. SDK準備
まずGitHubからLINEが用意しているLINE Bot開発用のSDKをクローンしてきましょう。
今回はJavaのものを紹介しますが、他にもPHP,Go,Perl,Ruby,Python,Node.jsなどがあります。
https://github.com/line/line-bot-sdk-java

ディレクトリ構造が複雑ですが、シンプルな返答をするだけなら
sample-spring-boot-echo内をいじるだけでOKです。
コードはそのままでもオウム返しの処理が動くので、ここではとくにJavaファイルは変更しません。

１つだと作成しないといけないファイルがあり、それがapplication.ymlです。
resourcesにapplication-template.ymlがあるので、それをコピーしてapplication.ymlを作りましょう。
（パス：line-bot-sdk-java/sample-spring-boot-echo/src/main/resources/application-template.yml）

application.ymlにはチャネルトークンとチャネルシークレットを設定します。
（どちらも「チャネル基本設定に載っています」）

```yaml:application.yml
line.bot:
  channel-token: '{チャネルトークン}'
  channel-secret: '{チャネルシークレット}'
  handler.path: /callback
```

## 5. botのデプロイ

line-bot-sdk-java/sample-spring-boot-echo/README.mdの中に「Deploy to Heroku」というボタンああるので、押してみましょう。

![Kobito.anDcdS.png](https://qiita-image-store.s3.amazonaws.com/0/88176/8c788296-1932-4027-5b09-83835dfe2a3d.png "Kobito.anDcdS.png")|
|:-:|

するとブラウザが勝手に開いてログイン画面が開くので、ログインします。
そしてアプリ名、チャネルシークレット、チャネルトークンを入力して「Deploy app」押下します。

![ites02_1.png](https://qiita-image-store.s3.amazonaws.com/0/88176/a5d809c7-aa94-5f6e-90f6-285859453909.png "ites02_1.png")|
|:-:|

デプロイに数分かかりますが、「Your app was successfully deployed.」と出たらデプロイ成功です。

![Kobito.rJWhav.png](https://qiita-image-store.s3.amazonaws.com/0/88176/2af24e5d-2839-6211-38cf-c38d1dad9ee3.png "Kobito.rJWhav.png")|
|:-:|

## 6.LINE DeveloperでWebhook設定

Webhook送信を「利用する」にします。

![Kobito.HemXll.png](https://qiita-image-store.s3.amazonaws.com/0/88176/20ac5586-24ca-329b-19d7-ebce5f70d722.png "Kobito.HemXll.png")|
|:-:|

Webhook URLに「https://${YOUR_HEROKU_APP_NAME}.herokuapp.com/callback」と設定します。
{YOUR_HEROKU_APP_NAME}は、herokuで設定したapp nameです。

![Kobito.umGEKq.png](https://qiita-image-store.s3.amazonaws.com/0/88176/6a4aa76d-df1c-eb4f-3f01-8a5bfa88a945.png "Kobito.umGEKq.png")|
|:-:|

自動応答メッセージは「利用しない」にします。
こう設定しないと、作成したプログラムが呼ばれません。

![Kobito.l06xUw.png](https://qiita-image-store.s3.amazonaws.com/0/88176/9cff4396-bcfc-7c84-5a02-5a5c85866e55.png "Kobito.l06xUw.png")|
|:-:|

↑上記設定をしてもうまく反映されていないときがあります。その際は画面更新を行うと反映されるので画面更新などしてみましょう。

ひとまずオウム返ししてくれるボットができました！

![Kobito.vD2nql.png](https://qiita-image-store.s3.amazonaws.com/0/88176/02b58221-316f-5c25-a272-0ad0af1f96c1.png "Kobito.vD2nql.png")|
|:-:|

## 参考サイト
https://qiita.com/skycat_me/items/9f27cbd9354515df744a	
	

## ハマったこと
* ../gradlew bootRunが通らない
application.ymlの「This is tempalte〜」の部分がコメントアウトされていないため

* gradle homeが分からない
```$ echo $GRADLE_HOME```
/usr/local/gradle

* @AllArgsConstructor(onConstructor = @__(@JsonCreator))
Error:(27, 38) java: シンボルを見つけられません
シンボル: クラス __
「Enable annotation processing」にチェックを入れると直った。（IntelliJの場合）
  
## 次回のAdvent Calendar 2018
明日は@yoshishinの【Rails6のactiontextを試してみる】のお話です。良いクリスマスを〜