##背景
LINE BOT を作成しようと思い立ち、まずは練習のため、LINE公式が用意しているLINE BOTのJavaサンプルコード(line-bot-sdk-java/sample-spring-boot-kitchensink)に少し手を加えて、herokuにデプロイしようと試みました。
その際に発生した問題と解決方法を以下に記録しておきます。
以下の記事と公式サイトが非常に分かりやすく書かれていました。
こちらに書かれている内容に沿って作業を行いました。
LINE Bot × Java(Spring Boot)構築手順
Kitchensinkサンプルボットアプリをデプロイする
##環境
- Windows 10
- Eclipse 4.15.0
- Java 10
- Git
- heroku, heroku CLI
##発生したトラブル
###1.サンプルコードに手を加えた部分が反映されない
現象
sample-spring-boot-kitchensinkの一部に手を加え、herokuにデプロイしても、手を加えた部分が反映されない。
原因&解決方法
デプロイ方法の誤り。
こちらを参考に、README.mdの中の【Deploy to Heroku】ボタン押下でデプロイができると考えていたが、この方法は、LINE公式のGithubリポジトリの中身をデプロイする方法であり、ローカルに置いている資材をデプロイする方法ではなかった。
こちらの5,6,7の手順により、ローカルに落とした資材を正しくデプロイできた。
###2.LINEBOTが応答しない
現象
表題の通り。
原因&解決方法
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
line.bot:
channel-token: 3j5Y...(省略)
channel-secret: a08...(省略)
handler.path: /callback
application.ymlを修正する際は、以下に注意する必要がある。
- This is ~の2行を削除する
- チャネルトークン、チャネルシークレットを ' '(クオーテーション)や { }(括弧)で囲まない
- 半角スペースによるインデントのつけ方に注意する
###3.ERROR: Failed to run Gradle!
現象
以下のメッセージが出現し、デプロイに失敗する。
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
原因&解決方法
.gitignoreを修正する。
# Package Files #
*.jar
*.war
*.ear
.gitignoreに*.jar が記載されているため、デプロイされるべき
line-bot-sdk-java\gradle\wrappergradle-wrapper.jar
がデプロイされないため生じる。
*.jarをコメントアウトすれば解決する。
###4.checkstyle error
現象
以下のメッセージが出現し、デプロイに失敗する。
> 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]
原因&解決方法
line-bot-sdk-java\config\checkstyle\checkstyle.xmlの該当箇所をコメントアウトする。
<!--<module name="FileTabCharacter">
<property name="eachLine" value="true" />
</module>-->
...
<!--<module name="AvoidStarImport" />-->
...
<!--<module name="ImportOrder">
本来は、チェックスタイル規約違反にならないコードの書き方を行うべきだが、
今回は以下の理由により、チェックスタイルのコメントアウトで対応した。
- あくまで今回の目的は、LINEBOTの概観を掴む練習だということ。
- インデントにタブが使えないという制約は地獄であったこと。
###5・SpotBugs rule violations
現象
以下のメッセージが出現し、デプロイに失敗する。
> 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
原因&解決方法
build.gradleのspotbugsプラグイン部分をコメントアウト。
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の概観を掴む練習が目的のため、コメントアウトで対応した。
##【参考】デプロイに辿り着くまでの準備段階で
参照したサイト・記事
###LINE Developers アカウントの作成
[Messaging APIを利用するには]
(https://developers.line.biz/ja/docs/messaging-api/getting-started/)
LINEのBot開発 超入門(前編) ゼロから応答ができるまで
###herokuアカウントの作成&heroku CLI インストール
Heroku利用の準備手順 (1)
Heroku入門(Webアプリの作成とデプロイ)
Herokuの基礎知識
Heroku初心者がHello, Herokuをしてみる
過去の記事で【heroku-toolbelt】となっている個所は【heroku CLI】に読み替えた。