はじめに
僕の勤め先もそうなのですが、会社の PC って統制やセキュリティ規制で Jira や Notion みたいな SaaS のタスク管理ツールが使えないこと、ありませんか。
かといって社内公式のツールは微妙に使いにくく、結局 TODO.md を一枚置いて済ませる。最初はそれでいいんですが、タスクが 20 個を超えたあたりで見通しが悪くなってきて、「今週何が期限切れなのか」を目視で探すようになります。
それなら、外部に一切通信しない・データはただの Markdown・依存ゼロのタスク管理ツールを自分で作ればいいのでは、ということで作りました。ついでに、データがただのファイルであることを活かして、Claude Code に「今週ヤバいタスク出して」「これ完了にしといて」と頼めるようにしてあります。
作ったもの
Taskboard — localhost だけで完結するカンバン型のタスク管理ダッシュボードです。
https://github.com/t-tonton/local-taskboard

タスクごとに GitHub の Issue 風の単一ページもあります。
起動はこれだけです。
node server.mjs
# → http://localhost:5757
npm install すら不要です。依存パッケージはゼロで、Node.js が入っていれば動きます。
一番のポイント: データがただの Markdown
DB はありません。データソースは tasks/*.md(1 ファイル = 1 タスク)です。
---
number: 2
title: ログイン画面のバグ修正
status: doing # todo | doing | done
due: 2026-07-23
tags: [bug, frontend]
assignee: 佐藤
project: webapp
created: 2026-07-21
---
パスワード入力欄でエラーメッセージが二重に出る問題を直す。
## メモ
2026-07-23: 再現手順を特定。バリデーションが二重登録されていた
frontmatter がメタ情報、本文の前半が「概要」、## メモ 見出し以降が進捗ログです。UI から編集しても、エディタでファイルを直接編集しても同じです。
これの何が嬉しいかというと:
- grep できる。過去のタスクを横断検索するのに専用の検索機能が要らない
- git 管理できる。社内 Git にコミットすればバックアップも履歴も付いてくる
- ツールを捨ててもデータが残る。ただの Markdown なので、このツールをやめても読める
機能はこれだけ
個人用なので、必要十分に絞っています。
- カンバン(Todo / Doing / Done、ドラッグで移動)
- 統計タイル(未完了 / 進行中 / 期限切れ / 直近 7 日で完了。クリックでそのままフィルターになる)
- フィルター(期限・担当者・プロジェクト)。プロジェクトはタブで看板ごと切り替え
- タスクの自動採番(#1, #2, …)と、タスクごとの URL・単一ページビュー
- 削除は確認ダイアログなしで即実行 + トーストの「元に戻す」方式
逆に、複数人での同時編集・認証・公開機能は最初から捨てています。チームで使いたくなったら素直に SaaS を使うべきで、これは「SaaS が使えない人」のためのツールなので。
AI エージェントから読み書きできるようにした
個人的に一番気に入っているのがここです。リポジトリに AGENTS.md を置いて、ファイル形式の不変条件と HTTP API の仕様を AI エージェント向けに書いてあります。
これで Claude Code などに、こういう頼み方ができます。
- 「◯◯というタスク追加しといて」→ POST でタスクが増える
- 「#3 完了にして、進捗メモも書いといて」→ status 変更 +
## メモに追記 - 「今週期限切れそうなタスク出して」→ API を叩いて要約してくれる
データソースがただのファイル + ローカル API なので、人間と AI が同じデータを同じ作法で触れます。
そして、ここまで来ると気づくのですが、タスクの管理を頼めるということは、タスクの実行そのものを頼めるということです。
タスクは Claude Code が動いているのと同じマシンのファイルなので、「#3 やっといて」と言えば、エージェントが概要欄を読んで作業に着手し、終わったら status を done にして進捗メモに結果を書き残す、まで一気通貫でやれます。タスク票がそのまま AI への作業指示書になり、消化まで自動で閉じるわけです。人間の仕事は、着手可能な粒度でタスクを書くことと、上がってきた結果を確認することに寄っていきます。
ちょっとした工夫として、AGENTS.md には「タスク登録前に、その内容だけで実行に着手できるか点検しろ」というルールも書いてあります。「電話するタスク入れといて」みたいな曖昧な依頼だと、AI が「誰に・何の用件ですか?」と聞き返してくれます。未来の自分(や、実行を任される AI)が読んで着手できないタスクは、登録できても意味がないので。
実装の小ネタ
作りながらいくつか学びがあったので置いておきます。
依存ゼロでも意外と困らない。 サーバーは node:http の素の HTTP サーバー + 自前の frontmatter パーサー(正規表現数行)です。YAML の高度な記法を捨てて「値は 1 行プレーンテキストのみ」と割り切れば、パーサーは 30 行で済みます。
<dialog> 要素が便利。 タスク詳細のドロワーはネイティブの <dialog> で、Esc で閉じる・フォーカストラップ・閉じたら元の位置にフォーカスが戻る、が全部標準で付いてきます。ただし CSS で display: flex を当てると hidden 属性が効かなくなる罠があるので、[hidden] { display: none !important; } はお守りとして必要でした。
UI の状態は URL に載せる。 フィルターや選択中タスクを ?project=webapp&task=… のようにクエリに持たせると、ブックマーク・共有・ブラウザバックが全部タダで手に入ります。ローカルツールでもこれはやる価値がありました。
AI に組ませるなら「上書き事故」に気をつける。 開発中、「フォーカス中の入力欄は再描画で上書きしない」という最適化が原因で、別タスクを開いても前のタスクのタイトルが残って自動保存され、全タスクのタイトルが同じ名前に伝染する事故を起こしました。自動保存 UI では「同じオブジェクトの再描画」と「別オブジェクトへの切り替え」を区別しないと危ない、という教訓です。
今後やりたいこと(高度化の妄想)
データがただのファイル + ローカル API なので、拡張の余地はいろいろあります。
- MCP サーバー化 — 今は AGENTS.md + HTTP API ですが、MCP 化すれば Claude Desktop など他の AI クライアントからも同じ作法で触れるようになります
- 朝の定例ブリーフィング — cron で Claude Code をヘッドレス起動して、「今日の期限・積み残し・昨日完了したもの」の要約を毎朝ファイルに吐かせる。秘書の朝会です
- 議事録からのタスク自動起こし — 会議メモの Markdown を渡して「アクションアイテムを登録しといて」。AGENTS.md の具体性チェックがあるので、曖昧な項目は聞き返してくれるはず
- コミットとの紐付け — git hook で「#12 対応」を含むコミットを検知して、タスク #12 の進捗メモに自動追記
そして本当は Slack 連携の ChatOps がやりたい。「タスク積んどいて」と bot に投げて、昼に「進捗どう?」と聞かれたい。……ただ、それが許される環境なら僕はそもそも最初から Jira とか Github Issue を使っています。統制の壁の内側でどこまで快適にやれるか、が工夫のしどころです。
GitHub
👉 https://github.com/t-tonton/local-taskboard
クローンして node server.mjs するだけで動きます。
おわりに
「統制で SaaS が使えない」という制約は一見ネガティブですが、おかげで「データを全部自分のファイルシステムに置く」という設計に振り切れて、結果的に AI エージェントとの相性がすごく良くなりました。
ローカルのプレーンテキストは、人間にとってもエージェントにとっても一番扱いやすいデータベースなのかもしれません。同じ境遇の方の参考になれば嬉しいです。
