判断コストゼロを目指すTODOアプリ「Unagi Tasks」を作った
判断コストゼロを目指すTODOアプリ「Unagi Tasks」を作った
判断コストの最小化に特化した TODO アプリ Unagi Tasks を作った。
うなぎが川をするすると泳ぐように、迷いなく次のタスクへ進み続けることを目指して。
「次に何をやるか迷う時間」をなくすことを目的に、タスクを自動スコアリングして今やるべき1件だけを表示する。
作った経緯
きっかけはGeminiとの雑談だった。「TODOリストでの管理ってなんかうまくいかないんだけどなんでだろうねー」と話しかけたところから始まった。
既存のTODOアプリは使っていたが、いまいちだった。問題を掘り下げると、根っこにあったのはs「次に何をやるか迷う時間」だとわかった。
差し込みのタスクがそこそこある。「これ今やるべきか?」「さっきのタスクより先か後か?」——その判断を毎回するのが地味に消耗する。既存アプリは整理や並び替えを自分でやらないといけない。整理している時間自体が無駄になっていた。
Geminiとの対話の中で「判断を自動化するアルゴリズム」というアイデアが出てきた。優先度・緊急度・タスクの古さ・今の自分のエネルギー状態を組み合わせてスコアリングし、「今やるべき1件」を機械が選ぶ。自分で並び替えるのではなく、アプリに指示してもらう。
「それ、自分で作れるな」と思ったのでそのまま実装した。技術スタックは普段から使っているDeno / Deno KV / Fresh 2を選択した。
コンセプト
- 爆速インボックス — タイトルだけ入力して即キャプチャ、思考の流れを止めない
- 整理フェーズ — 溜まったインボックスを1件ずつ捌き、重要度・集中度・発生源を付与
- Focus View — スコア順のトップ1件だけを大きく表示。完了・スキップ・削除の3択
- エネルギーマッチング — 今の自分の集中度に合うタスクが自動的に浮き上がる
スコアリング
タスクは以下の式で自動スコアリングされる。
score = priority × (10 + urgencyBonus) + ageInHours - |userEnergy - taskEnergy| × 5
urgencyBonus:
期限切れ → 60 + 経過日数 × 15
当日 → 60
7日以内 → (7 - 残り日数) / 6 × 30
それ以外 → 0
期限・優先度・タスクの古さ・自分の今のエネルギーレベルとタスクの要求エネルギーのマッチ度を総合して順位を決める。
技術スタック
| 項目 | 内容 |
|---|---|
| Runtime | Deno 2.x |
| Framework | Fresh 2 (@fresh/core@^2.2.2) |
| Bundler | Vite + @fresh/plugin-vite |
| UI | Preact 10 + Tailwind CSS 4 |
| Database | Deno KV |
| Hosting | Deno Deploy |
Deno KV をデータストアにすることでサーバーレスかつゼロインフラで運用できる。Deno Deploy の GitHub integration でプッシュするだけ自動デプロイされる。
画面構成
| パス | 内容 |
|---|---|
/auth/signin | ランディング・サインイン |
/ | Focus View(トップタスク表示・クイック入力) |
/triage | インボックス整理(属性付与して tasks へ) |
/tasks | タスク一覧(スコア順) |
/tasks/{id}/edit | タスク編集 |
/account | アカウント設定・退会 |
# 判断コストゼロを目指すTODOアプリ「Unagi Tasks」を作った
**判断コストの最小化**に特化した TODO アプリ **[Unagi Tasks](https://unagi-tasks.h-kono-it.deno.net/)** を作った。
うなぎが川をするすると泳ぐように、迷いなく次のタスクへ進み続けることを目指して。
「次に何をやるか迷う時間」をなくすことを目的に、タスクを自動スコアリングして今やるべき1件だけを表示する。
## 作った経緯
きっかけはGeminiとの雑談だった。「TODOリストでの管理ってなんかうまくいかないんだけどなんでだろうねー」と話しかけたところから始まった。
既存のTODOアプリは使っていたが、いまいちだった。問題を掘り下げると、根っこにあったのはs「次に何をやるか迷う時間」だとわかった。
差し込みのタスクがそこそこある。「これ今やるべきか?」「さっきのタスクより先か後か?」——その判断を毎回するのが地味に消耗する。既存アプリは整理や並び替えを自分でやらないといけない。整理している時間自体が無駄になっていた。
Geminiとの対話の中で「判断を自動化するアルゴリズム」というアイデアが出てきた。優先度・緊急度・タスクの古さ・今の自分のエネルギー状態を組み合わせてスコアリングし、「今やるべき1件」を機械が選ぶ。自分で並び替えるのではなく、アプリに指示してもらう。
「それ、自分で作れるな」と思ったのでそのまま実装した。技術スタックは普段から使っているDeno / Deno KV / Fresh 2を選択した。
## コンセプト
- 爆速インボックス — タイトルだけ入力して即キャプチャ、思考の流れを止めない
- 整理フェーズ — 溜まったインボックスを1件ずつ捌き、重要度・集中度・発生源を付与
- Focus View — スコア順のトップ1件だけを大きく表示。完了・スキップ・削除の3択
- エネルギーマッチング — 今の自分の集中度に合うタスクが自動的に浮き上がる
## スコアリング
タスクは以下の式で自動スコアリングされる。
```
score = priority × (10 + urgencyBonus) + ageInHours - |userEnergy - taskEnergy| × 5
urgencyBonus:
期限切れ → 60 + 経過日数 × 15
当日 → 60
7日以内 → (7 - 残り日数) / 6 × 30
それ以外 → 0
```
期限・優先度・タスクの古さ・自分の今のエネルギーレベルとタスクの要求エネルギーのマッチ度を総合して順位を決める。
## 技術スタック
| 項目 | 内容 |
| --------- | ------------------------------ |
| Runtime | Deno 2.x |
| Framework | Fresh 2 (`@fresh/core@^2.2.2`) |
| Bundler | Vite + `@fresh/plugin-vite` |
| UI | Preact 10 + Tailwind CSS 4 |
| Database | Deno KV |
| Hosting | Deno Deploy |
Deno KV をデータストアにすることでサーバーレスかつゼロインフラで運用できる。Deno Deploy の GitHub integration でプッシュするだけ自動デプロイされる。
## 画面構成
| パス | 内容 |
| ------------------ | -------------------------------------------- |
| `/auth/signin` | ランディング・サインイン |
| `/` | Focus View(トップタスク表示・クイック入力) |
| `/triage` | インボックス整理(属性付与して tasks へ) |
| `/tasks` | タスク一覧(スコア順) |
| `/tasks/{id}/edit` | タスク編集 |
| `/account` | アカウント設定・退会 |