The Platinum Searcher - 日本語文字コードに対応したGo言語製の高速検索ツール

S 20180904 111408

世界には「grep -r」には満足できずに開発された高速検索ツールが多数存在します。

それらのツールを使用すると、ディレクトリ以下に含まれるテキストファイルを特定のパターンで高速に検索することができますが、例えば有名なThe Silver Searcherには、検索対象のテキストファイルに含まれる日本語の文字コードがUTF-8に限定されるという制限があります。

今回紹介する「The Platinum Searcher」はそのような制限を回避するために作成された、Go言語製の高速検索ツールです。

日本の開発者monochromegane氏によって作成され、UTF-8のほかEUC-JPやShift JISといった日本語文字コードにネイティブに対応しています。

公式サイトには以下のような特徴がリストアップされています。

  • ackの3〜5倍高速
  • agよりも高速
  • .gitignoreで指定されたパターンを無視
  • ドット(.)で始まるファイルを無視
  • UTF-8、EUC-JP、Shift JISに対応
  • macOS、Windows、Linuxのマルチプラットフォーム対応

以下使用方法を説明します。

The Platinum Searcherのインストール

macOSでHomebrewを使っている場合、以下のコマンドでインストールできます。

 
brew install pt

Homebrewを使用していない場合、または他のプラットフォームを使用している場合は、GitHubのリリースページからバイナリファイルをダウンロードします。

The Platinum Searcherの使用方法

ptの最もシンプルな使用方法は「pt パターン」です。

pt bootstrap

上のコマンドを実行するとカレントフォルダ以下のファイルから「bootstrap」が含まれる文字列を検索することができます。検索にマッチした場合、パターンが含まれるファイルや、パターンが実際にマッチした箇所が色つきでカラフルに出力されます。

S 20180904 113320

「pt オプション パターン パス」のように各種オプションや検索対象のパスを追加する事も可能です。指定可能なオプションは単に「pt」と実行するか、「pt --help」で確認可能です。

$ pt
Usage:
  pt [OPTIONS] PATTERN [PATH]

Application Options:
      --version             Show version

Output Options:
      --color               Print color codes in results (default: true)
      --nocolor             Don't print color codes in results (default: false)
      --color-line-number=  Color codes for line numbers (default: 1;33)
      --color-path=         Color codes for path names (default: 1;32)
      --color-match=        Color codes for result matches (default: 30;43)
      --group               Print file name at header (default: true)
      --nogroup             Don't print file name at header (default: false)
  -0, --null                Separate filenames with null (for 'xargs -0') (default: false)
      --column              Print column (default: false)
      --numbers             Print Line number. (default: true)
  -N, --nonumbers           Omit Line number. (default: false)
  -A, --after=              Print lines after match
  -B, --before=             Print lines before match
  -C, --context=            Print lines before and after match
  -l, --files-with-matches  Only print filenames that contain matches
  -c, --count               Only print the number of matching lines for each input file.
  -o, --output-encode=      Specify output encoding (none, jis, sjis, euc)

Search Options:
  -e                        Parse PATTERN as a regular expression (default: false). Accepted syntax
                            is the same as https://github.com/google/re2/wiki/Syntax except from \C
  -i, --ignore-case         Match case insensitively
  -S, --smart-case          Match case insensitively unless PATTERN contains uppercase characters
  -w, --word-regexp         Only match whole words
      --ignore=             Ignore files/directories matching pattern
      --vcs-ignore=         VCS ignore files (default: .gitignore)
      --global-gitignore    Use git's global gitignore file for ignore patterns
      --home-ptignore       Use $Home/.ptignore file for ignore patterns
  -U, --skip-vcs-ignores    Don't use VCS ignore file for ignore patterns
  -g=                       Print filenames matching PATTERN
  -G, --file-search-regexp= PATTERN Limit search to filenames matching PATTERN
      --depth=              Search up to NUM directories deep (default: 25)
  -f, --follow              Follow symlinks
      --hidden              Search hidden files and directories

Help Options:
  -h, --help                Show this help message

検索時によく指定するオプションを設定として保存しておきたい場合、TOML形式の設定ファイル($HOME/.ptconfig.tomlやカレントディレクトリのptconfig.toml)にオプションを記述しておきます。内容はコマンドラインオプションと同様の書式となります。

color = true
context = 3
ignore = ["dir1", "dir2"]
color-path = "1;34"

色設定や無視するフォルダの設定を記述しておくと便利です。

まとめ

The Platinum Searcherを利用すれば、UTF-8だけではなくEUC-JPやShift JISで記述されたテキストファイルも高速検索することができます。Go言語で作られているためUnix由来のツールがうまく動かない事が多いWindows環境で簡単に使えるのも魅力的だと思います。

スポンサーリンク