はじめに
Pythonで開発しているタブ型・プレビュー付きのファイル検索アプリ「FileSearchExplorer」、前回の記事ではv0.4beta〜v0.5でファイル内容検索や結果の絞り込み・検索条件の保存などを追加した話をご紹介しました。
今回は久しぶりの大型アップデート「v0.6.0」をリリースしました。「もっと賢く条件を指定したい」「フォルダの中に溜まった重複ファイルを整理したい」という、自分自身が欲しかった機能をまとめて詰め込んでいます。
GitHubリポジトリはこちら:
https://github.com/Unknown777hello/FileSearchExplorer
v0.6.0での主な進化ポイント
「詳細検索」パネルを新設
検索条件エリアに、折りたたみ式の「詳細検索」パネルを追加しました。普段は隠れているので画面もすっきりしたままですが、ボタン一つで開くとかなり高度な絞り込みができます。
一致方法の切り替え:部分一致・完全一致に加えて、正規表現・あいまい検索(誤字補正)を選べるようになりました。あいまい検索は、Python標準のdifflibを使って類似度を判定し、多少のタイプミスや表記ゆれがあってもファイルを見つけられるようにしています。
AND / OR / NOT検索:キーワード欄に 見積 AND 2024 NOT 下書き のように書くだけで、複数語句を組み合わせた検索ができます。左から順番に評価する単純な仕様にしていますが、実用上はこれで十分だと感じています。
除外フォルダ指定:node_modules,.git のようにカンマ区切りで指定すると、そのフォルダごと検索対象から除外できます。開発用フォルダを検索するときにようやく快適になりました。
ファイルサイズ範囲検索・更新日時範囲検索・作成日時範囲検索:「10MB以上の動画だけ」「先月更新したファイルだけ」といった絞り込みができます。作成日時だけは今のところインデックス検索に対応していないため、指定した場合は自動的に通常検索(実フォルダを直接走査する方式)に切り替わるようにしています。
検索テンプレートを追加
「画像」「動画」「音楽」「文書」「圧縮ファイル」「実行ファイル」「コード」から選ぶだけで、その種類に合った拡張子・内容検索の有無・フォルダ検索対象の設定をまとめて適用できるテンプレート機能を追加しました。毎回拡張子を打ち直す手間がなくなります。
プリセット(検索条件の保存)を強化
v0.5で追加した「検索条件の保存」機能が、詳細検索の条件(一致方法・除外フォルダ・サイズ範囲・日時範囲など)も含めて丸ごと保存・呼び出しできるようになりました。よく使う検索の組み合わせを、テンプレート感覚でどんどん増やしていけます。
重複ファイル検索を新規追加
今回の目玉機能です。指定フォルダ以下から、内容が完全に同一のファイルをハッシュ比較で検出する「重複ファイル検索」を追加しました。
写真や資料のバックアップを繰り返しているうちに、気づけばストレージが同じファイルだらけ…ということはよくあると思います。それを解消するための機能です。
処理の流れとしては、まずファイルサイズでグループ分けし、サイズが一致するファイルだけを対象にSHA-256ハッシュを計算する2段階方式にしています。サイズが違えば内容も絶対に違うので、無駄なハッシュ計算をしないだけでもかなり高速になります。
検出結果は重複グループごとに一覧表示され、削除すればどれくらい容量を節約できるかの目安も表示されます。選択したファイルはその場で開く・フォルダを開く・パスをコピー・完全に削除、といった操作ができます(削除は元に戻せないので、実行前に必ず内容を確認する作りにしています)。
開発の裏話
一番悩んだのは、AND/OR/NOT検索の仕様をどこまで作り込むかでした。本格的にやるなら括弧での優先順位づけや、正規表現側との統合まで考えられるのですが、複雑にしすぎると誤操作の元になりますし、そもそも自分がそこまで使わないだろうと判断して、「左から順番に評価する」というシンプルな仕様に振り切りました。正規表現モードのときはAND/OR/NOTの分割自体を行わず、キーワード全体を1つのパターンとして扱うようにしているのも、正規表現の中にANDという文字列が偶然含まれていて意図せず分割されてしまう、という事故を避けるためです。
重複ファイル検索のハッシュ比較も、最初は「見つけたファイルを片っ端からハッシュ化する」実装で書いていたのですが、テストしてみると想像以上に時間がかかることに気づきました。考えてみれば当たり前で、サイズが違うファイルは絶対に重複しないので、先にサイズでふるいにかけてからハッシュを計算する方式に変更したところ、体感でもかなり速くなりました。地味な改善ですが、こういう「当たり前だけど気づいていなかった無駄」を見つけられるのが個人開発の面白いところだなと思います。
最後に(WindowsならPython不要で動きます)
今回もPython環境がないPCでも、Windows環境(10/11 64bit)ならReleasesからzipをダウンロードするだけでそのまま単体で動きます。
検索の自由度が上がり、重複ファイルの整理までできるようになったことで、また一段と「自分だけの最強検索ツール」に近づいてきました。
バグ報告や「こんな機能が欲しい!」といったフィードバックは、引き続きGitHubのIssuesでお待ちしています。ぜひスターもポチッとお願いします!
最新版のダウンロード(Releases):
https://github.com/Unknown777hello/FileSearchExplorer