タスクをMarkdownファイルとして開き、内容を書き換えると、タスク管理アプリにも変更が反映されます。ラビーでは現在、VigilareのmacOS版にその仕組みを研究機能として実装し、ファイル操作を通じたタスクの作成・更新・完了・削除まで実機で確認しています。
開発中の機能であり、配布中のバージョンで利用できるという案内ではありません。今回は実装手順よりも、なぜタスクをファイルとして扱いたくなったのかと、動かしてみて何が変わったのかを書きます。
VigilareFloating Reminders for macOSKeep your Apple Reminders always on top with a floating window for macOS. Works in fullscreen apps, with quick actions, list filtering, and a built-in Markdown editor.人とAIで、同じタスクを触りたい
Vigilareは、Appleのリマインダーと連携するタスク管理アプリです。人がアプリの画面から操作するほかに、MCPを通じてAIからタスクを扱う機能も持っています。MCPは、AIアプリから外部のツールやデータを利用するための接続方法です。
以前はCLIも一時的に提供していました。ただ、当時はmacOSのプライバシー権限(TCC)をアプリと呼び出し元の間でどう分けるかに手間がかかり、外部からの操作をいったんMCPに絞っていました。その後、TCCの挙動を調べて権限をアプリ側に集約できたので、今ならCLIも同じ仕組みにつなぐことで、ターミナルアプリにリマインダー権限を渡さずに動かせます。
今回はCLIを復活させる前に、ファイルの読み書きでタスクを管理する方法を試すことにしました。コードやドキュメントを扱うAIエージェントは、すでにファイルを探し、読み、編集しています。その作業の続きで、タスクもファイルとして扱えるようにしてみました。
たとえば、実装を終えたあとに対応するタスクのファイルを開き、完了へ変更する。調査で残った論点を、新しいタスクのファイルとして書く。普段の開発で使うファイル操作を、タスク管理にも使う試みです。
ラビーが今年のテーマにしている「人間もAIも使える、同じツール」にもつながります。人はVigilareの画面やFinderから、AIは許可されたファイル操作から、同じタスクにアクセスします。どちらかのためにタスクを別の場所へコピーし続ける運用は増やしたくありません。
リストをフォルダー、タスクをMarkdownにする
今回使ったのは、AppleのFile Providerです。アプリが管理する内容をシステムのファイルとして提供する仕組みを、Vigilareのタスクにも使っています。
公開を有効にすると、FinderからVigilareのフォルダーを開けます。その中にリマインダーのリストがフォルダーとして並び、各タスクがMarkdownファイルになります。名前を置き換えた例では、次のような見え方です。
Vigilare/
開発/
設定画面を確認する.md
調査結果を整理する.md
買い物/
コーヒーを買う.md
最初はひとつのリストで試し、その後、アクセスできる全リストを公開する形へ広げました。ファイル名にはタスク名を使い、同名などで衝突する場合に識別用の文字列を加えます。
タスクの保存先は引き続きAppleリマインダーです。VigilareはEventKitを通じてそのデータを読み書きし、File Provider側にはファイルとして見せるための情報を持たせています。以前の記事で扱った、Vigilareと標準リマインダーが同じ保存先を使う構成に、ファイルから操作する経路を足しました。
VigilareとAppleリマインダーの保存先を扱った記事
書き出して眺めるところから、タスクを変更するところまで
ファイルとして読めるようになると、そのまま編集したくなります。ここを一方向の書き出しで止めず、変更を元のタスクへ戻すところまで実装しました。
| ファイルでの操作 | Vigilare側の動作 |
|---|---|
| リストのフォルダーを開く | そのリストのタスクを参照する |
| 新しいMarkdownファイルを作る | そのリストにタスクを作成する |
| タスクのファイルを編集する | 内容や対応する属性を更新する |
| 完了状態を書き換える | タスクを完了、または未完了にする |
| タスクのファイルを削除する | 元のタスクを削除する |
各ファイルの先頭には、タイトルや完了状態などの情報が入っています。既存ファイルの完了状態を変える場合は、該当する行を次のように変更します。ファイル全体をこの行だけで置き換えるわけではありません。
completed: true
新規作成では、リストのフォルダーに新しい.mdファイルを置き、本文にメモを書けばタスクになります。保存先のフォルダーによって所属リストが決まり、ファイル名が初期のタイトルになるので、作成時にリストの識別子を調べて埋め込む操作は要りません。
実機検証では、ファイルを作ってタスクが増えること、内容や優先度を変えて反映されること、完了状態を変えられること、ファイルを削除すると元のタスクも削除されることを確認しました。実際の開発タスクへの進捗追記や完了の記録にも、この経路を使っています。
保存できたことと、反映されたことを分ける
ファイルとして扱えるようにしても、同期は瞬時に終わるとは限りません。エディターの保存が成功しただけでは、元のタスクに変更が届いたかまでは分かりません。検証でも、ファイルを書いた後に公開元のデータを読み直し、意図した内容になったことまで確認しました。
同じタスクをアプリ側で編集する場面もあります。古いファイルを保存した結果、新しい変更を上書きしてしまうと困ります。今回の実装ではファイルに更新の識別情報を持たせ、元のタスクとの食い違いを検出した場合は、そのまま書き戻さないようにしています。
ファイルに見える項目を全部編集可能にしたわけでもありません。識別子や自動で記録する日時は保護しています。コメントや繰り返しの情報は参照できますが、今回のファイル経由の編集対象には含めていません。
接続が切れた後の復旧も、一覧を表示するだけの段階では見落としやすい部分でした。公開を停止して再開したときに、古い接続を保持したままにならず、自動でつなぎ直して読み書きを続けられることまで確認しています。
全リストを見せるので、最初はオフにする
設定には「Finderに公開」のスイッチを追加しました。初期状態ではオフになっており、利用者がオンにしたときに公開します。既に明示的にオンにしていた場合は、その選択を引き継ぎます。
ここでいう公開は、Finderからファイルとしてアクセスできるようにすることです。インターネット上へタスクを掲載する機能ではありません。ただ、公開先のファイルを扱う権限があるエディターやAIエージェントからは、タスクを読み書きできるようになります。全リストを対象にする以上、利用者が何を許可するのかを設定画面に書いておく必要があります。
画面には、ファイルの編集・削除がリマインダーにも反映されることと、更新を続けるためにバックグラウンド実行を使うことを記載しました。接続状態や最終公開日時を確認し、Finderで開く操作もここにまとめています。
公開を止める操作では、元のリマインダーを残したまま、ファイルとしての公開を終了します。未同期の編集をmacOSが別のフォルダーへ保護した場合には、設定からその保存先を開けます。タスクのファイルを削除する操作と、公開そのものを止める操作は、結果が違います。
MCPをどこまでファイル操作で代替できるか
ここまで動くと、MCPを通じて行っていた操作のうち、どこまでファイルで済むのかも調べたくなります。少なくとも今回確認したタスクの作成・更新・完了・削除は、MCPを呼ばずに実行できました。
ただし、MCPサーバーの廃止はまだ決めていません。リストの作成・名前変更・削除は、今回のFile Providerでは受け付けていませんし、コメントや繰り返しの編集も残っています。内部の同期処理は既存のバックグラウンドサービス上で動いているので、外からMCPを呼ばなくなったことだけで、そのサービスまで削除できるわけではありません。
次に確かめたいのは、普段使うエディターやAIエージェントから、追加の専用操作をどこまで減らせるかです。ファイルの保存や競合時の挙動も、実際の利用環境で詰める余地があります。配布版での検証も別に残しており、提供時期はまだ案内していません。
タスクの表示方法をひとつ増やす実験から始めて、開発の最後にファイルを更新してタスクを完了にするところまで来ました。人が画面で使っている道具を、AIも普段のファイル操作で使う。その使い方がどこまで日常の作業に馴染むか、Vigilareで試していきます。

