実際に使ってみる
この記事が良かったら
「チップをリクエスト」で著者にチップの受け取り設定をお願いできます
解決したかったこと なぜ作ろうと思ったか こだわったところ
実際に使ってみる
この記事が良かったら
「チップをリクエスト」で著者にチップの受け取り設定をお願いできます
ひとことで言うと、「グループの『あれやっといて』が、誰の頭にも残らない」 という問題です。
家族、PTA、同窓会の幹事、サークル、職場のチーム。LINE グループでやりとりする集まりには、だいたい同じ 3 つの症状があります。
1.「言ったよね?」問題口頭やトークの流れの中でお願いした「やっといて」は、他の話題に押し流されて消えます。数日後に「あれ、どうなった?」と聞き直すところから始まり、聞かれた側も「それ聞いてない」となる。誰も悪くないのに、毎回もめる。
2.「私だけが覚えてる」問題結果として、記憶力と責任感のある誰か一人が全部を抱えます。その人が把握していないと回らない状態は、本人にとってしんどいだけでなく、グループとしても脆い。やることの一覧が「人の頭の中」にしか無いのが根本原因です。
3.「アプリ使ってくれない」問題ここまでは既存のタスク管理アプリで解決できるはずでした。実際、多くの人が一度は試していると思います。そして、ほぼ確実に失敗する。理由は機能不足ではなく 入口 です。
家族や PTA のような「IT への熱量がバラバラな集まり」では、この 4 段のハードルを全員が越えることはまずありません。1 人でも脱落した時点で、そのツールは「一部の人しか見ていない置物」になり、結局 LINE のトークで口頭連絡に戻ります。
つまり解くべき課題は「タスク管理機能が無いこと」ではなく、「全員が確実に使う場所に、タスク管理が無いこと」 でした。だから、新しいアプリを作るのではなく、すでに全員が毎日開いている LINE のトークの中で完結させる ことを最初の要件に置きました。
まぁ、単純に自分が欲しいもの作った!だけでもあります
きっかけは、自分の身の回りで「メモアプリ導入 → 定着せず自然消滅」を何度か見たことです。
そのたびに思ったのが、「みんな LINE グループには 100% いるじゃないか」ということでした。導入率もアクティブ率も 100%、通知も見てもらえる、操作方法も全員が知っている。これ以上のプラットフォームは無い。ここに「やること」を置けるなら、他のどんな高機能アプリより勝ち目があると考えました。
個人開発のテーマとしても条件が良かったんです。
もうひとつ、「無料で配って終わり」にはしたくない、という気持ちもありました。無料サービスは、作者が飽きるか、サーバ代が痛くなるかで、いずれ静かに止まります。家族の予定を預けるツールがある日消えるのは最悪なので、続けられる構造 として最初から課金(Stripe / ¥600 月額)を組み込みました。とはいえ、基本の「追加・一覧・完了」は無料のままにしています。ここが有料だと、そもそも「グループ全員が使う」という前提が崩れるからです。
まぁ、ぶっちゃけLINE messaging API代金です!一通あたりが高い!!
ユーザーが覚えるコマンドは 「タスク 〇〇」 と 「一覧」 だけ。あとは Bot が返す Flex Message のボタン(完了 / 削除 / 管理画面を開く)で操作できます。
「ヘルプ」と送れば使い方が返り、グループに招待された直後にも案内が出ます。さらに、初回のタスク追加・初回の完了・初回の一覧・初回の管理画面オープンという 4 つのマイルストーンを検知して、そのタイミングに合ったヒントを 1 回だけ送るようにしました(DB の UPDATE ... WHERE col IS NULL で原子的に「最初の 1 回」を確定させているので、同時操作でも二重送信になりません)。
説明会をしなくても、使っているうちに覚えている状態を目指しています。
期限は、専用の入力フォームではなくトークの文章から拾います。「明日」「金曜」「3日後」「12/25 18時」などを解釈して期限に変換する処理を自作しました(lib/domain/parse-when.ts)。ここは細かいルールにこだわっています。
自然言語解析のライブラリは入れていません。日本語の LINE トークという狭い入力に絞れば、意図が読めない入力は「素直に期限なしのタスクにする」ほうがユーザーにとって安全だからです。間違って解釈するくらいなら、解釈しない。
LINE の Webhook は、10 秒以内に 200 を返さないとリトライされます。DB や Profile API が少し遅れただけでイベントが重複処理されると、タスクが二重登録されかねません。
そこで、署名検証だけを同期的に行い、イベント処理は Next.js の after() に逃がして即座に 200 を返す 構成にしました。処理は Promise.allSettled でまとめているので、1 イベントの失敗が他を巻き込みません。ユーザー体感としても、「送った瞬間に返ってくる」速度が Bot の信頼感に直結する部分です。
DB マイグレーションは、ビルドスクリプトの中で next build より先に 実行しています。マイグレーションが失敗すればビルドが失敗し、デプロイ自体が中止される。つまり「新しいコードが、古いスキーマにリクエストを受ける」瞬間が構造上つくれません。
テストも、モックではなく プロセス内 Postgres (pglite) に実際のマイグレーション SQL を流して実行しています。本番と同じ DDL・同じ制約の上でテストが走るので、「テストは通ったのに本番で落ちる」を減らせます。
「追加・一覧・完了・削除」「グループごとの完全分離」「メンバー全員が操作可能」「管理画面での閲覧」までは、ずっと無料です。Pro(¥600/月・グループ単位)は、担当者アサイン、期限、期限超過リマインド、繰り返しタスクといった「毎日回し始めてから欲しくなる」機能に寄せました。