FindX - 高速ファイル検索アプリ - AIでアプリ開発

  • 投稿日:
  • カテゴリ:

【CursorエディタとXcodeでアプリ開発】

FindX - macOSの高速ファイル検索アプリを自作してみた

はじめに

みなさん、macOSのSpotlight検索って便利ですよね。でも、特定のフォルダ内だけを検索したい時や、検索結果をもっと詳しく見たい時ってありませんか?私はいつも「もっと使いやすくならないかなぁ」と思っていました。

そんな思いから、macOSのSpotlightエンジンを活用した高速ファイル検索アプリ「FindX」をSwiftUIで自作してみました。FinderのSpotlightと同等の性能を持ちながら、もっと使いやすいインターフェイスを目指しています。

screenshot_m219.png

なぜFindXを作ろうと思ったのか?

既存のSpotlightで困っていたこと

  • フォルダ指定検索が意外と面倒
  • 検索結果の詳細情報が物足りない
  • プレビュー機能が別々になっていて不便
  • どのアプリで開けるか分かりにくい

FindXで実現したかったこと

  • 指定フォルダ内での高速検索
  • 検索結果とプレビューを一緒に表示
  • ファイルの詳細情報をもっと充実
  • 直感的で使いやすいインターフェイス

技術的なアプローチ

検索エンジンの選択

FindXでは、macOSに標準搭載されている「mdfind」というコマンドを活用しています。これは普段使っているSpotlight検索と同じエンジンです!

mdfindを選んだ理由

  • macOSのSpotlightと同じ検索エンジンを使える
  • インデックス済みデータを利用するから超高速
  • コマンドラインから直接使える
  • 検索クエリを自由にカスタマイズできる

検索クエリの構築

検索する際に、ファイル名だけで検索するか、ファイルの中身も含めて検索するかを選べるようにしています。また、テキストファイルのみに絞って検索することも可能です。

メタデータ属性の活用

  • ファイル名検索: ファイル名に含まれる文字列で検索
  • コンテンツ検索: ファイルの中身に含まれる文字列で検索
  • ファイルタイプ指定: 特定の種類のファイルのみを対象に検索

主な機能と実装

1. 高速検索機能

非同期処理によるUI応答性
検索処理は別のスレッドで実行し、UIの表示はメインスレッドで更新するようにしています。これにより、検索中でもアプリが固まることなく、快適に操作できます。

実際の検索速度

  • 小規模フォルダ(1,000ファイル): 0.1-0.5秒で完了
  • 中規模フォルダ(10,000ファイル): 0.5-2秒で完了
  • 大規模フォルダ(100,000ファイル): 2-10秒で完了

2. 内蔵プレビュー機能

画像プレビュー
JPG、PNG、GIF、TIFF、HEICなどの画像ファイルを、検索結果と一緒にプレビューできます。画像のサイズに合わせて自動的に調整されるので、見やすく表示されます。

テキストプレビュー
TXT、MD、JSON、XML、HTML、CSS、JS、Swift、Python、Java、C++などのテキストファイルの中身を直接プレビューできます。コードファイルの場合は、等幅フォントで表示されるので、プログラムコードも読みやすくなっています。

PDFテキスト抽出
PDFファイルからもテキストを抽出してプレビューできます。macOSの「strings」コマンドを活用して、PDF内のテキストを読み取っています。

3. Quick Look連携

サポート外ファイルの表示
FindXで直接プレビューできないファイル(動画、音声、特殊な形式のファイルなど)は、macOSの「Quick Look」機能を使って表示できます。これにより、ほぼすべてのファイル形式に対応できます。

4. 関連アプリ表示

Launch Servicesを活用したアプリ検索
ファイルを開くことができるアプリケーションを自動的に検索して表示します。macOSの「Launch Services」という仕組みを使って、そのファイルを開けるアプリを探し出しています。

ユーザーインターフェイスの設計

レスポンシブデザイン

  • サイドバーの幅調整可能
  • ウィンドウリサイズに対応
  • ダークモード自動対応

開発を通じて学んだこと

1. SwiftUIとAppKitの連携

  • 画像の表示や変換が意外と簡単にできた
  • macOSのワークスペース機能の便利さを実感
  • システムAPIを使ったプロセス管理の奥深さを知る

2. 非同期処理の最適化

  • 処理の優先度の使い分けが重要
  • UIの表示とバックグラウンド処理を分離することで快適な操作感を実現
  • メモリ効率を意識した実装の大切さ

3. ファイルシステムとの連携

  • ファイルのメタデータを活用することで検索精度が向上
  • ファイル権限を考慮することでエラーを回避
  • エラーハンドリングの実装でアプリの安定性を確保

今後の改善予定

機能追加

  • 検索履歴の保存
  • お気に入りフォルダの登録
  • 検索フィルターの拡張
  • バッチ操作機能

パフォーマンス改善

  • 検索結果のページネーション
  • キャッシュ機能の実装
  • メモリ使用量の最適化

まとめ

FindXの開発を通じて、macOSのSpotlightエンジンの強力さと、SwiftUIでのアプリ開発の可能性を改めて実感しました。

今回の開発で達成できたこと

  • Spotlightと同等の検索性能を実現
  • 直感的で使いやすいユーザーインターフェイスの構築
  • 内蔵プレビュー機能で作業効率が向上
  • Quick Lookとの連携で幅広いファイルに対応

技術面での大きな学び

  • システムAPIの活用方法が分かった
  • 非同期処理の最適化の重要性を理解
  • ファイルシステムとの連携の奥深さを体験

このアプリは個人的な「もっと使いやすくしたい」という思いから生まれましたが、macOSの検索機能をより使いやすくする一つのアプローチとして、みなさんの参考になれば嬉しいです。


開発環境

  • macOS 15.4
  • Xcode 16.0
  • Swift 5.0
  • SwiftUI

コード行数: 約800行

リンクソース

  • 記事用リンクソース:
  • Wiki用リンクソース(PukiWiki):
  • Wiki用リンクソース(MediaWiki):
  • SNS投稿用: