もっとgroongaを知ってもらおう!ということで週刊groongaをはじめました。毎週木曜にgroongaやmroonga、rroongaのトピックを投稿予定です。
いよいよ、gihyo.jpさんでgroongaの隔週更新連載が始まりました!!
第7回の記事も公開されたので、一読をおすすめします。
第1回から第6回までの過去記事については、隔週連載groongaのページを参照してください。
はじめに
オープンソースのカラムストア機能付き全文検索エンジンgroongaを公開しています。
最新のバージョンは2013年6月29日にリリースした3.0.5です。
今回は、groongaをコマンドラインから便利に使う方法を紹介します。
groongaをコマンドラインから使う
groongaをコマンドラインから使うといったときには、以下の2つのタイプがあるでしょう。
- コマンドラインで便利に使う
- 対話モードで便利に使う
前者はgroongaコマンドのオプションをあれこれ指定するような場合です。
後者はgroongaコマンドを実行し、対話モードに入ってからクエリを実行するような場合です。
それぞれのタイプ向けに便利に使う方法があるので以下に紹介します。
コマンドラインで便利に使う
このタイプでは、シェルの持つ補完機能を拡張するというものがあります。
Zshの補完関数
Zshを普段使っているのであれば、hhattoさんの書かれたZshの補完関数があります。
補完関数の紹介記事はgroongaのZsh補完関数を書きましたです。
以下のURLにアクセスすると実際の補完関数を参照することができます。(groonga以外にもあれこれと補完関数があります。)
ご自身のZsh環境に合わせて補完関数を導入してみると良いでしょう。groongaの各種オプションを補完できるようになります。
対話モードで便利に使う
groongaコマンド自体はシンプルなつくりなので、対話モードにて履歴機能などは標準では付属していません。
この対話モードを便利に使う方法は以下のようにいくつかあります。
rlwrap
履歴機能等を使えるようにするよく知られた方法としてrlwrap
を使う方法があります。
rlwrap
はreadlineを使うことでその機能を提供しています。
以下のようにgroongaコマンドを実行することで、履歴機能が対話モードでも使えるようになります。
% rlwrap groonga
grnwrap
rlwrap
と同じようにreadlineを使うことで履歴機能やカーソル移動を実現するのがgrnwrap
です。
rlwrap
は汎用的ですが、grnwrap
はよりgroongaに特化した機能を提供しています。
詳細はGroongaの対話モードをラップするgrnwrap - from future import nowhere @ はてなにありますが、
- タブキーでコマンド名、引数名、テーブル名、ファイルパスの補完
- JSONのインデント表示
- Gオプションでselectの結果をMySQLの\G風にフォーマット
- *.grnなファイルパスを入力するとファイルに書かれたGroongaコマンドを実行
などが使えるようになります。
デフォルトのgroongaのパスが/usr/local/bin/groongaになっていたり、最近追加/削除したコマンドには対応していない点に注意する必要がありますが、結果のインデント表示がサポートされているところは嬉しいポイントです。
MySQLの\G風表示は以下のようになります。
% grnwrap -G testdb/db
> select Video
******************************* 1. row *******************************
_id: 1
_key: 1
tags: [u'demo application', u'groonga', u'FTS']
title: groonga Demo
******************************* 2. row *******************************
_id: 2
_key: 2
tags: [u'demo', u'mroonga', u'FTS']
title: mroonga Demo
******************************* 3. row *******************************
_id: 3
_key: 3
tags: [u'demo', u'rroonga', u'FTS', u'ruby']
title: rroonga Demo
******************************* 4. row *******************************
_id: 4
_key: 4
tags: [u'presentation', u'groonga', u'FTS']
title: groonga Overview
4 records / 4 hits (0.000592947006226 sec)
JSONのインデント表示は以下のようになります。(長いので途中で省略)
% grnwrap testdb/db
> select Video
[
[
0,
1374115250.31744,
0.00024867057800293
],
[
[
[
4
],
[
[
"_id",
"UInt32"
],
[
"_key",
"UInt32"
],
[
"tags",
"Tag"
],
[
"title",
"ShortText"
]
],
[
1,
1,
[
"demo application",
"groonga",
"FTS"
],
"groonga Demo"
],
grnline
これもgrnwrap
と目的を同じくしたプログラムです。
履歴機能やカーソル移動などはreadlineを利用して実現しています。
詳細はGroongaのコマンドラインインタフェースをほんのり使いやすくするgrnlineというラッパーをつくりましたにありますが、
- 入力時に方向キーでカーソルの移動(Ctrl-Aで先頭に移動とかもできます)
- groongaコマンドの補完
- 入力を履歴として保持
- 出力形式がJSON(デフォルト)のときのみ結果を整形表示
などが使えるようになります。
grnlineはgemで提供されているので、rubyをインストールしている環境では以下のコマンドを実行することで簡単にインストールすることができます。
% gem install grnline
grnline
は実行時にgroongaに渡すオプションを明示的に指定することができるようになっているのが、grnwrap
との違いです。
まだ開発がはじまったばかりで、履歴が保存されなかったりgroongaコマンドの引数に対する補完が実装されていなかったりはしますが、今後に期待のプロジェクトです。
GitHubで開発しているので、我こそはという人はぜひpull requestを送ってみるといいのではないでしょうか。
まとめ
今回は、groongaをコマンドラインから便利に使う方法を紹介しました。
groongaに興味を持ったなら、まずはインストールして試してみてください。
groongaの基本的な動作を知るためのチュートリアルもあります。インストールしたら試してみてください。