LINEBOTのJavaサンプルプログラム（line-bot-sdk-java）のデプロイにて発生したトラブル

##背景
LINE BOT を作成しようと思い立ち、まずは練習のため、[LINE公式が用意しているLINE BOTのJavaサンプルコード](https://github.com/line/line-bot-sdk-java)(line-bot-sdk-java/sample-spring-boot-kitchensink)に少し手を加えて、herokuにデプロイしようと試みました。
その際に発生した問題と解決方法を以下に記録しておきます。

以下の記事と公式サイトが非常に分かりやすく書かれていました。
こちらに書かれている内容に沿って作業を行いました。
[LINE Bot × Java(Spring Boot)構築手順](https://qiita.com/zakisanbaiman/items/e87c4834b28c6d964e54)
[Kitchensinkサンプルボットアプリをデプロイする](https://developers.line.biz/ja/docs/messaging-api/building-sample-bot-with-heroku/#kitchensink%E3%82%B5%E3%83%B3%E3%83%97%E3%83%AB%E3%83%9C%E3%83%83%E3%83%88%E3%82%A2%E3%83%97%E3%83%AA%E3%82%92%E3%83%87%E3%83%97%E3%83%AD%E3%82%A4%E3%81%99%E3%82%8B)

##環境
- Windows 10
- Eclipse 4.15.0
- Java 10
- Git
- heroku, heroku CLI

##発生したトラブル

###１．サンプルコードに手を加えた部分が反映されない
<b>現象</b>
sample-spring-boot-kitchensinkの一部に手を加え、herokuにデプロイしても、手を加えた部分が反映されない。

<b>原因＆解決方法</b>
デプロイ方法の誤り。

[こちら](https://qiita.com/zakisanbaiman/items/e87c4834b28c6d964e54#5-bot%E3%81%AE%E3%83%87%E3%83%97%E3%83%AD%E3%82%A4)を参考に、README.mdの中の【Deploy to Heroku】ボタン押下でデプロイができると考えていたが、この方法は、LINE公式のGithubリポジトリの中身をデプロイする方法であり、ローカルに置いている資材をデプロイする方法ではなかった。

[こちら](https://developers.line.biz/ja/docs/messaging-api/building-sample-bot-with-heroku/#kitchensink%E3%82%B5%E3%83%B3%E3%83%97%E3%83%AB%E3%83%9C%E3%83%83%E3%83%88%E3%82%A2%E3%83%97%E3%83%AA%E3%82%92%E3%83%87%E3%83%97%E3%83%AD%E3%82%A4%E3%81%99%E3%82%8B)の5,6,7の手順により、ローカルに落とした資材を正しくデプロイできた。

###２．LINEBOTが応答しない
<b>現象</b>
表題の通り。

<b>原因＆解決方法</b>
application.ymlの修正ミス。

```application.yml（修正前）
This is a template for the configuration file.
Make a copy called `application.yml` and change the values below.

line.bot:
  channel-token: '{3j5Y...(省略)}'
  channel-secret: '{a08...(省略)}'
  handler.path: /callback
```

```application.yml（修正後）
line.bot:
  channel-token: 3j5Y...(省略)
  channel-secret: a08...(省略)
  handler.path: /callback
```
application.ymlを修正する際は、以下に注意する必要がある。

- This is ~の2行を削除する
- チャネルトークン、チャネルシークレットを ' '（クオーテーション）や { }（括弧）で囲まない
- 半角スペースによるインデントのつけ方に注意する

###３．ERROR: Failed to run Gradle!
<b>現象</b>
以下のメッセージが出現し、デプロイに失敗する。

```
       Error: Could not find or load main class org.gradle.wrapper.GradleWrapperMain
 !     ERROR: Failed to run Gradle!
       It looks like you don't have a gradle-wrapper.jar file checked into your Git repo.
       Heroku needs this JAR file in order to run Gradle.  Our Dev Center article on preparing
       a Gradle application for Heroku describes how to fix this:
       https://devcenter.heroku.com/articles/deploying-gradle-apps-on-heroku
       
       If you're stilling having trouble, please submit a ticket so we can help:
       https://help.heroku.com
       
       Thanks,
       Heroku
 !     Push rejected, failed to compile Gradle app.
 !     Push failed
```

<b>原因＆解決方法</b>
.gitignoreを修正する。


>
\# Package Files #
*.jar
*.war
*.ear

.gitignoreに<b>*.jar</b> が記載されているため、デプロイされるべき
line-bot-sdk-java\gradle\wrappergradle-wrapper.jar
がデプロイされないため生じる。
*.jarをコメントアウトすれば解決する。

###４．checkstyle error
<b>現象</b>
以下のメッセージが出現し、デプロイに失敗する。

```
       > Task :sample-spring-boot-kitchensink:checkstyleMain FAILED
       [ant:checkstyle] [ERROR] /tmp/build_45d7121acb87ff2b0f8f2860dd935073/sample-spring-boot-kitchensink/src/main/java/com/example/bot/spring/KitchenSinkController.java:19: Using the '.*' form of import should be avoided - java.util.Collections.*. [AvoidStarImport]
       [ant:checkstyle] [ERROR] /tmp/build_45d7121acb87ff2b0f8f2860dd935073/sample-spring-boot-kitchensink/src/main/java/com/example/bot/spring/KitchenSinkController.java:54: 'com.linecorp.bot.client.LineBlobClient' should be separated from previous imports. [ImportOrder]
       [ant:checkstyle] [ERROR] /tmp/build_45d7121acb87ff2b0f8f2860dd935073/sample-spring-boot-kitchensink/src/main/java/com/example/bot/spring/KitchenSinkController.java:114:1: Line contains a tab character. [FileTabCharacter]
```

<b>原因＆解決方法</b>
line-bot-sdk-java\config\checkstyle\checkstyle.xmlの該当箇所をコメントアウトする。

```checkstyle.xml
<!--<module name="FileTabCharacter">
    <property name="eachLine" value="true" />
  </module>-->
...
<!--<module name="AvoidStarImport" />-->
...
<!--<module name="ImportOrder">
```

本来は、チェックスタイル規約違反にならないコードの書き方を行うべきだが、
今回は以下の理由により、チェックスタイルのコメントアウトで対応した。

- あくまで今回の目的は、LINEBOTの概観を掴む練習だということ。
- インデントにタブが使えないという制約は地獄であったこと。

###５・SpotBugs rule violations
<b>現象</b>
以下のメッセージが出現し、デプロイに失敗する。

       > Task :sample-spring-boot-kitchensink:spotbugsMain FAILED
       
       FAILURE: Build failed with an exception.
       
       * What went wrong:
       Execution failed for task ':sample-spring-boot-kitchensink:spotbugsMain'.
       > SpotBugs rule violations were found. See the report at: file:///tmp/build_cf4800e9ad5acc311f2e9019a8a14b1e/sample-spring-boot-kitchensink/build/reports/spotbugs/main.html

<b>原因＆解決方法</b>
build.gradleのspotbugsプラグイン部分をコメントアウト。

```build.gradle
subprojects {
//  apply plugin: 'com.github.spotbugs'
    apply plugin: 'java-library'
    apply plugin: 'checkstyle'
    apply plugin: 'io.franzbecker.gradle-lombok'
    apply plugin: 'io.spring.dependency-management'
```

本来は、ルール違反にならないコードの書き方を行うべきだが、
あくまで今回の目的は、LINEBOTの概観を掴む練習が目的のため、コメントアウトで対応した。

##【参考】デプロイに辿り着くまでの準備段階で<br>参照したサイト・記事
###LINE Developers アカウントの作成
[Messaging APIを利用するには]
(https://developers.line.biz/ja/docs/messaging-api/getting-started/)
[LINEのBot開発 超入門（前編） ゼロから応答ができるまで](https://qiita.com/nkjm/items/38808bbc97d6927837cd)

###herokuアカウントの作成＆heroku CLI インストール
[Heroku利用の準備手順 (1)](https://qiita.com/Daiji-Nagashima/items/755ee75ebc72281a6a82)
[Heroku入門(Webアプリの作成とデプロイ)](https://webbibouroku.com/Blog/Article/heroku-getting-started)
[Herokuの基礎知識](https://qiita.com/daisukeoda/items/42e802c498ca8a78b8f2)
[Heroku初心者がHello, Herokuをしてみる](https://qiita.com/arashida/items/b2f2e01259238235e187)
過去の記事で【heroku-toolbelt】となっている個所は【heroku CLI】に読み替えた。