多機能Todoに疲れた人へ ─「一枚の紙」だけのタスク管理CLI
多機能Todoアプリに疲れた方へ。「一枚の紙」だけのシンプルさを 再現したミニマルなタスク管理CLI「Tiny Task Tool (ttt)」を 開発しました。Claude Codeとの協働開発で実感した、 ドキュメント駆動とTDDの効果的な組み合わせをご紹介します。 ターミナルで作業中、ふと「あれもやらなきゃ」と思いついたとき、頭の中を書き出す場所が欲しくなります。 物理的なメモ用紙ならすぐに書けますが、ターミナルから手を離すのは煩わしい。 かといって多機能なTodoアプリを開くと、プロジェクトやタグを考えているうちに書きたかったことを忘れてしまう。 そこで作ったのが Tiny Task Tool です。コマンド名はタイプしやすいように 「一枚の紙」のシンプルさをターミナルで再現することを目指した、ミニマルなタスク管理ツールです。 この記事では、 ターミナルで TUIでは シンプルなMarkdownチェックボックス形式です。 タスク以外の箇条書きもノードとして挿入できます。タスクをグルーピングするためにセクション( 完了したタスクには自動で きっかけはZennで見かけた「Markdown Paper という選択肢」という記事でした。ephe.app の「一枚の紙」コンセプトをCLIに持ち込んだ aeph の紹介記事です。 コンセプトには共感しましたが、aephは複数ファイルに対応しており、「一枚の紙」とは少し違うと感じました。そこでaephのソースコードを参考にするのではなく、ゼロから自分のコンセプトで作ることにしました。 既存のツールにも同様の問題がありました。 単一ファイル、選択肢なし、気を散らすものなし。机の上のメモ用紙のように、「開いて、書いて、終わったら消す」だけの体験が欲しかったのです。 このプロジェクトはClaude Codeを活用し、以下のプロセスで開発しました。 Claude Codeとの協働で最も効果的だったのは、まずドキュメントを書き、それに従って開発するアプローチでした。 最初に「なぜ作るのか」「何をしないか」を明確にしました。 「やらないこと」を明文化したことで、開発中に機能追加の誘惑が来ても「concept.mdに反する」と判断できました。Claudeにも「この機能はconcept.mdの方針に反しますね」とフィードバックを受けられます。 ユースケース、画面レイアウト、エラー処理まで事前に定義しました。これによりClaudeへの指示が明確になり、生成されるコードの品質が上がりました。 「なぜその技術を選んだか」「他の選択肢をなぜ却下したか」を記録しました。後から見返したとき、またClaudeに文脈を伝えるときに役立ちました。基本的に記載方法は Architectural Decision Record(ADR)形式 を採用して記載しています。 以下は言語選定の際の例です。 テスト駆動開発(TDD)はClaude Codeとの開発で特に威力を発揮しました。 特に階層タスクのアーカイブ処理のような複雑なロジックでは、テストケースを先に書いておくことで、エッジケースの考慮漏れを防げました。 Claude Codeとの開発では、ドキュメント駆動 と TDD の組み合わせが非常に効果的でした。 「Claude Codeに任せきり」ではなく「Claude Codeと協働する」開発スタイルとして、このアプローチはおすすめできます。 興味を持っていただけたら、ぜひ使ってみてください。 https://github.com/yostos/tiny-task-tool この記事で紹介したドキュメント(concept.md, specification.md, architecture.md)は GitHub リポジトリの docs/ ディレクトリで公開しています。Table of Contents
はじめに
ttt としました。ttt のコンセプトと使い方を紹介しつつ、Claude Codeとの協働開発でドキュメント駆動とTDDがいかに効果的だったかをお伝えします。Tiny Task Tool とは
ttt(Tiny Task Tool) は「デジタルなメモ用紙」を目指したTUIタスク管理ツールです。
主な特徴
インストール
# go install(推奨)
go install github.com/yostos/tiny-task-tool@latest
# Homebrew
brew install yostos/tap/ttt基本的な使い方
ttt と打つだけで、1ページのタスク表がTUIで開きます。ttt # TUIでタスク表を開く
ttt -t "牛乳を買う" # コマンドラインからタスクを追加
ttt sync # git pushでリモートと同期e でエディタを開き、a でアーカイブ、q で終了。キーバインドはVim/Emacsユーザー向けにカスタマイズ可能です。タスクのフォーマット
- [ ] 未完了のタスク
- [x] 完了したタスク @done(2026-01-18)
- [x] 子タスクも自動で完了 @done(2026-01-18)# Task や ## Project A)なども扱えます。@done(日付) タグが付き、設定した日数が経過するとarchive.mdに移動します。なぜ作ったのか
Claude Code との開発体験
ドキュメント駆動が効いた理由
1. concept.md で方向性を固める
### やらないこと
- ファイル指定(「どのファイルを開くか」という選択を排除)
- 複数ファイル管理(一枚の紙の原則に反する)
- ファイル内編集(外部エディタに任せる)2. specification.md で仕様を詳細化
3. architecture.md で技術選定を記録
候補 却下理由 Rust 学習コストが高い。所有権/ライフタイムの概念が独特で、AI 駆動開発でコンパイルエラー修正時に堂々巡りするリスク Python PEP 668 により配布が複雑化。起動速度も遅い TypeScript 単一バイナリ配布ができず「摩擦をなくす」原則に反する TDD が AI 駆動開発と相性が良い理由
テストファーストのメリット
実際の開発フロー
# 1. まずテストを書く(Red)
$ go test ./...
# FAIL: TestArchiveCompletedTasks - 期待する動作のテストが失敗
# 2. Claude に実装を依頼
# 「このテストを通す実装をお願いします」
# 3. テストが通ることを確認(Green)
$ go test ./...
# PASS
# 4. リファクタリング
# 「この実装をより読みやすくリファクタリングしてください」Claude Code との対話で心がけたこと
技術スタック
分野 選択 理由 言語 Go 単一バイナリ配布、高速起動 TUI bubbletea + lipgloss 成熟したエコシステム、Elm アーキテクチャ 設定 pelletier/go-toml v2 TOML 1.0 準拠、高速 テスト testing + testify 標準+簡潔なアサーション まとめ
ttt は「一枚の紙」という思想にこだわった結果、機能を削ることで価値を磨けたツールになったと思います。私自身も便利に使っています。もっと高機能なツールはたくさん ありますが、コンセプトに賛同いただける多くの方に使ってもらえれば幸いです。