SWIG を使ってみよう! [第3回] Ruby 編2008年09月13日 08時44分35秒

SWIG を使って libnmz の様々な言語用のバインディングを作成してみましょう。

今回は UNIX 環境(Linux)で Ruby から libnmz の nmz_get_version を呼び出すことを考えます。

モジュール名は前回と同じ Sample とします。 SWIG 用インターフェイスファイルを Sample.i という名前で作成します。 中身は前回と全く同じです。

%module Sample
%{
#include "namazu/libnamazu.h"
%}
char *nmz_get_version();

swig コマンドを使ってラッパ用コードを生成します。 今回は Ruby 用ですので引数に -ruby を指定します。

$ swig -ruby Sample.i

実行すると Ruby 用の Sample_wrap.c が生成されます。

Makefile を作成するために次の内容の extconf.rb ファイルを作成します。

require 'mkmf'

dir_config('nmz', '/usr/local');
$libs = append_library($libs, 'nmz');
create_makefile("Sample");

ruby コマンドで実行し、Makefile を作成します。

$ ruby extconf.rb

make を実行してモジュールを作成します。

$ make

Ruby バインディングの Sample モジュールが作成されました。

インストールして使うこともできますが、ここではカレントディレクトリに生成したライブラリをそのまま使ってみましょう。

Sample ライブラリを呼び出す Ruby プログラム を run.rb という名前で作成します。

#!/usr/local/bin/ruby

require 'Sample'

print Sample::nmz_get_version(), "\n";

このプログラムは nmz_get_version の値を表示するだけの単純なプログラムです。 実行すると、Namazu のバージョンが表示されます。

$ ruby run.rb
2.0.18

非常に簡単な例ですが、SWIG を使って libnmz を Ruby から利用する方法をしめしました。 モジュールの生成方法は各言語ごとに異なりますが、 Perl や Java の時に使ったものと同じインタフェースファイルから作成できることが分かったかと思います。他の言語でも同じように利用することができますので、いろいろと工夫してみてください。

[お断り]

  • SWIG Version 1.3.36 を使用しました。
  • ruby 1.8.7 (2008-08-11 patchlevel 72) を使用しました。
  • Namazu 2.0.18 を使用しました。
  • libnmz は GPL ライセンスです。libnmz を動的であれ、静的であれリンクして使用するプログラムは GPL ライセンスと 矛盾しないライセンスである必要があります。
  • SWIG を用いて作成した Sample モジュールは libnmz をリンクしますので、GPL ラインセンスとして公開します。
  • Sample モジュールは GPL ライセンスですので、Sample モジュールを利用するプログラムは GPL ライセンスと矛盾しないライセンスでなければなりません。 ご注意ください。