Show original
Try the app
Enjoyed this article?
Use "Request tipping" to ask the author to set up tip receiving.
AI translation
解決したかったこと なぜ作ろうと思ったか こだわったところ
Try the app
Enjoyed this article?
Use "Request tipping" to ask the author to set up tip receiving.
In a nutshell, the problem was: "Group 'to-do' items never stick in anyone's head."
Whether it's family, PTA, alumni association leadership, club activities, or workplace teams—LINE groups tend to have the same three recurring symptoms.
1. The "Didn't you say that?" problem
When you ask someone to do something verbally or in the chat flow, it gets swept away by other topics and disappears. Days later, you ask "Hey, what happened with that?" and the other person says "I didn't hear about that." Nobody's at fault, yet it causes friction every time.
2. The "Only I remember" problem
As a result, one person with a good memory and strong sense of responsibility ends up carrying everything. When things only work if that one person is on top of it, it's exhausting for them and fragile for the group. The root cause is that the to-do list exists only "in someone's head."
3. The "Nobody uses the app" problem
In theory, existing task management apps should solve this. Many people have tried them. And they almost always fail—not from lack of features, but from the entry barrier.
In groups like families or PTAs where "IT enthusiasm varies wildly," it's nearly impossible for everyone to clear all four hurdles. The moment one person drops out, that tool becomes "a decoration that only some people see," and you're back to verbal communication on LINE.
So the real problem wasn't "lack of task management features"—it was "task management doesn't exist where everyone actually uses it." That's why instead of building a new app, I made it my first requirement to complete everything within LINE chat, where everyone already opens daily.
Well, honestly, I just built what I wanted for myself!
The trigger was seeing "memo app adoption → fails to stick → quietly dies" happen multiple times around me.
Each time, I thought: "Everyone's in LINE groups 100% of the time, aren't they?" 100% adoption rate, 100% active rate, notifications get seen, everyone knows how to use it. There's no better platform than this. If I could put "to-dos" here, it would have better odds than any other feature-rich app.
As a personal project, the conditions were ideal:
There's another thing: I didn't want to just "give it away for free and call it done." Free services eventually stop—either the creator gets bored or server costs become painful. Having a tool that holds family schedules disappear one day would be the worst, so I built in a sustainable structure with paid features (Stripe / ¥600/month) from the start. That said, the basics—"add, list, complete"—stay free. If those were paid, the whole premise of "everyone in the group uses it" would collapse.
Well, honestly, it's the LINE Messaging API costs! They're expensive per message!!
Users only need to remember two commands: "task 〇〇" and "list". Everything else is done via buttons in the Flex Message the Bot returns (complete / delete / open management screen).
Send "help" and you get instructions. Right after being invited to the group, guidance appears. I also detect four milestones—first task added, first completion, first list view, first management screen opened—and send a contextual hint just once at each milestone (using UPDATE ... WHERE col IS NULL in the DB to atomically confirm "the first time," so simultaneous operations don't cause duplicate sends).
The goal is for users to learn naturally through use, without needing an explanation session.
Deadlines aren't extracted from a dedicated input form—they're parsed from the chat text itself. I built custom logic to interpret "tomorrow," "Friday," "3 days from now," "12/25 18:00," etc. and convert them to deadlines (lib/domain/parse-when.ts). I was particular about the details here:
I didn't use a natural language parsing library. Since the input is narrowed to Japanese LINE chat, it's safer to "not interpret" unclear inputs than to misinterpret them. Better to not interpret than to interpret wrong.
LINE Webhooks retry if you don't return 200 within 10 seconds. If the DB or Profile API is slightly slow, events can be reprocessed, risking duplicate task registration.
So I do signature verification synchronously, then offload event processing to Next.js after() and return 200 immediately. Processing is consolidated in Promise.allSettled so one event's failure doesn't cascade. From the user's perspective, the speed of getting a response "the moment you send" directly builds trust in the Bot.
DB migrations run in the build script before next build. If migration fails, the build fails and deployment stops entirely. This structurally prevents the moment where "new code receives requests against old schema."
Tests run on in-process Postgres (pglite) with actual migration SQL, not mocks. Tests run against the same DDL and constraints as production, reducing "tests pass but production fails" scenarios.
"Add, list, complete, delete," "complete group separation," "all members can operate," and "view in management screen"—all stay free forever. Pro (¥600/month, per group) focuses on features you want "after you start using it daily": assignee designation, deadlines, overdue reminders, recurring tasks.
ひとことで言うと、「グループの『あれやっといて』が、誰の頭にも残らない」 という問題です。
家族、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/月・グループ単位)は、担当者アサイン、期限、期限超過リマインド、繰り返しタスクといった「毎日回し始めてから欲しくなる」機能に寄せました。