Vigilare
Appleリマインダーをフローティングウィンドウで常に最前面に表示するmacOSアプリ。
何を解いているか
タスクは、見ていないあいだに忘れられます。macOSではタスク管理アプリもウィンドウのひとつなので、エディタやブラウザをフルスクリーンにした時点で視界から消えます。呼び戻すには、いま集中していることを一度手放さなければなりません。Vigilareが扱っているのはこの一点です。
なぜ作ったか
新しいタスク管理サービスを作る選択はしませんでした。Macにはすでに Apple リマインダーがあり、iCloud同期も、iPhoneからの入力も動いています。足りていないのは保管場所ではなく、それを見続ける方法でした。 Vigilare は EventKit 越しに Apple リマインダーを読み書きするだけのアプリとして作っています。データはVigilareの中に入りません。アプリを消してもリマインダーは残り、標準のリマインダーアプリと同時に開いていても構いません。移行作業が要らないので、合わなければ消すだけで終わります。
設計の判断
タスクの実体は Apple リマインダーに置く
EventKit越しにAppleリマインダーを読み書きし、タスクを保存する独自のデータベースは持っていません。 CoreDataもSwiftDataも使っていません。 同期基盤やアカウントを作らない代わりに、純正アプリや他の端末との共存を最初から得ています。 Vigilare側に残るのは、ウィンドウの位置などの表示状態だけです。
タスクの実体は Apple 側にあり、Vigilare 側には表示の状態しか残らない ステータスとコメントはノート欄に置く
EventKitにはステータスもコメントも項目がありません。 別のテーブルを作ってIDで紐付けるのではなく、リマインダーのノート欄にYAML frontmatterとして書き、表示のときだけ外しています。 純正アプリではメタデータも文字として見えますが、同期はリマインダー本体と同じ経路に乗ります。
ノート欄という 1 フィールドを、メタデータと本文の 2 つの範囲として使う EventKit に触るのは常駐プロセスだけ
MCPクライアントが起動するプロセスは、EventKitに触りません。 16個のツールのうち権限の要らない2つだけを自分で答え、残りはソケット越しに常駐プロセスへ毎回渡しています。 in-processの代替経路を置いていないので、MCPが使えるかは設定を有効にしたかどうかだけで決まります。
EventKit に触るのは常駐プロセスの内側だけ。境界を越えるのはソケット 1 本 共有するのはコア、分けるのは View
Model・UseCase・ViewModelはVigilareKitにまとめ、iOS側はViewだけを持つ構造にしています。 20ファイルのうち19がVigilareKitをimportし、編集画面のViewModelはmacOSと同じものを使います。 複数選択やドラッグのようなmacOS固有の仕組みは、アプリ側に残しています。
View だけを OS ごとに分け、その下は VigilareKit に合流する
提供形態
- 対応プラットフォーム
- macOS / iOS / iPadOS
- 動作要件
- macOS 15.4 以降(Apple Silicon / Intel)
- 価格
- macOS版は買い切り、iOS / iPadOS版は無料
- 配布
- App Store
- データの保存先
- Appleリマインダー(iCloud同期)。Vigilare側にデータベースを持ちません
- AI連携
- MCPサーバー内蔵
- プラットフォーム
- macOS
- iOS
- iPadOS
開発の記録
Vigilareを作るなかで書いた記事です。
ほかのプロダクト
同じプラットフォーム向けに作っているものです。
