find-my-files
Windows 専用のファイル名検索。NTFS の $MFT を直接読み、
USN ジャーナルで更新を反映する。Rust エンジンと WinUI 3 UI。
ファイル名のみを索引する。
Apache-2.0 ライセンス · Windows 10/11 (NTFS)
仕組み
- $MFT 直読みによる初回インデックス — NTFS の Master File Table を直接読み、1ボリュームあたり数秒で全ファイル名を取り込む。
- USN ジャーナルによる更新 — 変更通知は USN チェンジジャーナルから取得。ファイル監視・再スキャンは不要で、変更は約1秒で UI に届く。
- マルチスレッド検索 — インメモリ索引上を部分一致で走査。100万件・3文字以上で p99 ≤ 50ms。
- ネイティブ WinUI 3 — Mica、ダークテーマ、Per-Monitor V2 DPI。
- 省メモリ — ファイル名のみを索引するため、100万件で約100MB。
- 権限分離 — MFT/USN 読み取りの特権は Windows サービスに分離。UI は非特権で、同一ユーザー限定の名前付きパイプで通信する。
スコープ外
ファイル名のみを索引する。以下は対象外。
- content 検索
- プロパティ・タグ索引
- プレビュー
- FTP / HTTP サーバ
- FAT / exFAT / ネットワークドライブ
- ReFS
- クロスプラットフォーム
性能目標
最終マイルストーンで満たす数値目標。
| 指標 | 目標 |
|---|---|
| 初回インデックス(実C:) | 25万 ≈ 5s / 100万 ≈ 60s |
| 検索 p99(100万件・3文字以上) | ≤ 50 ms |
| 変更反映(USN → UI) | ≤ 1 s |
| スナップショット復元 → ready | ≤ 2 s |
| RAM(エンジン単体・バイト/ファイル) | ≤ 110 B |
アーキテクチャ
既定は非特権 UI + サービス。サービス未導入時は昇格 in-proc フォールバック。
WinUI 3 app(C#・非特権) ──named pipe──▶ fmf-service(Rust・LocalSystem)
└─ IEngineClient 境界 └─ fmf-core: $MFT走査・USN tailing・
├─ PipeEngineClient(既定) インメモリ索引・クエリエンジン
└─ FfiEngineClient ──P/Invoke──▶ fmf_engine.dll(昇格in-procフォールバック)
はじめる
ツールチェーンは mise で固定、タスクは just。
mise install # rust + dotnet just setup # toolchain + git hooks just build # エンジン(cargo, release) just service-install # サービス登録(昇格・一度だけ)
ビルド済みバイナリは Releases から。