PRODUCT NOTE / PRD

DayGrid

続けたくなる、習慣トラッカー。
この文書は「何ができるか」ではなく、なぜ・誰のために・どんな判断で作ってきたかを記録した開発ノートです。

ステータスShipped / Active(v2 リリース済み・継続開発中)
現行バージョンv2.1.2 build 30(Android 配布中/iOS 審査提出中)
プラットフォームiOS(App Store)/ Android(APK 直配布)/ Web
対象ユーザー運動・学習などの習慣を続けたい個人
最終更新2026-08-11
関連リンク App StoreAndroid APK変更履歴(Changelog)
TL;DR

ひとことで

DayGrid は、毎日の習慣を開いて 1 タップで記録するための習慣トラッカーです。100% オフラインで動作します。

v1 は「予定」と「達成」を ToDo × 日付のグリッドで見せる方向で作りましたが、画面が複雑になり肝心の記録操作が重くなりました。v2 では「今日やることに 1 タップでチェックを入れる」一点に絞って作り直しました。v2 リリース済み

Problem

背景・解きたい課題

「習慣を続けたい」を支える記録には、次の壁があった。

DayGrid はこれを「予定と達成をグリッドで一目化し、積み重ねを可視化して継続を後押しする」ことで解く。

Who

ターゲットユーザー

プライマリ

ランニング・読書・筋トレ・瞑想・学習などの日課を定着させたい個人。「真面目な管理ツール」より、気軽に毎日開けるものを求める人。

主なユースケース

  • 朝に「今日の設定」で予定を素早く確定
  • 達成をワンタップで記録
  • グリッド・ヒートマップで積み重ねを俯瞰
Solution & Scope

解決策とスコープ

コア機能(In scope)

  • スケジュール表ビュー(ToDo × 日付グリッド)
  • 3 表示モード(グリッド/リスト/月次カレンダー)
  • 「今日の設定」高速登録・ワンタップ記録
  • 週次達成率の統計(棒グラフ)
  • ストリーク・ヒートマップ・達成アニメーション
  • 習慣ごとのキャラ/カラーテーマ・リマインダー通知
  • 100% オフライン動作

v2 では上の多くを削り、今日の一覧・1 タップ完了・履歴(連続日数と達成率)に絞った。グリッド表示・統計グラフ・ヒートマップ・キャラテーマ・単発 ToDo は持たない。

やらないこと(Non-goals)

  • 他者との共有・SNS 的な機能(個人の記録に特化)
  • チーム/協働でのタスク管理
  • 語学学習(Engly / LangBridge が担当)
Success Metrics

成功指標(KPI)

「積み重ねが続く」状態になっているかを、次の指標で見る。数値は目標仮置き

7+ 日
平均ストリーク長
(連続記録が伸びるか)
D30 > 25%
30 日後継続率
(習慣化に至るか)
2+ 個
アクティブ習慣数
(毎日開く価値になるか)
Decision Log

主要な意思決定ログ

各アップデートの裏にある「なぜ」を、決定・仮説・結果の 3 点で残す。理由は変更内容から再構成

v2.1.2 build 30 失敗を「同期できませんでした」で片付けない。理由を画面に出す
DECISION
Apple ログインの資格情報を Firebase に渡す口を、汎用の OAuthProvider('apple.com') から Apple 専用 API に変えた。 あわせて、ログインの失敗を「同期できませんでした」と呼ぶのをやめ、 失敗の識別子をそのまま画面に出すことにした。ログイン済みの行には アカウントのアイコンとアドレス、最終同期の時刻を出す。
WHY / 仮説
きっかけは App Review が build 26 と build 29 を続けて却下したこと。 添付されたのは「同期できませんでした」というスクリーンショット 1 枚で、 ログインで落ちたのか同期で落ちたのかすら読み取れなかった。 entitlement・Firebase のプロバイダ設定・シートの提示先を順に疑って、すべて シロだった。実機(iPad / iPadOS 26)で追うと、Apple のシートは正常に出て トークンも正しく(audience も nonce も一致)、落ちていたのは Firebase に渡す 1 行だった。汎用 OAuth の口は Apple には存在しない access_token を付けて送る — Dart の見た目は同じ 2 行なのに、通るネイティブ API が別物だった。 手元で再現できない相手(審査・利用者の報告)から返ってくるのは画面の写真だけで、 そこに識別子が 1 語あるかどうかで原因の絞り込みが変わる、と考えた。
RESULT
修正後、iPad で Apple ログインから Firestore 同期まで到達を確認。 原因の切り分けに 2 回のリリースサイクルを使ったので、 シロだと確認済みの容疑をコードのコメントに残した (同じ疑いを最初からやり直さないため)。 「押したあと何が起きたのか分からない」という声も同じ根で、 状態名(「同期中」)より誰としてログインしているかを 行の主役に置き換えた。
v2.1.2 書ける場所は「週」と「日」の 2 つまで。習慣ごとには持たせない
DECISION
その日のことを書けるメモを足した。ただし 1 日につき 1 件で、 習慣ごとの自由記述は持たせない。書く画面は 1 つだけにして、 ホーム(見ている日)・週の振り返り・履歴のどこから開いても同じ画面に送る。 ホームには入力欄を置かず、1 行の入口だけにした。
WHY / 仮説
週のメモは日曜に 1 回書くものなので、水曜に起きたことは月曜には思い出せない。 かといって習慣ごとに書かせると、入力欄が習慣の数だけ増える — v1 の振り返りが壊れたのは大量に入力させたうえ何も保存しなかった ことなので、入力の量が増える方向は選べない。日に 1 件が最小の単位だと考えた。 ホームに入力欄を埋めなかったのは、キーボードが立ち上がるたびにカードの位置が 動くから。ホームに来る目的はカードを押すことで、書くのはその次にある。
RESULT
保存ボタンを押さずに戻っても消えないようにした(同じ書き込み口を通す)。 削除ボタンは置かず、全部消して保存=消すに一本化している (2 つの操作が同じ結果を作らないため)。行は tombstone として残すので、 他の端末の古いメモが同期で復活することもない。
v2.1.2 一度捨てた「頻度」を戻す。ただし隠れた既定値は作らない
DECISION
繰り返しの決め方を 3 つにした(曜日で決める/週に何回/間隔で決める)。 v2 は曜日集合ひとつに畳んでいたが、そこへ「回数」と「間隔」を戻す。 ただし 回数ベースに曜日を一切持たせないことと、 頻度は編集画面にしか出さないことを条件にした (追加フロー・オンボーディング・一括設定は曜日のまま、既定は毎日)。
WHY / 仮説
曜日集合は 1 週間で一巡するので、「週 2 回・曜日は決めない」と 「隔週」「月一回」がどうやっても表せない。一方 v1 が壊れた原因は 頻度という概念そのものではなく、「週 2 回」を選ぶと暗黙に月・木が入る という隠れた既定値と、それを追加フローに出したことだった。 壊れた原因のほうを禁止すれば、概念は戻せるはずだと考えた。
RESULT
間隔ベースの次の期限は記録から逆算せず Habit.nextDueDate に持たせた。 逆算すると、記録の窓が 7 日しかない振り返り画面で「一度もやっていない」に落ちて 期限が開始日まで飛ぶ。列に持てば判定は日付の比較だけで済む。
v2.1.2 分母の定義を変えるより、画面の中の食い違いを消す
DECISION
週 N 回と間隔ベースは達成率の分母に入れない。ただし 「今日」だけは画面のカードそのものを分母にする。 日と週で分母の作り方が違うことになるが、そちらを採った。
WHY / 仮説
週 2 回の習慣を曜日 [1..7] のまま日ごとに数えると、 全曜日で最大 29%(2/7)にしかならない — v1 で実際に起きたバグと同じ形。 だから期間の集計からは外した。ところが実機で確かめたら カードが 1 枚残っているのにリングが 100% と出た。 期間の一貫性より、同じ画面の中で数字と一覧が食い違うことのほうが 直接効くと判断した。
RESULT
週・月は過去の期限を復元できない(nextDueDate は「今」の値しか持たない)ので 曜日ベースだけを数えたまま。非対称は残るが、意図した非対称としてコードに書いた。
v2.1.2 入れ替えるのをやめて、位置を固定して大きさで示す
DECISION
ホームの円グラフを、大きいもの 1 つ+小さいもの 3 つ(今日・今週・今月)にした。 3 つの位置は固定で、選択中だけ 1.25 倍になる。 「今年」は廃止した。
WHY / 仮説
もとは「日 週 月 年」の押せる文字 1 行で、押してみるまで中身が分からなかった。 そこで数字を小さい円に出したが、最初は「選択中のものは大きい円に居るので 小さいほうには出さない」形にした。これが分かりにくいと指摘された — 押すたびに 3 つの中身が入れ替わり、どれを押したのかを動きで復元するしかない。 位置を止めて大きさだけ変えれば、動くのは押したものだけになる。
RESULT
帯の色に「どの期間か」を持たせた(弧の色は達成率が使い切っているため)。 大きい円の帯だけ薄くしてある — 原色のままだと 0% のときに濃い線が一周し、 満ちているように見えた。「今年」は 1 月なら必ず低く 12 月なら必ず落ち着くだけで、 日々の判断が変わらないので落とした。
v2.1.1 「置かない」と決めたものほど、どこに在るのかを書く
DECISION
詳細画面の「今日」を、状態(1 つだけ・アイコンと大きめの文字)/その状態の意味と操作の場所を書いた 1 行/幅いっぱいの枠付きボタン、の 3 段に分けた。曜日・リマインダー・目標・計測開始日は 1 枚のカードにまとめ、カード全体を編集画面への入口にして、ヘッダーの鉛筆アイコンは外した。あわせてリマインダーの通知に習慣名と予定時刻を載せ、タップ先をその習慣の詳細画面にした。計測開始日は編集画面から変えられるようにした(未来は選ばせない)。
WHY / 仮説
「できた/できないのボタンが分かりにくい」という申告を調べたところ、ボタンは 1 つしか無かった。並んでいたのは 状態表示の「できた」ボタンの「今日はやらない」 で、同じ行に横並び・違いは文字色だけ。2 択ボタンに読め、押しても反応しない左半分が壊れて見えていた。設定項目も同じ形で、読むだけの面なのに触っても何も起きないので、壊れているのと区別がつかない。完了トグルを詳細画面に置かないのは v2 の決めごと(速い経路が隠れるのを防ぐ)だが、置かないと決めたものほど、どこに在るのかを書かないと辿り着けない。通知も同じで、見出しが習慣名だけ・本文が全習慣共通の 1 行だったため、2 件並ぶとどちらがどの時刻の分か読めなかった。
RESULT
状態と操作が別の要素になり、状態ごとに「どこで記録するか」が画面に出るようになった。編集への入口は設定カード 1 つに絞れた(同じ行き先の標的が 2 つあると毎回どちらか考えることになる)。高さを詰めた結果、390×844 以上の端末では日本語・英語・ドイツ語・ポルトガル語のいずれもスクロールなしで最後まで見える(テストで固定)。4.7 インチではまだ 35〜119dp 残る。通知は「ランニング の時間です/07:30 の予定です」となり、タップでその習慣に着く。予定時刻はホームの一覧にも出したので、鳴った通知と目の前のカードが結びつく。ついでに 320dp 幅で曜日の丸が 6px、イタリア語の目標ラベルが 17px 溢れていたのを直した(10 言語の溢れ検査に編集・詳細画面を追加して発見)。
v2.1.0 並び順は本人に委ね、急かす表示は「過ぎた締切」だけに絞る
DECISION
ホームのカードを長押しでつかんで上下に運べるようにし、並び順を保存して端末間でも保つようにした。長押しを並べ替えに割り当てたぶん、詳細画面への入口は各カードの ︙ 一本に統一。地の色は朝・昼・夕・夜でうっすら移ろわせる。アプリアイコンのバッジは、その習慣のリマインダー時刻(未設定なら 18 時)を過ぎた未記録だけを数えるように変えた。
WHY / 仮説
「今日どれから手を付けるか」は本人にしか決められないのに、並びを作成順に固定していたのはアプリ側が段取りを決めている状態だった。ただし並べ替えのために上下ボタンを足すと 1 行のタップ標的が 3 つになり、v1 が壊れた「数 px の差で挙動が変わる」形に戻る。長押しは詳細画面へ行く経路だったが、同じ行き先の ︙ が隣に在って経路が 2 本重複していたので、余っている側を並べ替えに回せば標的を増やさずに済むと考えた。バッジは日付が変わった瞬間に今日の予定ぶんが全部乗る作りで、朝いちばんに最大値が付いて 1 日じゅう減らなかった——まだ誰も何も落としていない時点で「溜まっている」と言う装置になっていた。
RESULT
並べ替えた順序は日をまたいでも別の端末でも保たれ、追加した習慣は末尾に入る。カード 1 行のタップ標的は記録と ︙ の 2 つのままで増えていない。バッジは朝は 0 のままで、締切を過ぎたぶんだけ増える形になった。地の色は 1 日 4 回しか変わらず、動かすのは地だけなので「これからやる 1 枚がいちばん強い」というカードの強弱と、「過去の日を見ているときは暖色」という合図はそのまま保たれている。
v2.0.0 作り足すのをやめ、ゼロベースで作り直す
DECISION
v1 の実装を全削除し、繰り返す習慣だけを扱うアプリとして再構築した。完了は 5 段階評価をやめてチェックのみに。ホーム画面は 1 画面・タブなし・完了経路にモーダルなしとし、行のどこをタップしても 1 タップで完了する形にした。単発 ToDo(やること)と外部 API 連携は廃止。
WHY / 仮説
「毎日確認して完了するアプリなのに、ワンプッシュで完了できないのが苦痛」という申告を調べたところ、ワンタップ記録は v1.4.0 で実装済みだった。使えなかったのは、ヒット領域が約 34px と推奨の 44/48dp を下回り、別のタップ標的の内側にあって数 px 外すとモーダルが開き、押せると分かる手がかりが無かったため。つまり機能不足ではなく、同じ動作を書く経路が 5 つに増え、ホーム画面が 18 状態を持ち、手書き UI の約 30% が到達不能なコードになっていた——「何のアプリか」が定まらないまま積層した結果だと判断した。個別の修正では解けないと考え、作り直しを選んだ。
RESULT
習慣 3 件の完了が 3〜9+ タップから 3 タップへ。完了経路は 1 つ、ホーム画面の状態は 1 つ、初回体験は 6 画面・約 50 入力から 1 画面に。手書きコードは 19,896 行から 5,029 行(UI 層は 16,752 → 1,540 行)。達成率の分母を経過日数から予定日に直し、週 2 回の習慣が最大 29% にしかならないバグも解消した。あわせて、ログインで記録をクラウド保存し機種変更で引き継げる任意のクラウド同期も実装した(未ログインでも全機能そのまま使える)。v2.0.0 で正式リリース
v2.0.1〜v2.0.2 最小の記録体験の次に、「続き具合」を見せて振り返りへ導く
DECISION
習慣の詳細画面に「週ごと」「曜日別」の達成率グラフを追加し、詳細は閲覧専用・編集は右上へ分離した。ホーム中央の円には曜日と今日の残り時間を表示し、前日を見ているときは「昨日/◯日前」ラベルと横スライドで“いつを見ているか”を明示。週の振り返りが未了のあいだはホームに振り返りへの入口を出すようにした。
WHY / 仮説
v2 で記録を 1 タップまで削ぎ落とした次の課題は、「続いているか」を実感でき、つまずいた曜日に気づけること。数字の羅列ではなく先週比・曜日別で見せれば、曜日や通知の設定を自分で見直す動機になると考えた。
RESULT
達成率が先週比・曜日別で一目で分かるようになり、振り返りへの動線をホームに常設。あわせて起動時に読み込みが終わらない不具合やアイコンバッジの減算も修正した。
v1.5.0 10 言語に対応し、配色は決めきれず「選べる」ようにした
DECISION
全画面の文言を arb 化して 10 言語に対応。あわせて寒色ナチュラルの配色に刷新したが、v1.4.0 の暖色版も残してユーザーが設定画面で切り替えられるようにした。
WHY / 仮説
習慣トラッカーは言語圏を選ばない題材なので、多言語化は伸びしろが大きいと考えた。配色は暖色と寒色のどちらが「気軽に開ける」かを決めきれず、選ばせる形に逃がした。
RESULT
10 言語に到達した一方、配色を 2 つ残した判断は設定項目を 1 つ増やしただけだった。v2 では harmony 1 本に決め、切替ごと削除している。この判断は v2 で撤回
v1.0.2 アプリ容量を 112MB → 62MB へ 45% 軽量化する
DECISION
レベル画像を WebP 化するなどして、アプリ容量を約 45% 削減した。
WHY / 仮説
初回ダウンロードの重さはインストール離脱の要因。毎日開いてほしいアプリこそ、入り口の摩擦を小さくすべきだと考えた。
RESULT
リリース直後の早い段階で 112MB → 62MB に軽量化。導入のハードルを下げた。
v1.3.5 通知の不具合を直し、リマインダーを既定 ON にする
DECISION
通知・リマインダーが動作しない問題を修正(iOS フォアグラウンド通知・Android 13 以降の権限に対応)し、リマインダーのデフォルトを ON(21:00)に変更した。
WHY / 仮説
習慣アプリでリマインダーは継続の生命線。動かない、かつ自分で ON にしないと使われない状態は致命的で、初期から「気づける」状態にすべきだと判断した。
RESULT
通知が確実に届くようになり、既定で毎日リマインドされる状態に。継続の取りこぼしを減らした。
v1.4.0 やさしいトーンへデザインを刷新する
DECISION
アプリアイコン・ホーム画面をやわらかい配色に一新。時間帯あいさつ、ワンタップ記録、やさしい応援メッセージを導入した。
WHY / 仮説
毎日開くアプリは「親しみやすさ」と「記録の手軽さ」が継続に直結する。真面目すぎず気軽に開けるトーンにすることが習慣化を助ける、と考えた。
RESULT
気軽に開けて素早く記録できる体験に。継続のための心理的ハードルを下げた。
Milestones

これまでの歩み

v2.1.2+302026-08-11

Apple でログインが通らなかった原因を特定して修正/ログインの失敗を同期の失敗と区別して理由を表示/設定にアカウントのアイコンと最終同期時刻

v2.1.22026-08-02

週N回・隔週・月一回の繰り返し/日ごとのメモを振り返り・履歴で読み返せる形に/円グラフを3つ並べて見比べる形へ

v2.1.12026-08-01

詳細画面の状態と操作を分離/通知に習慣名と予定時刻/計測開始日を変更可能に

v2.1.02026-07-30

長押しで並べ替え/時間帯で変わる地の色/バッジを締切ベースに

v2.0.22026-07-25

曜日・今日の残り時間表示/前日ラベル・スライド遷移/週の振り返り入口

v2.0.12026-07-21

週ごと・曜日別の達成率グラフ/詳細画面を閲覧専用に整理

v2.0.02026-07-20

ゼロベースで再構築(習慣のみ・1 タップ完了・1 画面)/任意クラウド同期

v1.5.02026-07-17

10 言語対応/寒色ナチュラルへ配色刷新(切替式)

v1.4.02026-07-04

やさしいトーンへデザイン刷新/ワンタップ記録

v1.3.52026-06-16

通知・リマインダー修復/リマインダー既定 ON 化

v1.3.12026-06-05

ストリーク・ヒートマップ・達成演出/Web 版公開

v1.0.22026-05-30

容量 45% 軽量化(WebP 化)

v1.0.02026-05-24

初回リリース(3 ビュー・今日の設定・統計・レベルテーマ・通知)

全バージョンの変更履歴を見る →

Roadmap / Open Questions

これから

v2 で掲げた残り 3 点——端末間同期・10 言語対応・App Store / APK 公開——はいずれも v2.0.0 で達成した。ここからは作り足す方向ではなく、決めた形(習慣のみ・1 タップ・1 画面)を守りながら「続ける」を支える改善を重ねる。

やらないと決めたこと:統計の深掘り、グリッド表示の拡張、単発 ToDo。いずれも v1 で複雑さの原因になった側なので、v2 では戻さない。