GObject Introspectionを使っていろいろな言語からGroongaを使う方法

  • 17
    いいね
  • 1
    コメント
この記事は最終更新日から1年以上が経過しています。

はじめに

ここでは詳しい説明をしませんが、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の機能をライブラリーとして使う方法を説明しました。