SWIG (Simplified Wrapper and Interface Generator) は、C/C++ で書かれたプログラムやライブラリを、Tcl、Perl、Python、Ruby、PHP、Luaなどのスクリプト言語や、Java、C#、OCamlなどのプログラミング言語に接続するためのオープンソースのツールである。

仕組み SWIGの目的は、プログラムとスクリプト言語間の接続を最小限の作業で達成することである。ヘッダファイルにわずかな数の特殊なコマンドを記述すると、SWIGはC/C++と対象の言語とを橋渡しするグルーコードを生成する。言語によって、グルーコードは以下の三つの形態となる。

もともとのプログラムと同様に振舞うが、スクリプト言語のインタプリタが埋め込まれた実行ファイル 既存のインタプリタの何らかの拡張モジュールとしてリンクできるような共有ライブラリ 対象の言語でコンパイルされ、他のプログラムにリンクできる形態の共有ライブラリ(例えば、Javaにおいて JNI を用いたもの)

用途 既存のC/C++プログラムにスクリプト言語のエンジンを埋め込むことは、大きく二つの用途がある。

C/C++ではなくスクリプト言語を用いることで、プログラムを手早くカスタマイズすることができる。ユーザーがスクリプトを書いてよくある仕事を自動化できるよう、スクリプトのエンジンはユーザーに公開しても良い。 最終的な製品がスクリプト言語のエンジンを含まなくても、テスト用のスクリプトを書くことは非常に役に立つ。

既存のインタプリタからロードできる動的なライブラリを作成する理由はいくつもある。 スクリプト言語で等価なものがない C/C++ライブラリに対してアクセスできる方法を提供する。 まずスクリプト言語でプログラム全体を書き、性能解析後、パフォーマンスに決定的な部分のコードをCやC++で書く。

歴史 SWIGはCとC++で書かれ、1996年2月から広く公開されている。最初の作者で主要な開発者であったのは、ロスアラモス国立研究所とユタ大学の大学院生でシカゴ大学で教員として働きながらSWIGを開発したDave Beazleyであった。現在の開発は活発なボランティアのグループによってサポートされている。SWIG はGPL(2010年6月にリリースされたver2.0.00より前はBSD型のライセンス)でリリースされており、すなわち、使用、コピー、改変、再配布は商用でも非商用でもGPLに基づいてソースコードを配布する限りにおいて自由に行うことができる。

脚注

関連項目

Open Source Initiative

外部リンク Project home page SwigWiki - SWIG を使用する際の情報を収集したWiki Article "Expose Your C/C++ Program's Internal API with a Quick SWIG" by Victor Volkman Article "" by Michael Fotsch Citations from CiteSeer sKWash: the open source SWIG GUI Py++ - Boost.Python ライブラリのためのコードを生成するオブジェクト指向のフレームワーク