PHPプログラマーの松永です。
今回は、Grepをより高速化したツール「highway」をご紹介いたします。
ファイルまたぎの検索をGrepよりも速く簡単にできるツールなので、実装やログ確認時などの参考になれば幸いです。
目次
検索ツール種類
検索ツールにはhightway以外にも下記のような様々なツールがあります。
- grep
- ack
- ag
- pt
- sift
どのツールもメリットは様々あるのですが、
一番のデメリットは「EUC-JP/SJISの検索に対応していない」ことです。
業務としては、UTF8のプロジェクトが増えつつあり、以前よりもあまり文字コードを気にする機会が少なくなりましたが、
やはり日本にいる限りEUC-JP/SJISから逃げることができません。
EUC-JP/SJISのプロジェクトになった途端普段使用しているagが使えない・・・
「hightway」はそんなストレスから開放してくれます。
hightway
http://tkengo.github.io/blog/2015/10/19/release-highway/
上記には、
- 機能について
- 各OSでのインストール方法
- 使い方
- パフォーマンスのベンチマーク
が記載されています。
機能
原文から一部のみ引用させていただいてます。
- 基本的な機能としては pt とほぼ同じ
- 速度については pt 以上
- ag / pt / sift 相当(もしくはそれ以上) の速度でのパターンマッチング。
- UTF-8 以外に EUC-JP と Shift_JIS のサポート(だって日本人だもん)。
だって日本人だもん
共感できます!
インストール方法
インストール方法は下記が用意されています。
- Mac OS X
- Fedora Core
- CentOS6系
- 上記以外の環境またはソースからビルド
- Windows
※僕のローカル環境はCentos6系なので今回はCentOS6系へのインストールを実施しています。
インストール
とても簡単です。
記載されているまま実行するだけで使用することができます。
wget http://ftp-srv2.kddilabs.jp/Linux/distributions/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm
rpm -ivh epel-release-6-8.noarch.rpm
sudo vi /etc/yum.repos.d/highway.repo
このsudo vi /etc/yum.repos.d/highway.repo
で新規ファイルを作成することになります。
下記記述をその新規ファイルにそのままペーストします。
[repos.highway]
name=highway
baseurl=http://tkengo.github.io/highway/centos/6
enabled=0
gpgcheck=0
あとはインストールするだけです。
$ sudo yum install highway --enablerepo="repos.highway"
使用方法
下記コマンドを実行するだけですぐにhightwayを体験することができます。
hw PATTERN
具体的には
hw php
のように使用します。
より詳細な検索方法はヘルプを確認します。
hw -h
検索
さきほどのhw php
を実際に行ってみました。
- 赤: highwayコマンド
- 黄: 該当ファイル
- 紫: 該当ファイル内の該当行数
- 青: 該当キーワード
highwayコマンド
を使って、PDO
を検索したところ、
adminer.php
というファイルが該当し、そのファイル内の178行目、180行目・・・にPDO
がありました。
以上でございます。
まとめ
highwayを使用することで文字コード関係なく、高速にGrep検索できます。
運用中の変数名の変更やログの検索など、Grep検索自体が高速化されることでより作業に集中できるようになりました。
特に障害時の検索待ちほどもどかしいものはありません。
高速化すること自体にデメリットはないのかもしれない。と改めて感じました。