はじめに
Taskdogは、タスクの期限・見積もり時間・優先度から1日の作業時間上限を守りながらスケジュールを自動生成するCLI/TUIタスク管理ツールです。
👉 https://github.com/Kohei-Wada/taskdog

タスク管理ツールは世の中に山ほどあります。Todoist、Notion、Trelloなどどれも素晴らしいツールです。
しかし、どれも自分のワークフローにはフィットしませんでした。
そんなわけで、自分で作ることにしました。
なぜ作ったのか
既存ツールを試した遍歴
Taskwarrior
最初に試したのはTaskwarriorでした。
Taskwarriorは素晴らしいCLIタスク管理ツールです。15年以上の歴史があり、シンプルで高速、カスタマイズ性も高い。しばらく使っていました。
でも、一つ大きな不満がありました。
スケジュールの自動生成機能がない。
タスクに期限と見積もり時間を設定しても、「じゃあいつやるの?」は自分で考えなければなりません。Taskwarriorは「何をやるか」の優先順位付けは得意ですが、「いつやるか」のスケジューリングは守備範囲外のようです。
毎朝「今日は何をどれだけやるか」を手動で決めるのは、正直面倒でした。
Motion / Reclaim.ai
次に試したのはAIスケジューリング系のサービスです。
Motion や Reclaim.ai は「AIがスケジュールを自動で組んでくれる」というコンセプト。確かに便利そうでした。
でも、いくつか引っかかる点がありました:
- 月額$19-34と高い(年間2万円以上)
- クラウド必須(タスクデータを外部に預けたくない)
- ブラックボックスAI(なぜこのスケジュールになったのか分からない)
「AIが決めました」と言われても、納得できないスケジュールを押し付けられている感覚がありました。
Asana / Jira / ClickUp
チーム向けツールも試してみました。
機能は豊富ですが、個人で使うには重すぎました。親子タスク、サブタスク、エピック、ストーリー…。
一人で使うのに、こんな複雑な構造は要りません。
Notion
普段のチームのドキュメント整理にはNotionを使っています。ページの階層構造やデータベース機能は素晴らしいと思います。
でも、自分のワークフローには向いていませんでした。
- 重い - ちょっとタスクを追加するだけなのに、ブラウザを開いてページをロードして…
- タスク管理機能が弱い - データベースでそれっぽく作れるけど、結局は汎用ツール
- スケジュール自動生成? - ない
欲しかった機能
結局、自分が欲しかったのはこういうツールでした:
- ターミナルで完結する - GUIを開くのが面倒。コマンドラインでサクッと操作したい
- スケジュールを自動生成してくれる - 優先度・期限・見積もり時間を入れたら、「今日はこれをやれ」と教えてほしい。
- クラウドに依存しない - プライバシー重視。データはローカルに置きたい
- 透明なアルゴリズム - 「AIが決めました」ではなく、「このロジックでこう決めました」と説明できるものがいい
既存ツールでこの条件を満たすものが見つからなかったので、作ることにしました。
既存ツールとの比較
| 機能 | Taskdog | Taskwarrior | Motion/Reclaim |
|---|---|---|---|
| スケジュール自動生成 | ✅ | ❌ | ✅ |
| 工数上限の考慮 | ✅ | ❌ | ✅ |
| 土日祝日スキップ | ✅ | ❌ | ✅ |
| ローカル完結 | ✅ | ✅ | ❌ |
| 透明なアルゴリズム | ✅ | - | ❌ |
| 価格 | 無料 | 無料 | $19-34/月 |
| CLI/TUI | ✅ | ✅ | ❌ |
| 依存関係 | ✅ | ✅ | 一部 |
Taskdogの立ち位置: Taskwarriorの使い勝手 + Motion/Reclaimのスケジュール自動生成、をローカル完結で実現するツールです。
Taskdogとは
名前は適当です。Taskwarriorを使っていたときにたまたまDatadogが目に入って、「Task + dog = Taskdog」にしました。深い意味はありません。
Pythonで作ったタスク管理システムで、以下の3つのインターフェースを持っています:
- CLI - コマンドラインでサクッと操作
- TUI - フルスクリーンのターミナルUI
- REST API - プログラムからアクセス可能
主な機能
タスクの基本操作
# タスク追加taskdog add "READMEを書く" --priority 3 --tag docs
# タスク一覧(テーブル表示)taskdog table
# タスク開始・完了taskdog start 1taskdog done 1スケジュール最適化(核心機能)
Taskdogの核心機能は「1日の作業時間上限を超えない」自動スケジューリングです。
見積もり10時間のタスクを期限3日前に入れたら、自動で3日間に分散してくれます。土日祝日は自動でスキップされるので、現実的なスケジュールが組めます。
# 見積もり10時間、期限が3日後のタスクtaskdog add "レポート作成" --estimate 10h --deadline 2025-01-05
# 最適化を実行taskdog optimize# → 1日6時間上限で、平日のみに分散してスケジュール(設定でデフォルトを変更可能)
優先度・期限・依存関係を考慮して、工数上限を守ってスケジュールを組んでくれます。
実用的な3つのアルゴリズム:
taskdog optimize # greedy(デフォルト)taskdog optimize --algorithm backward # 期限逆算taskdog optimize --algorithm dependency_aware # 依存関係考慮| アルゴリズム | 説明 | いつ使う? |
|---|---|---|
| greedy | 前倒しでスケジュール | 早く終わらせたいとき |
| backward | 期限から逆算(JIT) | 締切駆動の仕事 |
| dependency_aware | クリティカルパス法(CPM) | 依存関係が多いとき |
普段使うのはこの3つです。
学習用の実験的アルゴリズム(6種類):
balanced, priority_first, earliest_deadline, round_robin, genetic, monte_carlo も実装しています。これらは実験的に作成しました。詳細はリポジトリを参照してください。
Motion/Reclaimとの違い:
- Motion/Reclaim: ブラックボックスAI(なぜこのスケジュール?が分からない)
- Taskdog: 透明なアルゴリズム(ソースコード確認可能、選択可能)
ガントチャート表示
taskdog ganttターミナルでガントチャートが見れます。日別の負荷量も表示されるので、「この日は詰め込みすぎだな」が一目で分かります。

TUI(フルスクリーンモード)
taskdog tui見た目や操作感はVim/Neovimに寄せています。
/でリアルタイムタスク検索ができますが、これはtelescope.nvimの操作感を参考にしました。Neovimユーザーなら違和感なく使えると思います。
| キー | 操作 |
|---|---|
a | タスク追加 |
s | 開始 |
d | 完了 |
/ | 検索 |
Ctrl+P | コマンドパレット |
? | ヘルプを表示 |

その他の機能
- タスク依存関係:
taskdog add-dependency 2 1(タスク2はタスク1の完了後に) - 固定タスク: 会議など動かせない予定をスケジュール最適化から除外
- 土日祝日スキップ: 平日のみにスケジュールを配置(日本の祝日対応)
- マークダウンノート: 各タスクにノートを添付
- タグ管理: タスクをカテゴリ分け
- 時間トラッキング: 予定vs実績の比較
- MCP対応: AIエージェントから直接タスク操作が可能
技術スタック
| 層 | ライブラリ |
|---|---|
| CLI | Click + Rich |
| TUI | Textual |
| API | FastAPI + Uvicorn |
| DB | SQLite + SQLAlchemy + Alembic |
| 型チェック | mypy |
| リンター | Ruff |
| パッケージ管理 | uv |
アーキテクチャ
Clean Architectureを採用し、uv workspaceでmonorepo構成にしました。
packages/├── taskdog-core/ # ビジネスロジック(UI依存なし)├── taskdog-client/ # HTTP APIクライアント├── taskdog-server/ # FastAPI REST API├── taskdog-ui/ # CLI/TUI└── taskdog-mcp/ # Claude Desktop統合(MCP)この構成により:
- coreを変更せずにUIを差し替え可能
- serverとuiを独立してデプロイ可能
- テストが書きやすい
設計方針
1. 個人用に割り切る
チーム機能、クラウド同期、コラボレーション…全部切り捨てました。
理由:
- シンプルさを保てる
- プライバシーを守れる
- ローカルで完結する安心感
2. 透明なアルゴリズム
「AIがスケジュールを決めました」ではなく、「このアルゴリズムでこう決めました」と説明できるようにしました。
実用的な3つのアルゴリズム(greedy, backward, dependency_aware)は全てソースコードで確認できます。納得できなければ自分で改良することもできます。
3. GTD原則への準拠
David Allenの「Getting Things Done」の考え方を取り入れました:
- タスクは具体的なアクションに
- 依存関係を明確に
- 定期的なレビュー(
taskdog today,taskdog gantt)
開発で苦労したこと・学び
親子タスクを実装しようとして失敗した話
最初は親子タスク(サブタスク)機能を実装しようと試みました。
「大きなタスクを小さなタスクに分解できたら便利だろう」と思ったからです。
でも、実装を進めるうちに問題が山積みになりました:
- 親タスクをスケジュールするべき?子タスクだけ?
- 親の見積もり時間 = 子の合計?それとも独立?
- 子タスクが完了したら親も自動で完了?
- 親タスクを削除したら子タスクはどうなる?
特にスケジュール最適化アルゴリズムとの相性が最悪でした。最適化アルゴリズム全てで親子関係の特別処理が必要になり、コードが複雑化していきました。
結局、親子タスクは廃止して依存関係 + タグ + ノートで代替することにしました。
個人で管理するタスクは同時に数個程度。親子構造で整理する必要がないことに気づきました。
Clean Architectureへの移行
最初はシンプルな構成で始めましたが、機能が増えるにつれてコードが混乱してきました。(当初はただのJSONファイルを編集するコマンドの集合体でした。)
途中でClean Architectureに移行。これが大変でした:
- ドメイン層、アプリケーション層、インフラ層の分離
- 依存関係の方向を揃える
- Use Caseパターンの導入
でも、この苦労のおかげで:
- CLI/TUI/APIの3つのインターフェースを同じビジネスロジックで動かせる
- テストが書きやすい
- 新機能の追加が楽になった
今後の予定
- 24時間タスク実行
- 定期タスク登録
- スケジュールアルゴリズムの改善
詳しくは DESIGN_PHILOSOPHY.md を参照してください。
おわりに
「自分専用のタスク管理ツールを作る」というのは、プログラマの特権かもしれません。
Taskdogはまだ開発中で、バグや不具合もあると思います。それでも、自分のワークフローには完全にフィットしています。
特に以下の人に向いていると思います:
- Taskwarriorを使っているが、スケジュール自動生成がほしい
- MotionやReclaimに興味があるが、月額$20は高い
- タスクデータをローカルに置きたい
- 「AIが決めました」ではなく、透明なロジックでスケジュールを組みたい
興味があればぜひ試してみてください。Star、Issue、PRも歓迎です。