はじめに
ここでは詳しい説明をしませんが、GObject Introspectionというライブラリーがあります。簡単に言うと、C言語で書かれたライブラリーを各種スクリプト言語から言語バインディングを書かずに使える機能を提供するライブラリーです。
これを使うと、各種スクリプト言語からGroongaをサーバーではなくライブラリーとして使うことができます。まずは、どのように書けるか見てみましょう。Groonga側の準備方法は後で説明します。
実例
以下の動作を行うスクリプトを見ていきます。
-
/tmp/db
にGroongaのデータベースを作る -
Users
テーブルを作る - テーブルの内容をダンプする
groonga
を使うと以下のように書ける動作です。
% groonga -n /tmp/db
> table_create Users TABLE_HASH_KEY ShortText
[[0,1385995731.14369,0.0537254810333252],true]
> dump
table_create Users TABLE_HASH_KEY ShortText
>
Pythonから使う
まずはPythonでの例を見てみましょう。
from gi.repository import Groonga
def main():
context = Groonga.Context()
context.create_database("/tmp/db")
context.execute_command("table_create Users TABLE_HASH_KEY ShortText")
print(context.execute_command("dump"))
# => table_create Users TABLE_HASH_KEY
Groonga.init()
main()
Groonga.fin()
Groonga.Context()
でcontext
を作って、execute_command()
でGroongaのコマンドを実行しているだけです。
このスクリプトの実行にはPyGObjectが必要です。
JavaScriptから使う
次にJavaScriptでの例を見てみましょう。
Groonga = imports.gi.Groonga;
function main() {
var context = new Groonga.Context();
context.create_database("/tmp/db");
context.execute_command("table_create Users TABLE_HASH_KEY ShortText");
print(context.execute_command("dump"));
// => table_create Users TABLE_HASH_KEY ShortText
};
Groonga.init();
main();
Groonga.fin();
このスクリプトの実行にはGjsまたはSeedが必要です。GjsはMozillaのSpidermonkeyというJavaScript実装を使っていて、SeedはWebKitのJavaScriptCoreというJavaScript実装を使っています。
Rubyから使う
最後にRubyでの例を見てみましょう。RubyにはRroongaがありますが、それは使っていません。
require "gobject-introspection"
module Groonga
end
loader = GObjectIntrospection::Loader.new(Groonga)
loader.load("Groonga")
def main
context = Groonga::Context.new
context.create_database("/tmp/db")
context.execute_command("table_create Users TABLE_HASH_KEY ShortText")
puts(context.execute_command("dump"))
# => table_create Users TABLE_HASH_KEY ShortText
end
Groonga.init
main
Groonga.fin
gobject-introspection gemが必要です。
実例のまとめ
このように言語バインディングを書かなくてもスクリプト言語からGroongaの機能をサーバーではなくライブラリーとして利用できます。ここでは、Python、Gjs、Seed、Rubyでの例を示しましたが、他にもLuaやPerlやPHPやnode.jsなどいろいろなスクリプト言語でも同じようなことができるはずです。
準備
それでは、GObject Introspectionを使ってGroongaを使うための準備方法を説明します。
以下のようにします。
- Groongaをインストールする(説明省略)
- Groonga GObjectをインストールする
-
GI_TYPELIB_PATH
を設定して実行する
Groongaのインストール方法は公式ドキュメントを参照してください。
Groonga GObjectのインストール方法は以下のとおりです。
% git clone https://github.com/groonga/groonga-gobject
% cd groonga-gobject
% ./autogen.sh
% ./configure --prefix=/tmp/local
% make
% make install
これで/tmp/local/lib/girepository-1.0/Groonga-1.0.typelib
ができます。
GI_TYPELIB_PATH
でGObject Introspectionのサーチパスに/tmp/local/lib/girepository-1.0
を追加するとGroonga-1.0.typelib
を使えるようになります。
% export GI_TYPELIB_PATH=/tmp/local/lib/girepository-1.0:/usr/lib/girepository-1.0
% python /tmp/groonga.py
table_create Users TABLE_HASH_KEY ShortText
まとめ
GObject Introspectionというライブラリーを使って、言語バインディングを書かなくてもスクリプト言語からGroongaの機能をライブラリーとして使う方法を説明しました。