我が家では買い物リストや予定の共有がずっと曖昧なままでした。口頭で「牛乳買ってきて」と言っても忘れられる、ゴミ出しの日をどちらが出すかで毎週もめる。そんな小さなストレスを、家族全員が使っているLINEの上で解決できないかと考えて、家族専用のLINE Botを個人開発してみました。その記録をまとめます。
何を解決したかったか
最初に紙に書き出した「家庭の課題」はこの3つでした。
- 買い物リストの共有(誰かがメモしても他の人が見られない)
- ゴミ出しの通知(曜日ごとの種類を忘れる)
- 予定のリマインド(子どもの行事や提出物)
わざわざ専用アプリを入れてもらうのは、家族には続きません。すでに毎日開いているLINEに機能を足すのが一番現実的だと判断しました。
LINE Messaging APIの仕組み
LINEのBotは、Messaging APIという仕組みで作ります。ざっくり言うと、ユーザーがトークにメッセージを送ると、LINEのサーバーがこちらのサーバーに「こういうメッセージが来ました」と通知(Webフック)を投げてくれます。こちらはその内容を受け取って処理し、返信用のAPIを叩いてメッセージを返す、という往復です。
家族グループにBotを招待しておけば、グループ内の発言も受け取れます。「牛乳」と送ればリストに追加、「リスト」と送れば一覧を返す、といった具合に、決まったキーワードに反応させる形にしました。定時通知はサーバー側のスケジュール実行(cron)で、朝にゴミの種類を投げるようにしています。
普段と違うNode.jsで作った話
普段の業務はPHP、主にLaravelです。ただLINE Bot界隈はNode.jsのサンプルや情報が豊富だったので、今回はあえてNode.jsで書いてみました。
言語が変わっても、Webフックを受けてJSONを処理して返す、という骨組みは同じです。むしろ非同期処理の書き方(async/await)や、リクエストの署名検証の作法に慣れるのに時間がかかりました。PHPの感覚でつい同期的に書こうとして、返信が二重に飛ぶといった初歩的なミスもやりました。
データの保存は、最初はテキストファイルで済ませ、後から軽量なデータベースに移しました。個人開発は「まず動かす」を優先して正解だったと思います。
詰まった点
一番詰まったのは署名検証です。LINEからのリクエストが本物かを確認する処理で、ここを雑にすると誰でもBotを叩けてしまいます。ヘッダーの署名とリクエスト本文を突き合わせる部分で、本文をパースする前の生データが必要になる点に気づかず、しばらく検証が通りませんでした。
もう一つは、ローカルで動かしたBotをLINEから見えるようにする部分です。開発中は自宅PCをトンネリングツールで一時的に外部公開して試し、動作が固まってからサーバーに載せました。
AI支援で開発が速くなった
今回はコーディング支援AIを積極的に使いました。慣れないNode.jsの書き方や、署名検証のような定型処理は、たたき台を出してもらってから自分で直す形にすると圧倒的に速いです。エラーメッセージを貼って原因を相談できるのも、一人で作る個人開発では心強い相棒でした。
もちろん、鵜呑みは禁物です。特にセキュリティ周りは、出てきたコードの意味を自分で理解してから採用するようにしました。
まとめ
家族用のLINE Botは、技術的には決して大掛かりなものではありません。それでも、毎朝ゴミの通知が届き、買い物リストが自然に共有されるようになっただけで、家庭の小さな摩擦がずいぶん減りました。普段と違う言語に触れる練習にもなり、個人開発の題材としてもちょうど良かったです。身近な不便を自分の手で解決できるのは、やはり作る側の醍醐味だと感じました。


コメント