習慣トラッカー「コツコツ。」を公開しました
本日、新プロダクトとして習慣トラッカー『コツコツ。』を kotsukotsu.clearnets.org で公開しました。まずは Web / PWA として先行公開し、iOS / Android のネイティブアプリは今後追ってリリースします。
まずはリリース宣言と、数字の話
「コツコツ。」は、企画から公開まで 約 8 週間で作りました。内訳は企画・UI 設計に 2 週、実装に 5 週、クローズドβと最終調整に 1 週。コード規模は Flutter Web 側の Dart が約 1.8 万行、Landing Page 側の TypeScript が約 3,000 行程度で、決して大きなプロダクトではありません。むしろ、機能を「増やさなかった」ことが今回のプロダクト設計上の一番の意思決定でした。
技術構成もシンプルです。アプリ本体は Flutter Web (PWA) を主軸に、認証とデータは Firebase Auth + Cloud Firestore、Web ホスティングは Vercel、決済は Stripe Checkout、 広告は AdSense。Web にはネイティブの IAP がないため、AdMob ではなく AdSense を採用しています。Flutter を選んだのは、 後に予定している iOS / Android / Widget まで、できる限り 1 つのコードベースで押し切りたかったからです。
なぜ、この激戦区に習慣トラッカーを作ったのか
習慣トラッカーは、既に Streaks(iOS、¥490 買い切り)、Habitify、Way of Life、Habitica、Loop Habit Tracker (Android の OSS) など、完成度の高いアプリが揃っている激戦カテゴリです。この分野に後発で入ることは、普通に考えれば筋が悪い。 それでも作ることを決めたのは、既存アプリを 3 か月ほど自分で使い倒してみて、日本語話者向けに「静けさを設計した」トラッカーが不在だと確信したからでした。
多くの既存アプリはソーシャル圧、ゲーミフィケーション、大量の Push 通知で継続を煽ります。これは英語圏の「Rise and Grind」文化には合いますが、日本のユーザー、特に 25〜40 歳・SNS 疲れ・静かに自分と向き合いたい層 には、しばしば逆効果です。日記アプリを併用していて、コーヒーを淹れる時間くらいの静けさが欲しい——そういう人に届けたい。想定ユーザーはこの層に絞りました。
差別化は 3 点。日本語 UX の丁寧さ(行間、助詞の選び方、敬語のバランスまで)、和モダンの美しさ(藍染 4 色)、褒めすぎない・責めないマスコット。この 3 つは、多機能を積むタイプの海外アプリでは追随しづらいと踏んでいます。
タビット——声を出さないマスコットの設計思想
アプリのヘッダに常時いるうさぎのマスコットは、「タビット」 と名付けました。名前は「旅」と「Rabbit」の造語です。旅は「習慣を続けていくこと自体が長い旅」というメタファーで、 タビットはその旅にただ「いてくれる」存在として設計しました。
タビットは週の達成率に応じて 6 段階 の表情を変えます。0〜20% は少し眠そうに、20〜40% は静かに、40〜60% はほんの少し微笑み、60〜80% は満足そうに、 80〜95% は大喜びで、95〜100% は誇らしげに。この 段階を刻む こと自体が、モチベーション設計のコアです。100% でなくても表情は動く。だから「今週も少し前に進んだ」が可視化される。
意図的にやらなかったことが 3 つあります。声を出さない(voice UI や擬音は押しつけがましくなる)、褒めすぎない(Streaks 系の positive-only fanfare は数週間で慣れて効かなくなる)、責めない(未達成の日はタビットは静かなだけで、悲しんだり怒ったりしない)。「頑張ってね!」ではなく、そこにいるだけ。この設計判断は、β期間中のフィードバックでも一番反応が良かった部分です。
藍染グリッド——伝統色を Material Grid に翻訳する
月次カレンダーは、藍染の布の織り目からインスピレーションを取りました。藍染布は、糸の 1 本 1 本が 少しずつ濃淡を持ちながら格子状に織られていきます。この構造を Material Grid にそのまま翻訳したのが、コツコツ。の月次ビューです。
使用しているのは伝統色 4 色です:
- 濃藍
#1F2A44:今日の日付、選択状態、主要テキスト - 藍鼠
#6B7280:補助テキスト、区切り線 - 淡藤
#BBBCDE:達成した日の「灯り」 - 白練
#F5F4EF:背景、未達成日のセル
達成した日は淡藤で塗りつぶされた円が「灯り」、未達成の日は白練のままの空セル。今日の日付だけは濃藍の枠線で強調。 グリッドは grid-gap: 12px、各セルの border-radius: 6px で、Material のオーソドックスな距離感を守りつつ、和紙のような柔らかさを出しています。過度な影も、ネオン風の彩度も入れていません。眼を疲れさせないことを優先しました。
ストリーク + フリーズ——「月 1 回だけ救う」という粒度
ストリーク(連続日数)は、習慣トラッカーの中核指標です。ただしその純粋な形——「1 日でも途切れたら 0 に戻る」——は、多くのユーザーにとって挫折の温床でもあります。1 か月続けたストリークが体調不良の 1 日で吹き飛ぶ体験は、そのまま「もういいや」に直結します。
そこでコツコツ。には フリーズ 機能を入れました。ミスした日をスキップ扱いにして、ストリークを保護できる機能です。Free 版では月 1 回、 Premium 版では無制限。粒度を「月 1」に絞ったのはβ前の設計判断の中でも力を入れたポイントです。
- 週 1 回だと使う機会が多すぎて、フリーズが「日常化」してしまう
- 年 1 回だとレアすぎて、心が折れる瞬間に救われない
- 月 1 回は、体調不良や出張などの「本当に無理な日」を年 12 回まで救える丁度いい粒度
Streaks(アプリ)は Freeze を持たず、Habitify は複雑な保険ルールを持っています。コツコツ。は「月 1 に絞る」ことで UI もロジックも簡潔にしました。副次的な効果として、「ストリークを守るためだけに無理する」 不健康な行動を、月 1 のフリーズが吸収してくれます。
週次リキャップ——Push を送らないという選択
毎週月曜の朝、その週の初回起動時にだけ、先週の記録が静かに表示されます。達成率、伸ばした習慣、途切れた習慣、そしてタビットからのごく短い一言。 表示はモーダルではなく画面上部のカード。閉じれば以降は出ません。
重要なのは、この週次リキャップにPush 通知を紐付けていないことです。「月曜の朝ですよ、確認しませんか?」というプロンプトを送るのは、 UX の押し付けだと判断しました。アプリを開くという能動的な行為の後に、はじめてリキャップが「そこにあった」ことに気づく。この受動的な発見体験を守っています。
収益モデル——Hard Paywall に踏み切った理由
コツコツ。は Free trial を用意していません。これは意図的な判断です。Streaks や他のトラッカーが公開している解約データを見ると、トライアル終了時点の解約率は極めて高く、トライアルは「一度触ったけど覚えていないユーザー」を大量に生む温床になりがちです。
そのかわり、Free で 体感価値を出し切れる ラインまで機能を開放しました:
- Free:習慣 3 個、履歴 7 日、藍染グリッド、タビット、フリーズ月 1 回、 週次リキャップ、SNS シェア、広告あり
- Premium ¥400/月 or ¥2,800/年:習慣・履歴・テーマ・Widget すべて無制限、フリーズ無制限、広告なし
月額 ¥400 は、コーヒー 1 杯より安い水準に置きました。日本の toC サブスクリプションで、心理的抵抗が最も少ない価格帯だと判断しています。年額 ¥2,800 は月額換算 ¥233、42% オフ相当。年払いに寄せることで解約 CV を安定させたい狙いもあります。
Free 版で 3 個・7 日を使い切れば、機能の輪郭は完全に理解できます。「もっと記録したい」「もっと遡りたい」と感じたときに、 自然に Premium を選んでもらう。この「Hard Paywall + Free の充実」の組み合わせは、Free trial 方式よりも LTV が伸びやすいという実感があります。
PWA A2HS を強く推す理由——iOS ITP の 7 日削除問題
iOS Safari には ITP (Intelligent Tracking Prevention) という機能があり、ブラウザ経由でアクセスされる Web サイトの localStorage / IndexedDB は 7 日間アクセスがないと削除されます。これは Web アプリで習慣を記録するユーザーにとっては致命的です。
しかし、ホーム画面に追加された PWA は ITP の対象外になり、データは長期保護されます。コツコツ。は初回起動時、iOS Safari ユーザーに対して「ホーム画面に追加してください」というオンボーディングを、静かにですがはっきりと表示します。Android Chrome では自動 A2HS プロンプトが標準機能として提供されているため、そちらに任せています。
Firestore に同期している場合は端末側の消失も再ログインで復元できますが、まず端末側で守るのが第一手。この「A2HS ファースト」の設計は、 Web PWA としての Kotsukotsu が長期利用に耐えるための土台になっています。
データポータビリティ——ユーザーに「逃げ道」を用意する
習慣データは、その人の生活の記録です。だからこそ、アプリから持ち出せなければならない と考えています。コツコツ。は 2 つの経路を用意しました:
- 復元コード:32 文字のランダム文字列を Firestore に紐付けて発行。機種変更時に新端末で入力すれば、そのままデータ復元。
- JSON エクスポート / インポート:全
habits+recordsを単一 JSON にエクスポート。Google Drive や iCloud に手動保存し、別環境で読み込めば完全復元。
そして同時に、アカウント削除の easy path も設定画面から 2 タップで到達できるようにしています。「入りやすいけど出にくい」ではなく「入りやすくて、出やすい」。 ユーザーに逃げ道を提供することは、結果的に「安心して使い始められる」に繋がります。
技術スタックの選択理由
- Flutter Web (PWA):Web / iOS / Android の 3 プラットフォームを 1 コードベースで押し切れる。 後述の Widget や Watch complications はネイティブ側で書くことになりますが、コアの UI とロジックは Flutter に集約します。
- Firebase Auth + Cloud Firestore:認証と DB がセットで、複数端末同期が SDK 1 本で完結。 β規模〜Premium 数千人規模までは Firestore の従量課金で十分収まります。
- Vercel:Web ホスティング。Kotsukotsu は SSR が要らない静的 PWA なので、Vercel の CDN と Edge 配信の速さがそのまま体験に効きます。
- Stripe Checkout:Web での課金基盤。Apple Pay / Google Pay 対応、月額から年額への upgrade も Stripe Customer Portal で UI が完成しているため実装が最小限で済みます。
- AdSense:Web PWA の性質上、AdMob ではなく AdSense を採用。Free 版のフッタに 1 箇所のみ配置し、 記録・入力画面には広告を出さないポリシーです。
クローズドβの初期数値
公開に先立ち、1 週間のクローズドβを走らせました。実測は以下の通りです:
- 参加者:32 名(招待制)
- DAU:12(平均、Retention D7 は 44%)
- 1 人あたり平均 Habit 登録数:2.8 個
- Premium 課金意向:7 名が「¥400 なら払う」と回答
フィードバックで一番多かったのは「タビットの表情変化がモチベになる」という声で、これは設計時の仮説通りでした。 一方で「Free の 3 個は少ない、5 個くらい欲しい」という声も複数あり、v1.1 で Free 上限を 5 個に緩和 することを検討中です。Free の体感価値を出し切るという Hard Paywall の思想に照らせば、上限を上げることは むしろ理にかなっています。
今後のロードマップ
- 2026 Q3:iOS Native ビルド、App Store 申請、TestFlight
- 2026 Q4:Android Native (Play Store) + Android Widget、iOS Widget (WidgetKit)
- 2027 Q1:Apple Watch complications、iCloud 同期 (CloudKit ブリッジ)
- 2027 Q2:友達招待機能(optional、静けさを崩さない設計。デフォルト非表示、 設定から明示的に有効化した人だけ使える)
Widget と Watch complications は、コツコツ。の設計思想と最も相性がよい機能です。ホーム画面や手首で「今日はもう記録したか」を 1 秒で確認できるようになれば、アプリを開く回数を減らしながら継続率を伸ばせます。
この 2 か月で学んだこと
- マスコットは声を出さない方が続く。 擬音や voice UI は最初の 3 日は楽しいが、1 週間で押し付けがましく感じ始める。
- Freeze の粒度は月 1 が正解。 週 1 だと使わない、年 1 だと救えない。月 1 は「本当に無理な日」を年 12 回まで救える。
- Hard Paywall + Free の充実は、Free trial より LTV が伸びる。 トライアル終了時点の解約率が高すぎる。Free で機能価値を体感してもらう方が、Premium に来た人の継続が強い。
- 日本語 UX の丁寧さは line-height と助詞まで含む。 「習慣が続いています」と「習慣を続けています」と「習慣が続いています。」だけで、印象がまるで違う。 行間、句読点、敬語のバランスまで意識して調整しました。
- 「増やさない」ことが一番難しい設計判断。 β中に「タグ機能」「グラフ機能」「AI コーチ」など提案は多く来たが、全てリリース後に持ち越し。まずはコアの静けさを守る。
コツコツ。は、派手なプロダクトではありません。バイラルする類のアプリでもありません。しかし、静かに続けたい人が、 1 年後、2 年後に「まだ使っている」と思えるアプリを目指しています。今日その第一歩として、Web / PWA 版を公開しました。よければ、ホーム画面に置いて、しばらく一緒に旅をしてみてください。