全文検索+インクリメンタルサーチ isGrep (旧名:IncreMonji)

ダウンロード

【ダウンロード】ベクター
または
【インストーラー】
isgrep-1.2.x.exe
【ポータブル版】
isgrep-portable-1.2.x.zip

対象OS:Windows2000/XP/Vista/7/8/8.1/10

【開発版インストーラー】
isgrep-1.3.x.exe (公開予定)

ソフト概要

・インデックス作成不要の全文検索(いわゆるgrep)
・ファイル単位のキャッシュ機能により二回目以降の検索が高速化→キャッシュ機能は外しました
・インクリメンタルサーチによる軽快な全文検索
・インデックス型ではないため、随時更新される開発中のソースコードに対してもリアルタイムで高速検索可能
・キーボードのみによる操作が可能
・大文字・小文字同一視、先頭一致単語、単語単位、正規表現、ローマ字(Options - Romaji Mode)
・マルチスレッド、メモリマップドファイルによる高速検索(現在最大4スレッド)
・ファイル名検索
・マルチタブによる複数同時検索
・マルチタブの状態保存・復元
・set memory (directory+mask+optionを記録、一発呼び出し)
・検索結果の絞り込み検索(AND検索)
・ShiftJIS、EUC-JP、JIS、Unicode(UTF-16/8)に対応 Options - Character Code Detection で自動判別
・検索結果をセンタリング表示 View - Centering
・検索結果をファイル名順、日付順、サイズ順でソート View - Sort
・検索されたファイルの情報表示
・巨大ファイル(1MB以上のファイル)に対する検索も分割キャッシュにより高速化→キャッシュ機能は外しました
・クリップボード経由の自動検索 Search - Use Clipboard Capture
・ファイルのオープン履歴 View - Jump History
・VUP通知機能、半自動VUP機能
---- Ver.1.1 ----
・preview機能 前後xx行を表示する
・Ctrl+Shift+↑↓、Ctrl+Space でpreview行数切り替え
・ディレクトリ入力欄の補完候補表示
・ファイル名のみ一覧表示にしたとき、ヒット行数、日付, サイズ, 文字コードなどを表示
---- Ver.1.2 ----
・エラーレポート機能(EurekaLog)
・最大検索スレッド数を4→16 ※旧版をご使用の方は設定で16に変更する必要があります
・ディレクトリ入力欄で \キーでサブディレクトリを確定
・タブ切り替えの履歴。Ctrl+Tab, Ctrl+Shift+TabでCtrlキーを押したままにすると古いタブへ移動
・検索結果の行をコピーする機能
・デフォルトの文字コードを指定可能(誤判定する場合に便利)
・コマンドラインから検索する - 現在のタブを使用して検索、すでの同じディレクトリがある場合はそれを利用
・History Jumpしたら、その項目を最新に移動
・Ctrl+Fでショートカットキーによるファイルオープンの追加
---- 以上正式版 ----
---- 以下検討中 ----
・CPUコア数に応じた最適なスレッド数での検索
・最大検索スレッド数を16→32
・Ctrl+Fによるショートカットキー以外の発動タイミングの追加
・検索語のサジェスト機能
・Qtへの移行
・Edit - Copyにヒット部分を含んだ単語の再検索の追加
・プレビューの選択肢として秀丸とか?
・ヒット行がウィンドウ内で表示しきれないとき、フォーカス時に延長表示する
・ヒット行からさらに文字を選択して検索する機能
・文字コードの認識に使用している文字数を増やすオプション(現在256バイト固定)
・ディレクトリ履歴 - Upper Directoryへ移動後戻す機能
・コマンドライン版、64bit版の用意
・英語ヘルプの作成
・さらなる高速化。(まだ無駄がある)
・bookmark機能/検索 - 検索結果をbookmarkして一発呼び出し、とか。☆ 動作するが作成中。。
・comment機能/検索 ☆ 動作するが作成中。。
・検索結果の履歴
・テキストファイルだけでなく、PDFなどもxdoc2txtを使って対応
・外部アプリとの連携機能(検索要求、検索結果)、標準出力機能(stdout)
・検索結果の比較・差分表示(タブ同士で) →別アプリに任せた方が良いかも?
・表示言語は英語(ローカライズは他の人にお任せ)。世界進出が目標。英語のHPも用意する予定。
・コマンドライン版を用意し、サーバーとしての利用など。

開発動機

最近のPCは昔に比べて高速になり、小〜中規模のソースコードならばgrepでも数秒以内で検索が完了できる。しかし、多くのUIは相変 わらずdialogをわざわざ開く必要があり煩わしい。そこでインクリメンタルサーチの全文検索があってもいいのではないか?ということで探したらbutterfly_searchと いうものがあったが、作者は多忙で遅々として進まず、無償で協力するとの申し出も、ソースコードの提供も頑なに拒み続けられたので、車輪を再発明することにし た。
当初、databaseを使って高速化しようと思ったが、昨今のPCはとても速いので、Linux kernelなどのような巨大プロジェクトでもない限り、ほとんど不要。むしろインデックス作成や管理の手間がかかり、開発者にとってもユーザーにとっても嬉しくない。そこで発想を転換、というより原始時代に戻してキャッシュ機能などを駆使して高速化するアプローチを採ることにした。これなら、ありふれたgrep検索としてす ぐに作り&使えるので、あとは必要なところを暇を見つけながら徐々に追加していける。

ただ純粋な疑問として、昨今のソースコードの巨大化に対して多くのプログラマーはどのような検索ツールを使っているんだろうか?見たものはすべて自分の頭にある、というような天才的なプログラマーを除けば相変わらずgrepで頑張っているんだろうか?職業的プログラマーならgrep検索で許せるかもしれないが(時間給でもらえるから)、自分のように趣味でプログラミングをやっている人間はgrepはかったるいと思うが・・・

自分が欲しいものを作る、世界に無いものを作る。

などと思いながら作ったけど、結局こういうのは好みの問題なのかな。

使い方

こちら

履歴

こちら

掲示板

掲示板

雑誌掲載・紹介等

ソースコード

ソースファイル:
moorea-src-20100917.zip
TntUnicodeControls-20100728.zip
tnlib2-src-20100810.zip
※利用者がいないと思われるため、更新していません。必要な方は掲示板へ。
※TntVCLはオリジナルから若干変更を加えてあります。
※フリーなTntVCLは現在では公開されていないと思います。
開発環境: C++Builder5 (GUI部分が独自であるためVisualStudioへはロジック以外の全移植が必要)
ソースコードツリー(参考例):
\src\moorea\<moorea-src-xxx.zip>
\src\VCL\TntLib\<TntUnicodeControls-xxx.zip>
\src\tnlib2\<tnlib2-src-xxx.zip>
というように展開する。(ディレクトリには非依存、便宜上)
構築手順:
1. TntVCLを付属の説明書(英語)に従ってinstall。(BCB5のフォルダにある)
2. tnlib2をmake -DUNICODE=1 でbuild。(makeはC++Builderに付属のmake, GNU makeはだめ)
3. moorea.bprをC++Builderで開く
4. moorea.bprの直下に obj ディレクトリを作成
5. \temp ディレクトリを作成(*.csmファイル保存用)
6. C++Builderでmooreaをbuild

技術検討

使い勝手が悪い
UIも今ひとつ。デザイナーの方お願いしますm(__)m

実現予定のアイデア
現時点ではcacheが溜まってくるとcache loadに時間がかかる。最適化を全然していないのだから当然なのですが。
・cache fileはディレクトリのハッシュ値で分散させる(現在256個)
・起動時は別スレッドで256個に分散されたcache情報をbackgroundでload/save→それよりファイル構造を改善した方がいい
・重複したcache情報は捨てる
・cache情報が冗長 - 圧縮も何もしていないのでとにかくサイズがでかい
・簡単なデータベースとも言えるので、何らかの変換処理、例えばローマ字検索のようなものに使えるかもしれない。単純計算すると、数GB程度のデータであ れば最速1秒程度で検索できることになり、その程度の遅延が許されるのなら使える。Googleは巨大・高速なデータベースを用意することで高速な検索が実現出来ているが、ネットワークとブラウザの持つ遅延のため不利。

・検索エンジンはコマンドラインアプリにして、単純なプロセス間通信で検索できるようにする
・64bit化。AMD64はregisterが多いからちょっとは速くなるのだろうか?
・wxWidgetに対応してMac/Linuxでも

速度の評価

こちら