開発者ならば誰もが、指定ディレクトリ以下に含まれるソースコードをざっくり「grep」したいと思った事があると思います。古典的な方法では「grep -r」がありますが、最近はThe Silver Searcher(ag)や、ripgrepなど専用の高速検索ツールが使われるようになっています。
本日紹介する「ack」もこのタイプのツールです。
ピュアPerl 5製のツールでポータビリティが高く、Perlの強力な正規表現が利用できるという特徴を持っています。
主な特徴は以下の通り。
- とても高速: 必要なファイルだけを検索できるので速い
- より良い検索: デフォルトでSubversionやGitなどの管理ディレクトリなどを除外
- コード検索用: 汎用のgrepに比べackはソースコード専用なので少ないタイプで利用できる
- 高いポータビリティ: ピュアPerl製なのでWindowsでも変更なしに動作
- 無料かつオープンソース: 100%無料でオープンソース(Artistic License v2.0採用)
以下使用方法を説明します。
ackの使用方法
ackはPerlのPANモジュールとしてインストールして、Perlモジュールとして利用することができます。単体の実行可能スクリプトとして利用したい場合、例えばMacのHomebrew環境では以下の方法でインストール可能です。
brew install ack
例えばカレントディレクトリ以下から"rails"を含むファイルを検索したい場合、次のように実行します。
ack rails
該当するファイルや、一致部分がわかりやすく表示されることがわかります。
検索対象のファイルを絞り込むことでさらに高速化することもできます。Ruby関連のソースコードだけを検索したい場合オプションに"--ruby"を追加します。
ack -ruby rails
"--ruby"を指定した場合、.rb .rhtml .rjs .rxml .erb .rake .specといった拡張子を持つファイルのほか、Rakefileや先頭行が/^#!.*\bruby/にマッチするファイルが対象となります。
その他多数のプログラミング言語別ファイルタイプがあらかじめ定義されていて利用可能です。詳細はack's file typesで確認可能です。
利用可能なオプションや引数は「ack」と打ち込めば確認可能です。
まとめ
ackはPerl製の高速ファイル検索ツールです。ackとag、git-grep、GNU gpre、ripgrepを比較した、機能比較表も作られていますのでこれらツールを利用している方は参考にしてみてはいかがでしょうか。