↓タイトルの通り、通知Botを作ってみました。(本記事ではHelloWorldまでです。)
目次
[1.はじめに](#1. はじめに)
[2.要件整理](#2. 要件整理)
[3.開発手順(設計)](#3. 開発手順(設計))
[4.開発](#4. 開発)
[5.ここまでの振り返り](#5. ここまでの振り返り)
#1. はじめに
来年以降、同居人と電気料金を折半することになったのですが、
「毎月互いの電気料金を確認・計算するのがめんどくさい」
となり、今回自動化できないかと考えました。
#2. 要件整理
要件は以下の通り。
- スマホで通知が確認できること
- 月末の決まった日に通知が届くよう、スケジュール機能があること
また言語はPythonとします。
(業務ではJavaしか扱ってこなかったので、たまには別の言語と思い。)
#3. 開発手順(設計)
要件にある「通知」の部分はLINEを利用することにしました。
その結果、以下のような手順となります。
- LINE通知用のチャンネル作成
- コーディング→Herokuにデプロイ
- Herokuでスケジュール設定 ← 本記事では一旦ここまで
- MoneyForwardのAPI経由で電気料金を取得し、計算結果を返すよう実装
電気料金の取得処理は検討中。MoneyForwardが公開しているAPIで取ってこれるのでは?と思っています。
(無理なら東京ガス or MoneyForwardのマイページからスクレイピング取得?)
#4. 開発
4-1. LINE通知用のチャンネル作成
基本的にLINEの公式ページの通り作業すれば解決するので、詳細は割愛いたします。
- 公式ページ記載の通り、LINE Developersコンソール上でチャンネルを作成。
- Pythonで実装(まずはHelloWorld)
実装についてはLINE公式ページで
「Herokuにデプロイする用のソースはGitHubにあるソースそのまま使えるヨ」
とありましたので、動作確認だけしたい方は楽かもしれません。
4-2. コーディング→Herokuにデプロイ
こちらも基本的にはLINEの公式ページの通りに作業となります。
ソースコードはGitHub上のサンプルを利用していないため、Herokuのプロジェクト作成手順のみ異なりました。
⇒ Herokuに入ってCreateAppってボタン押すだけなので詳細は割愛。
手順は以下の通り。
- Herokuのアカウント作成(既に作っていたので、割愛)
- Heroku上でプロジェクト作成し、LINEチャンネルのトークン設定
- LINE上でWebhook URLの設定
- 動作確認
■詰まったところ
- Herokuにpush時に以下のエラーが発生。← 言語指定しないとだめみたい
No default language could be detected for this app.
- 「requirements.txt」のファイルが無いため、Pythonのプロジェクトと認識してもらえずデプロイエラー
App not compatible with buildpack: https://buildpack-registry.s3.amazonaws.com/buildpacks/heroku/python.tgz
- 今度はアプリが起動していないとエラーが発生。「Procfile」も必要とのこと。
code=H14 desc="No web processes running"
上記3件については、ググればすぐ解決方法が見つかったため、ここでの説明は省略。
(Heroku側が参照するファイルとして用意しなければいけないものらしい。)
LINE Developers コンソール上で動作検証を実施し、OKが返却されたので問題無しと判断。
4-3. Herokuでスケジュール設定
Heroku Schedulerを使って定期実行の設定します。
・Heroku Scheduler を追加(無料枠でもクレジットカード登録が必要)
・定期実行し、LINEに通知が届くか確認
結果は冒頭に添付したLINEの画像の通りとなります。
ソースは以下の通りとなりましたが、
「これ、Flaskで書く必要ない」と、スケジュール設定したタイミングで気が付きました。
(それとPOSTで書くことも間違っている感じはあったのですが、突き進んでしまった。)
curlコマンドでスケジュール実行しているのですが、
そのまま関数実行で完結しそうなので、修正要です。
それと、Herokuのスケジュール機能が月次設定できそうになさそう、とここで気が付きました。
#5. ここまでの振り返り
-
できたこと
- LINEMessageAPIの利用方法(設定手順)の理解
- Python(Flask)の実装方法の理解← HelloWorldレベルでしたが。
- Herokuでのプロジェクト作成手順と環境変数、設定ファイル周りの理解
-
課題
- 事前調査不足(Herokuのスケジュール設定が可能な間隔)
- 設計誤り(コマンド実行ならFlaskを使う必要が無かった)
-
思ったこと
「公式ページに記載されているコードを理解する」
これが一番苦手なのですが、時間をかけてでも理解すべきだと思いました。
というのも、不要なコードは何なのかが分からなくなったり、
公式とは違った処理をする際に実装できなかったりするためです。
序盤、理解不足のまま進めてしまい、手戻りも発生してしまいました。
少し話は変わりますが、BootStrapを勉強した際にも同じことを思ったことがあります。
公式ページで配布している大量のjs, cssファイルのうち、どれが自分に必要なのか分からず、
中身を確認することに時間がとてもかかりました。その記憶が今回蘇ってきました。
電気料金取得は別記事でまとめます。
以上