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 ジャーナルによる更新 — 通常はファイル監視や全件再スキャンをせず差分を反映し、変更は約1秒で UI に届く。ジャーナルの連続性を失った場合だけ索引を安全に再構築する。
- マルチスレッド検索 — インメモリ索引上を部分一致で走査。100万件規模でも打鍵に追従するミリ秒級で返す。
- ネイティブ WinUI 3 — Mica、ダークテーマ、Per-Monitor V2 DPI。
- 省メモリ — ファイル名のみを索引するため、100万件で約100MB。
- 権限分離 — MFT/USN 読み取りの特権は Windows サービスに分離。UI は非特権で、同一ユーザー限定の名前付きパイプで通信する。
スコープ外
ファイル名のみを索引する。以下は対象外。
- content 検索
- プロパティ・タグ索引
- プレビュー
- FTP / HTTP サーバ
- FAT / exFAT / ネットワークドライブ
- ReFS
- クロスプラットフォーム
性能
待ち時間を感じる場所を残さない。
- 初回インデックス — 一般的な C: ドライブで数秒。以後の起動はスナップショットから即座に立ち上がる。
- 検索 — 打鍵ごとに走り、100万件規模でもミリ秒級で返る。
- 更新の反映 — 作ったばかりのファイルが、ほぼ即座に結果へ現れる。
具体的な数値目標と測定条件はリポジトリの回帰ゲートが定義し、リリースごとに検証している。
アーキテクチャ
既定は非特権 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(昇格済み起動のみ)
はじめる
Windows 10/11 (NTFS)。zip を展開して起動し、初回だけ UAC 1回でサービスを登録する。
ソースからのビルド手順は GitHub リポジトリの README にある。