#家族に怒られたくなくてLINEボットを作った話
動機はぶっちゃけ怒られたくないから
連絡を忘れて家族に怒られたくない。それが正直な動機です。
「今日ごはんどうするの?」「お風呂洗った?」「何時帰る?」。家族間の日常的な連絡は地味に多く、忘れると容赦なく怒られます。
もちろんそれだけでなく、家族間の情報共有にかかる「摩擦」を少しでも減らしたいという思いもありました。怒られたくない気持ちと、家族を助けたい気持ちが半々。いや、正直に言うと6:4で「怒られたくない」が勝っています。
コンセプトは極めてシンプル、家族LINEを荒らさず、日常の連絡をサポートするです。
なぜLINEボットにしたか(自作アプリからのピボット)
実はもともと、「Irori」という家族間の情報共有アプリをゼロから開発し、実際に家族4人に使ってもらっていました。
しかし、あるとき決定的な事実に行き当たりました。**「人は、わざわざ新しいアプリを開かない」**という現実です。
どれほど開発者が頭を捻り、高機能なものを作っても、ユーザーにとって使いにくければ無価値です。家族からのフィードバックも「LINEで見たい」という至極真っ当なものでした。そりゃそうだ、毎日使うアプリはすでに決まっているのだから。
新しいアプリへ移行させたり、そこにわざわざ情報を入力させたりする「心理的コスト」をどうすればゼロにできるか。
熟考した結果、ユーザーがすでに毎日開いているインフラ(LINE)に機能を統合するのが絶対的にイイなという結論に至りました。
こうして、Iroriの設計思想を引き継いだLINEボットへのピボット(方針転換)を決断しました。
徹底的にこだわった「ユーザー目線」とUX設計
いざ開発が始まると、「とことん使いやすい設計にしてやろう」とエンジニアとしての火がつきました。
私はプロダクトを作る際、どうしても「ユーザー目線でのUIや動線」を最優先に考えてしまいます。自分が常日頃から抱いている「ここがこうならもっと使いやすいのに」という不満を解消すべく、今回は以下の仕様に徹底的にこだわりました。
-
個別チャット入力・グループ通知の分離
家族グループに直接コマンドを打つと、日常の会話がログで流れてしまいます。「家族LINEを荒らさない」という大前提を守るため、操作はBotとの個別チャットで完結させ、結果だけをグループへ通知する設計にしました。さらに @All メンションを付与して送信することで、他の雑談に埋もれない工夫も施しています。 -
心理的ハードルを下げるボタンUI
文字入力の手間を一切省くため、「ごはんできました!」「お風呂洗った」などの操作はすべてリッチメニューのボタンタップのみで完結させました。ユーザーが操作に迷わないよう、メニューの数も厳選して4つに絞り込んでいます。 -
セキュアで簡単なグループ紐付け
複数グループが同じBotを使ってもデータが混同しないよう、DBの全テーブルに group_id を持たせて完全に分離しました。ユーザー側の動線は、グループ招待時に発行される6桁のコードを個別チャットに入力するだけ。極めてシンプルかつセキュアに連携できます。
実質3日の爆速開発を支えたAIとの協業
開発に着手したのは4月7日の夜。そこから実質3日ほどで動くものを完成させました。
ここだけの話、コードはAIをフル活用して生成しています。
ただし、自分はプロダクトマネージャー兼デザイナー、AIは実装担当のエンジニアという明確な役割分担を徹底しました。
要件定義と仕様の決定
UIと動線の設計(心理的コストの排除)
AIとの議論と意思決定
バグの根本原因の特定と改善判断
インフラの選定と移行
これらはすべて自分の責任で担っています。「こういう機能が欲しい」「ここが使いにくいからこう改善しよう」とAIと議論しながら設計を研ぎ澄まし、実際のコーディングはAIに任せる。このサイクルを高速で回すことで、圧倒的なスピード開発を実現しました。
詰まったこと3選
開発中に直面した壁と、その解決策です。
① Renderのポート問題
最初はRenderでホスティングしていましたが、デプロイしてもポートが認識されずサービスが起動しない問題が発生。start command の変更など色々試しましたが解決せず、最終的にインフラをRailwayに移行することで一発解決しました。固執せずに環境を変えるという判断が正解でした。
② グループ別のデータが混ざるバグ
リリース直前に気づいた致命的なバグです。当初の設計では、他の家族がゴミの設定を変えると、うちの家族の通知も変わってしまう状態でした。前述の通り、全テーブルに group_id を追加してデータを完全に分離する改修を即座に行いました。
③ LINEの月1000件の無料枠の壁
テスト中に上限に達し、通知が全部止まりました。
調べてわかったのですが、LINEのAPIにはBotから能動的に送る push message と、ユーザーの操作への返信である reply message があり、無料枠を消費するのは前者のみです。この仕組みを理解し、メニュー操作の返信は無制限の reply message を使い、グループへの一斉通知のみ push message を使うよう設計を見直しました。
技術構成
シンプルな構成で、無駄に複雑なことはしていません。
- 言語:Python 3.13
- フレームワーク:Flask
- データベース:PostgreSQL
- ホスティング:Railway
- API:LINE Messaging API
今の状態と今後
現在、家族4人で運用中です。お風呂通知やゴミの日リマインダーが実際に稼働しています。
実際に使ってもらったところ、**「シンプルでいいね」「これなら毎日使える」**という言葉をもらいました。「わざわざアプリを開くのが面倒」と言われていた頃から比べると、LINEに移植した判断は完全に正解でした。
怒られなくなったかどうかはまだわかりませんが、少なくとも「連絡共有のハードル」は確実に下がりました。これからも「技術」ありきではなく、「身近な課題」と「ユーザーの使いやすさ」を起点にした開発を続けていきます。
あとがき:悔しい
LINEの無料上限枠のことなど、正直一切頭にありませんでした....
身の回りの評価が良かったらこのまま長く運用していきたいなと夢想していましたが、現実はそう甘くありませんでした。自分が作りたくて作る「趣味のプロダクト」と、コンスタントに運用し続けるための「ビジネスプロダクト」。両者の間には、持続性やスケーラビリティという面で決定的な壁があることを今回痛感させられました。
ただ、最初から利益を求めて作り始めたわけではありません。まずは今の無料枠の中で様々なユーザーに使ってもらい、「どれだけ日常を便利にできたか」「どんなフィードバックをもらえるか」というリアルな反応を集めるのが今の目標です。その日をひっそりと楽しみにしながら、これからも貪欲にモノづくりを続けていきます!!!
より詳しい開発秘話を
結構しっかりちゃんと書いている記事がこちらにあるので、お時間あればぜひ見に行ってみてください🎵
Discussion