6
4

More than 3 years have passed since last update.

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

Last updated at Posted at 2020-04-12

背景

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の修正ミス。

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行を削除する
  • チャネルトークン、チャネルシークレットを ' '(クオーテーション)や { }(括弧)で囲まない
  • 半角スペースによるインデントのつけ方に注意する

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の該当箇所をコメントアウトする。

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プラグイン部分をコメントアウト。

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の概観を掴む練習が目的のため、コメントアウトで対応した。

【参考】デプロイに辿り着くまでの準備段階で
参照したサイト・記事

LINE Developers アカウントの作成

Messaging APIを利用するには
LINEのBot開発 超入門(前編) ゼロから応答ができるまで

herokuアカウントの作成&heroku CLI インストール

Heroku利用の準備手順 (1)
Heroku入門(Webアプリの作成とデプロイ)
Herokuの基礎知識
Heroku初心者がHello, Herokuをしてみる
過去の記事で【heroku-toolbelt】となっている個所は【heroku CLI】に読み替えた。

6
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
4