はじめに
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_SECRET
、LINE_BOT_CHANNEL_TOKEN
などを設定してください。
※ こちらはLINEチャンネルの基本設定画面から取得できます。
2-2. bitbucket,Heroku 連携
Bitbucket Support Deploy to Heroku を参考に構築しました。
ブラウザから設定すればbitbucket-pipelines.yml
が自動的にコミットされます。
ちなみに、「Repository variables」に設定する値は以下コマンドで取得できます。
HEROKU_APP_NAME
は heroku apps
HEROKU_API_KEY
は heroku 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でアプリ作成してみた