システムアーキテクチャ設計
Lertaro は、ミリ秒単位の超高速検索と高度なデスクトップ統合を実現しつつ、最高のシステム安定性とセキュリティを確保するために、疎結合なマルチプロセス分離モデルを採用しています。
1. 3 プロセス分離モデル
単一コンポーネントの不具合によるシステム全体のクラッシュを防ぎ、管理者権限の範囲を最小限に抑えるため、Lertaro の実行環境は 3 つのプロセスに明確に分離されています。
1. バックグラウンドインデックスサービス(Lertaro.Service)
- 実行権限:Windows システムの
LocalSystem権限で常駐する Windows サービス。 - 担当範囲:全ドライブのインデックス作成と変更監視を担当。NTFS / ReFS ドライブの USN 変更ジャーナルおよび $MFT を直接読み取り、FAT32 / exFAT の変更イベントを監視し、SMB / NAS 共有を定期的にキャッシュします。
- セキュリティと性能:SYSTEM 権限で実行されるため UAC プロンプトなしで低レベルのボリュームメタデータに直接アクセスでき、高速な名前付きパイプを通じて結果をユーザープロセスの App に返します。UI プロセスに不要な管理者権限を持たせない安全な設計です。
2. ユーザー UI メインプロセス(Lertaro.App)
- 実行権限:標準ユーザー権限で動作するセッション分離された WPF デスクトップアプリ。
- 担当範囲:クイック検索ウィンドウ、メイン検索ウィンドウ、設定画面、グローバルホットキー処理、アクションメニュー(
Ctrl+O)、QuickLook プレビューを担当。 - IPC と CLI 共有:名前付きパイプ(
Core.Services.SearchService)を介してサービスと通信します。また、ユーザーごとの名前付きパイプ(AppSearchPipeService)をホストしており、lffコマンドラインツールが App の構築済みメモリテーブルやプラグインを再初期化なしで共有利用できます。
3. キーボードフック・ウィンドウ統合プロセス(Lertaro.Service --hook)
- 実行権限:バックグラウンドサービスから必要に応じて起動される専用の特権プロセス。
- 担当範囲:低レベルキーボードフックおよびマウス監視を担当。
- UIPI の回避と耐障害性:Windows の UIPI(ユーザーインターフェイス特権の分離)により、低権限プロセスから管理者権限で実行中のウィンドウへメッセージを送信することは制限されています。この特権 Hook プロセス上でウィンドウアダプター(
IActivePathCollector,IFileDialogAdapter,IInlineSearchAdapter)を実行することで、管理者権限のエクスプローラーやダイアログにも支障なくフックできます。また、フック処理がクラッシュしてもメイン App には影響しません。
2. 共通コアライブラリ(Lertaro.Core)
Lertaro.Core は、Service、App、Hook の各プロセスから共通して参照される基本ライブラリです。
- 独自 fzf あいまい一致エンジン(
Core/SearchIndex/Fzf/*):fzfアルゴリズムに基づく高速な文字飛び一致、スコアリング、ハイライトマスク計算を実装。 - 列指向インメモリインデックス(
Core/IndexV2/*):メモリマップト列指向スナップショットとインメモリ差分レイヤーにより、数億件のファイルからミリ秒未満で結果を抽出。 - バイナリ IPC 通信仕様:
SearchRequestMessageなどの標準バイナリプロトコルにより、プロセス間でゼロコピーに近い高速なシリアライズを実現。 - 統合ログシステム(
Logger):service.log、app.log、hook.logにそれぞれ出力し、設定画面のログビューアーから統合的に閲覧可能。
3. プラグインシステムのアーキテクチャ上の位置づけ
すべてのプラグインは Lertaro.PluginSdk をベースに構築され、Lertaro.App 起動時に動的ロードされます。
- 標準コンポーネント:通常の検索ソース、アクション、UI 拡張は App プロセス内のみで動作し、Service に直接アクセスすることはありません(ディレクトリのインデックス登録は
DirectoryIndexerServiceを介して依頼)。 - 特権アダプターの二重ロード:ウィンドウ統合用のアダプター(
IActivePathCollector等)は、管理者権限ウィンドウとの連携を担保するため、Hook プロセス側にも追加ロードされて実行されます。