Taskwarriorに足りなかった「いつやるか」を解決するCLIタスク管理ツールを作った


はじめに

Taskdogは、タスクの期限・見積もり時間・優先度から1日の作業時間上限を守りながらスケジュールを自動生成するCLI/TUIタスク管理ツールです。

👉 https://github.com/Kohei-Wada/taskdog

Taskdog TUI Demo

タスク管理ツールは世の中に山ほどあります。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を使っています。ページの階層構造やデータベース機能は素晴らしいと思います。

でも、自分のワークフローには向いていませんでした。

  • 重い - ちょっとタスクを追加するだけなのに、ブラウザを開いてページをロードして…
  • タスク管理機能が弱い - データベースでそれっぽく作れるけど、結局は汎用ツール
  • スケジュール自動生成? - ない

欲しかった機能

結局、自分が欲しかったのはこういうツールでした:

  1. ターミナルで完結する - GUIを開くのが面倒。コマンドラインでサクッと操作したい
  2. スケジュールを自動生成してくれる - 優先度・期限・見積もり時間を入れたら、「今日はこれをやれ」と教えてほしい。
  3. クラウドに依存しない - プライバシー重視。データはローカルに置きたい
  4. 透明なアルゴリズム - 「AIが決めました」ではなく、「このロジックでこう決めました」と説明できるものがいい

既存ツールでこの条件を満たすものが見つからなかったので、作ることにしました。


既存ツールとの比較

機能TaskdogTaskwarriorMotion/Reclaim
スケジュール自動生成
工数上限の考慮
土日祝日スキップ
ローカル完結
透明なアルゴリズム-
価格無料無料$19-34/月
CLI/TUI
依存関係一部

Taskdogの立ち位置: Taskwarriorの使い勝手 + Motion/Reclaimのスケジュール自動生成、をローカル完結で実現するツールです。


Taskdogとは

名前は適当です。Taskwarriorを使っていたときにたまたまDatadogが目に入って、「Task + dog = Taskdog」にしました。深い意味はありません。

Pythonで作ったタスク管理システムで、以下の3つのインターフェースを持っています:

  1. CLI - コマンドラインでサクッと操作
  2. TUI - フルスクリーンのターミナルUI
  3. REST API - プログラムからアクセス可能

主な機能

タスクの基本操作

Terminal window
# タスク追加
taskdog add "READMEを書く" --priority 3 --tag docs
# タスク一覧(テーブル表示)
taskdog table
# タスク開始・完了
taskdog start 1
taskdog done 1

スケジュール最適化(核心機能)

Taskdogの核心機能は「1日の作業時間上限を超えない」自動スケジューリングです。

見積もり10時間のタスクを期限3日前に入れたら、自動で3日間に分散してくれます。土日祝日は自動でスキップされるので、現実的なスケジュールが組めます。

Terminal window
# 見積もり10時間、期限が3日後のタスク
taskdog add "レポート作成" --estimate 10h --deadline 2025-01-05
# 最適化を実行
taskdog optimize
# → 1日6時間上限で、平日のみに分散してスケジュール(設定でデフォルトを変更可能)

スケジュール最適化の結果

優先度・期限・依存関係を考慮して、工数上限を守ってスケジュールを組んでくれます。

実用的な3つのアルゴリズム:

Terminal window
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: 透明なアルゴリズム(ソースコード確認可能、選択可能)

ガントチャート表示

Terminal window
taskdog gantt

ターミナルでガントチャートが見れます。日別の負荷量も表示されるので、「この日は詰め込みすぎだな」が一目で分かります。

ガントチャート表示

TUI(フルスクリーンモード)

Terminal window
taskdog tui

見た目や操作感はVim/Neovimに寄せています。 /でリアルタイムタスク検索ができますが、これはtelescope.nvimの操作感を参考にしました。Neovimユーザーなら違和感なく使えると思います。

キー操作
aタスク追加
s開始
d完了
/検索
Ctrl+Pコマンドパレット
?ヘルプを表示

TUIデモ

その他の機能

  • タスク依存関係: taskdog add-dependency 2 1(タスク2はタスク1の完了後に)
  • 固定タスク: 会議など動かせない予定をスケジュール最適化から除外
  • 土日祝日スキップ: 平日のみにスケジュールを配置(日本の祝日対応)
  • マークダウンノート: 各タスクにノートを添付
  • タグ管理: タスクをカテゴリ分け
  • 時間トラッキング: 予定vs実績の比較
  • MCP対応: AIエージェントから直接タスク操作が可能

技術スタック

ライブラリ
CLIClick + Rich
TUITextual
APIFastAPI + Uvicorn
DBSQLite + 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を差し替え可能
  • serveruiを独立してデプロイ可能
  • テストが書きやすい

設計方針

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も歓迎です。

👉 GitHub リポジトリ