メインコンテンツへスキップ
見出し画像

非エンジニアが保育園申請通知LINE Botを作った話

    タイトルどおり、あればいいなぁ~なLINE Botを作成した際の覚書です。かかった時間は12時間くらいでした(dockerダウンロード時間除く)。
    ちなみにパソコンはWindows11、エディタ?はVSCode、コマンド打つのはgitbashやコマンドプロンプトを使っています。

    はじめに作ったものを紹介

    ニンミル という保育園申請日前に通知してくれるLINE Botです。LINEで友達になり、保育園申請日を登録すれば4月入園は7日前、年度途中入園は3日前にLINEでメッセージ通知してくれます。

    画像
    通知メッセージ

    こどものニックネームと誕生日もしくは出産予定日を登録しておくと産休育休予定なんかも教えてくれます。

    画像
    産休・育休・出生時育休の期間がわかる

    下のリンクから友だち追加できます

    なんで作ったのか

    2025年4月1日から育休延長の際に行政側のスキームが少々変わり、とにもかくにも「保育所等の利用申込したことがわかるもの(申込書の写しや市区町村が発行する入所保留通知書・入所不承諾通知書など)」が必須となりました。
    こどもが1歳になったジャストで保育園入園→仕事復帰ってなかなか難しくて、働いている方は0歳代で4月入園するか、1歳代で4月入園するっていうのが多いパターンだと思います。0歳代のときは早めに育休を終わることになりますが1歳代だと4月入園まで育休延長してから入園になる。この時保育園申請を忘れてしまって育休給付金なしで育休延長する母親が一定数いるということを知ったのでそういったことを解決したいなあと思い作りました。

    手順

    1.本の通りに進める

    「LINE Bot 作成」や「ラインボット 作成」で検索すると作り方もそれなりにヒットするのですが、今回は自分用だけではなくて公開して使えるものにしたいと思ったのでAWSのデプロイ方法まで記載してある本をはじめに買いました。

    演習問題2、演習問題3、演習問題4はやらないで本の通りに進めるところで3時間くらいが経過(実際はDockerインストールに時間が+3時間くらいかかりました)。ちなみにDockerについて今もよくわからないのですが仮想環境をゲームソフトとして読み込むゲーム機本体だと思っています。

    参考にさせていただいたQiitaの記事

    本を読んで一通りしてみて、わかったことは、ローカル環境(自分のパソコンがサーバーとして動かしているときだけLINE Botが動く環境)とAWS環境(AmazonWebServiceの諸々を使っているので自分のパソコン関係なくLINE Botが動く環境)でのアーキテクチャです。

    画像
    ローカル環境(突然の手書き)
    画像
    AWS環境

    2.オウム返しBotを作る

    LINEBOT作成に最低限必要なものだけを揃えてオウム返しBotを作ることにします。オウム返しBotとは、LINEでメッセージを送るとそのメッセージをそのまま返すものです。
    検索するとGASを使うものなど色々出てきますが、ここでは本に書いてある仕組み(ngrok、Node.jsなど)を使いたかったのでそれらを使ったオウム返しBot開発チュートリアルを参考にしました(めちゃめちゃわかりやすい)。

    上の記事にも書いてあるのですが、最低限必要なものって下記だと思います。

    package.json(node.jsで作られる)
    webhook.js(メッセージからイベントを取り出す)
    〇〇.js(イベントを定義する)
    ×××.js(イベント内容を記載する)
    .env(環境変数)
    db.js(データベースのためのJS)

    あとはexpressフレームワークとline-bot-sdkなんかが必要です。

    3.通知バッチ以外の部分を作る

    まずは通知バッチ以外の部分を作りました。
    例:こういうメッセージが来たらこう返す など。

    リッチメニューを用意してリッチメニューをタップすることで特定のメッセージが送信されます。そのメッセージによって選択させたり、選んでもらったり、ニックネームや誕生日を入力してもらうっていうシナリオを作って実装していきます。

    画像
    特定のメッセージへの対応をひたすら書いていく

    4.通知バッチを作る

    chatGPTの力を使いました。ファイル構成と使用するテーブル構成を伝えてこういったものを使いたいというとその通知のjsを書いてくれました。いや本当すごい。ちなみに無料版使っています。
    もちろんそのまま一発で上手く行くことは無くて何度かテーブルの破壊と創造を繰り返し、コードも諸所修正しつつで進めました。

    5.ローカル環境で通知テスト

    まずはローカル環境で通知テスト。👇のようなコマンドを打ちます(このコマンドもchatGPTに教えてもらった)。

    node ファイル場所/通知.js

    Node.jsやngrokって今回初めて使ったのですがすんごいサービスですね。なにがすごいのかは説明できません。

    6.AWSにデプロイ

    通知バッチをAWS Lambda用に書き換えて(この書き換えもchatGPTで一瞬)、serverless.yamlなどを本の真似してデプロイ。デプロイ成功したらURLが出てくるのでこれをLINE MessageAPIのwebhookURLに入れて完成です!

    ハマったところ

    • Docker Desktopのインストール時間かかる

    • AWS S3バケットの名前は大文字入れない&_も使えない

    • AWSへのデプロイに失敗してちょっと時間経ってから再デプロイしないとスタックがUPDATE_ROLLBACK_FAILEDになっていてエラーになる(CloudFormationの画面を見てもそのスタックは表示されない)

    ・リッチメニューの画像送信が上手く行かない

    curlコマンドでリッチメニュー画像の送信が上手く行かず……。公式ドキュメントを見に行くとエンドポイントのドメイン名が違うと書いてあり。

    画像
    2時間くらいリッチメニューIDの創造と破壊を繰り返してた

    本もchatGPTもこれが反映されておらず。最近なのかなあ。2時間くらいこれで消費しました。でも公式のリファレンスがとってもわかりやすいことに気づけたので結果良かったです。

    コストについて

    想定ユーザーは2000人
    1日一人2回読み
    1週間に1回書き込み
    バッチは1件/1日
    だと仮定すると

    画像
    chatGPTのdynamoDB試算

    これに他AWSで使用しているサービスのコストがかかってきます。今みたらログを残しているcloudWatchが一番コスト発生していた(15円くらい……)。
    あと、費用が発生すると言えばLINE

    画像
    BOT側からのメッセージが課金対象です

    応答メッセージはなんぼでも無料ですが、BOTからのメッセージ(今回のBOTで言うと保育園申請の通知メッセージ)が課金対象となってきます。もし利用される方が200名より増えたらライトプランにアップグレードかなあと思います。
    AWSのCloudWatchはログを残すもの見直してきます。
    追記
    アラームが10個以上あったのでだった。不要なアラームを削除しました。

    LINE Bot「ニンミル」よろしくね!

    というわけで、非エンジニアが土曜日と平日深夜に作業を進めて作ったBot。保育園申請をうっかり忘れて辛い思いをする方が減りますように。


    あなたへのおすすめ