Groongaの対話モードをラップするgrnwrap

Groongaには素敵なWebベースの管理画面が付属していますが、ターミナルから対話モードで動作を確かめたいことも(私は)けっこうあります。
がしかし、この対話モードでは履歴呼び出しやカーソル移動が使えません。それと結果のJSONが一行なのでたいへん見づらい。
困ったのでPythonで入出力をラップするスクリプトを書きました。動作環境として、Python 2.6以上(それ以前の場合はsimplejsonをインストール)がreadlineモジュールつきでコンパイルされていることが必要です。

michisu/grnwrap at master - GitHub

機能

  • カーソル移動とか
  • 履歴の保存
  • タブキーでコマンド名、引数名、テーブル名、ファイルパスの補完
  • JSONのインデント表示
  • Gオプションでselectの結果をMySQLの\G風にフォーマット
  • *.grnなファイルパスを入力するとファイルに書かれたGroongaコマンドを実行

引数名(--filterとか)の補完は環境によって動作が変わってしまうようなので、デフォルトでは無効の場合があります。無効になっているけど試したい場合は-cオプションをつけて起動してみてください。

使い方

$ grnwrap 

実行例

$ grnwrap -G /tmp/tutorial.db
> select --table Site --query title:@this
******************************* 1. row *******************************
     _id: 1
    _key: http://example.org/
   title: This is test record 1!
1 records / 1 hits (0.000823 sec)
> select --table Site --query title:@test --output_columns _id,_score,title --sortby _score
******************************* 1. row *******************************
      _id: 1
   _score: 1
    title: This is test record 1!
******************************* 2. row *******************************
      _id: 2
   _score: 1
    title: test record 2.
******************************* 3. row *******************************
      _id: 4
   _score: 1
    title: test record four.
******************************* 4. row *******************************
      _id: 3
   _score: 2
    title: test test record three.
******************************* 5. row *******************************
      _id: 9
   _score: 2
    title: test test record nine.
******************************* 6. row *******************************
      _id: 8
   _score: 2
    title: test test record eight.
******************************* 7. row *******************************
      _id: 7
   _score: 3
    title: test test test record seven.
******************************* 8. row *******************************
      _id: 5
   _score: 3
    title: test test test record five.
******************************* 9. row *******************************
      _id: 6
   _score: 4
    title: test test test test record six.
9 records / 9 hits (0.007133 sec)