Movatterモバイル変換


[0]ホーム

URL:


Glide Note

glidenote's blog

ackを捨てて、より高速なag(The Silver Searcher)に切り替えた

パターン検索にはackを利用していて、通常利用時には特に不満は無かったんですが、ファイル数が多いディレクトリだと遅かったので、もっと他の方法が無いかと調べていたらackの3〜5倍速いというThe Silver Searcherというものがあったので導入。

The Silver Searcherの特徴

公式に書いてあるThe Silver Searcherの特徴

  • ackの3〜5倍高速
  • .gitignore.hgignoreに記載されているものを検索対象から除外
  • 検索対象から除外したいファイルは.agignoreに記載
  • agというコマンド名で、ackと比べてコマンドが短い(33%減!)

なぜ高速なのかはhttps://github.com/ggreer/the_silver_searcher#how-is-it-so-fastに記載されています。(要約しにくいので、原文を読んでください!)

The Silver Searcherの導入

Macの場合はhomebrewで導入

1
brew install the_silver_searcher

2013/10/31 最近は下記でいけると新卒氏に教えてもらったので追記

1
brew install ag

CentOS6、SL6はRPMが用意されているので、下記を利用

12
sudo rpm -ivh http://swiftsignal.com/packages/centos/6/x86_64/the-silver-searcher-0.13.1-1.el6.x86_64.rpm --testsudo rpm -ivh http://swiftsignal.com/packages/centos/6/x86_64/the-silver-searcher-0.13.1-1.el6.x86_64.rpm

ソースから導入する場合(コンパイルにautomakeとかpcre-develが必要だと思いますので適時入れてください)

12
git clone https://github.com/ggreer/the_silver_searchercdthe_silver_searcher&& ./build.sh&& install

RHEL6系以外での利用も、specファイルが含まれているのでRPM作成も簡単に出来た。

The Silver Searcherの利用方法

The Silver Searcherはagというコマンドを用い、

1
ag[options]{pattern}[{directory}]

という感じで利用し、ほぼackと同じ。

実際に私の環境(MacBook Air)で、ackagで実行時間を計測した結果。

1234567891011121314151617
# ファイル数[akira@dev001]$find ~/repos -type f | wc -l    3518# ディレクトリ容量[akira@dev001]$du -sh ~/repos894M    .# ackの実行時間[akira@dev001]$timeack package ~/repos |wc -l    1475    ack package ~/repos  0.84s user 0.26s system 81% cpu 1.341 total# agの実行時間[akira@dev001]$timeag package ~/repos |wc -l    1668    ag package ~/repos  0.23s user 0.18s system 172% cpu 0.235 total

3500個くらいのファイル検索でもackと比べて、agが高速なのがわかる。多分ファイル数がディレクトリだとさらに効果がありそう。

実際にいろいろなディレクトリで何回か検索を実行してみても、agの方が高速でした。

VimからThe Silver Searcherを利用する

ackと同じで、Vimから使うことが多いと思うので、Vimから使えるようにする。ag.vimというプラグインがあるので、それを利用。

Vundleを利用している場合は.vimrcに下記を記載してBundleInstall

1
Bundle'rking/ag.vim'

NeoBundleの場合は下記を記載してNeoBundleInstall

1
NeoBundle'rking/ag.vim'

Vim上から下記のような形で利用

1
:Ag[options]{pattern}[{directory}]

Vim上からも高速にパターン検索が出来るようになって素晴らしい。

ZshからのThe Silver Searcherを利用する

当然zshの補完が効かないと話にならないので、zshの補完関数を書いた。

下記のように補完されます。

追記

zsh-completionsに出していたpull requestがmergeされたので、zsh-completionsからでも利用可能です。

ackと比較して動作もかなり高速だし、vim、zshから快適に使えるようになったので完全に切り替え。

Comments

About Me


Akira Maeda
@glidenote

このブログは個人的なものです。ここで述べられている内容は私の個人的な意見に基づくものであり、私の雇用者に一切の関係はありません

Recent Posts

人気エントリー


[8]ページ先頭

©2009-2026 Movatter.jp