9
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

MDCAdvent Calendar 2021

Day 21

月次の電気料金を通知するLINE Botを作ってみた

Posted at

↓タイトルの通り、通知Botを作ってみました。(本記事ではHelloWorldまでです。)
Screenshot_20211219-201240.png

目次

[1.はじめに](#1. はじめに)
[2.要件整理](#2. 要件整理)
[3.開発手順(設計)](#3. 開発手順(設計))
[4.開発](#4. 開発)
[5.ここまでの振り返り](#5. ここまでの振り返り)

#1. はじめに

来年以降、同居人と電気料金を折半することになったのですが、
「毎月互いの電気料金を確認・計算するのがめんどくさい」
となり、今回自動化できないかと考えました。

#2. 要件整理

要件は以下の通り。

  • スマホで通知が確認できること
  • 月末の決まった日に通知が届くよう、スケジュール機能があること

また言語はPythonとします。
(業務ではJavaしか扱ってこなかったので、たまには別の言語と思い。)

#3. 開発手順(設計)

要件にある「通知」の部分はLINEを利用することにしました。
その結果、以下のような手順となります。

  1. LINE通知用のチャンネル作成
  2. コーディング→Herokuにデプロイ
  3. Herokuでスケジュール設定 ← 本記事では一旦ここまで
  4. 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が返却されたので問題無しと判断。
エビデンス.PNG

4-3. Herokuでスケジュール設定

Heroku Schedulerを使って定期実行の設定します。

・Heroku Scheduler を追加(無料枠でもクレジットカード登録が必要)
・定期実行し、LINEに通知が届くか確認

結果は冒頭に添付したLINEの画像の通りとなります。
ソースは以下の通りとなりましたが、
「これ、Flaskで書く必要ない」と、スケジュール設定したタイミングで気が付きました。
(それとPOSTで書くことも間違っている感じはあったのですが、突き進んでしまった。)
curlコマンドでスケジュール実行しているのですが、
そのまま関数実行で完結しそうなので、修正要です。
それと、Herokuのスケジュール機能が月次設定できそうになさそう、とここで気が付きました。
ソース.PNG

#5. ここまでの振り返り

  • できたこと

    • LINEMessageAPIの利用方法(設定手順)の理解
    • Python(Flask)の実装方法の理解← HelloWorldレベルでしたが。
    • Herokuでのプロジェクト作成手順と環境変数、設定ファイル周りの理解
  • 課題

    • 事前調査不足(Herokuのスケジュール設定が可能な間隔)
    • 設計誤り(コマンド実行ならFlaskを使う必要が無かった)
  • 思ったこと
    「公式ページに記載されているコードを理解する」
    これが一番苦手なのですが、時間をかけてでも理解すべきだと思いました。
    というのも、不要なコードは何なのかが分からなくなったり、
    公式とは違った処理をする際に実装できなかったりするためです。
    序盤、理解不足のまま進めてしまい、手戻りも発生してしまいました。

少し話は変わりますが、BootStrapを勉強した際にも同じことを思ったことがあります。
公式ページで配布している大量のjs, cssファイルのうち、どれが自分に必要なのか分からず、
中身を確認することに時間がとてもかかりました。その記憶が今回蘇ってきました。

電気料金取得は別記事でまとめます。

以上

9
1
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
9
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?