Help us understand the problem. What is going on with this article?

Spring-bootとLINEMessagingAPIで電車遅延通知botを作る

はじめに

LINE Messaging API を利用して「電車遅延通知bot」を作成したときのメモです。
もうすでにやっている人が多く参考にできる部分が多いので集中すれば1日ぐらいで作れると思います。

利用したもの

  • LINE bot(LINE Messaging API)
  • spring-boot
  • gradle
  • heroku
  • bitbucket
  • eclipse

ソース

最終的なソースをこちらにも登録しています。
※ 追加コミットしているので、この記事時点のコミットハッシュに変更しました。
https://github.com/ken-araki/line_bot/tree/c10da134cde82553677e1358577b881466e4b9c5

やったこと

1. LINE Developer登録

LINE Bot × Java(Spring Boot)構築手順 を参考にしました。
とてもわかりやすく、ここを見れば問題なくチャンネル作成できると思います。
※ Heroku へのデプロイは別方法を利用しているので、1, 2までを参考にしています。

2. デプロイ設定

ソース管理はbitbucketを利用しています。
コミットしたら、Herokuへデプロイするように設定しました。

2-1. Heroku

Heroku の基本的な設定については触れません。
アプリを構築して、こちらを参考にして設定を追加します。

application.properties に合わせて
LINE_BOT_CHANNEL_SECRETLINE_BOT_CHANNEL_TOKENなどを設定してください。
※ こちらはLINEチャンネルの基本設定画面から取得できます。

2-2. bitbucket,Heroku 連携

Bitbucket Support Deploy to Heroku を参考に構築しました。
ブラウザから設定すればbitbucket-pipelines.yml が自動的にコミットされます。

ちなみに、「Repository variables」に設定する値は以下コマンドで取得できます。
HEROKU_APP_NAMEheroku apps
HEROKU_API_KEYheroku auth:token

これで、bitbucketへコミットしたらHerokuへ自動デプロイされるようになります。

3. アプリケーションを作成する

ソースはこちらにコミットされているので、簡単に作成手順をまとめておきます。
最終的には「電車遅延通知bot」ですが、その前に「オウム返しbot」と「ゴミ出しリマインダーbot」を作っています。
不要であれば読み飛ばしてください。
※ あとからこの記事を書いたため少しソースが異なる可能性があります。
 もし誤りがあれば指摘ください。

3-1. Springプロジェクト作成する

  • eclipseの「New Spring Stater Project」からプロジェクトを作成してください(以下設定)
    • Type: Gradle
    • Packaging: Jar
    • Java Version: 8
    • New Spring Stater Project Dependencies で全てチェックを外す
      • いったん全てチェックを外し、必要に応じてbuild.gradleをメンテしました

3-2. オウム返しbotを作成する

sample-spring-boot-echo を参考にオウム返しbotを作成します。

line-bot-sdkを利用するので、build.gradleのdependenciesに以下を追記します。
implementation 'com.linecorp.bot:line-bot-spring-boot:2.7.0'

MainClass(ぼくの場合は、LineApiApplication.java) を修正します。
EchoApplication.java をほぼコピーで問題ありません。

eclipseでコンパイルエラーがおきてしまうので、gradle eclipseタスクを実行してclassPathを通してください
./gradlew eclipseを実行してください。(コマンドラインでも、eclipseから実行どちらでも大丈夫です)

3-2. ゴミ出しリマインダーbotを作成する

line-bot-sdk-javaでごみ出しリマインダーを作る を参考にさせていただき、NoticeGarbageOutController.java を作成しました。

作成したbotを友達登録した人全員へ通知を送るためにbroadcastを利用しました。
細かい仕様は以下が参考になります。

3-2-5. ゴミ出しリマインダーbotを作成する(おまけ)

スケジュール設定しても、30分でHerokuが寝てしまうため対象の時間になっても通知されませんでした。
そのため、KeepRunningController.java で10分ごとに自分にアクセスし続ける仕組みを作ってみました。

heroku schedulerがクレカ登録が必要だったため作ってみましたが、クレカ登録なしでは無料枠が550hだったので結局ダメでした。(過去750hだった記憶があったのですが。。。)

3-3. 電車遅延通知botを作る

ようやく本題です。
ポイントは「毎日8:05に通知するスケジュール設定」と「外部APIから情報を取得する」のため、今までのステップでやったことを参考に、NoticeTrainDelayController.java を作成しました。

電車遅延情報は、鉄道遅延情報のjson を利用させていただきました。

さいごに

結構、簡単にここまで作れました。
1日1時間で1週間半ぐらいだったので、集中すれば1日ぐらいでできそうな気がします。

ちょいちょいイケてないところを残しているのでリファクタをしようと思います。
それが終われば、次はこんなのを作ろうと思っています。

  • リマインダーを自分で設定できるbot
  • 電車遅延APIを自分で作成する

追記

続き?を投稿したので、もし興味があればこちらも見てください。
Spring-boot+Heroku+PostgreSQL+Flywayでアプリ作成してみた

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away