Luaの言語バインディングとLGIについて

Last modified: 2021-08-06

LuaとLuaJITの概要と、LuaJITのLua 5.2との互換性について(2014年6月時点)” の続きとして、Luaの言語バインディングについてを扱う。

Luaの言語バインディング

LuaはC/C++言語のプログラムに組み込んで使うという形が想定されていることなどもあって、単独で呼び出せる機能はそれほど多くはなく、基本的なファイル入出力や数学関数,文字列処理や各種データ型に関係した処理,OSの幾つかの限られたファイル操作や情報取得などしかできない。

別途言語バインディングのパッケージをインストールすることでLuaから扱えるライブラリ(呼び出せる機能)を増やすことはできるが、Pythonなど他の言語向けのバインディングと比べるとあまり数は多くない。また、Lua の最新バージョン系統へまだ対応していないものも見られる(バインディングのパッケージ自体が対応済みでもディストリのパッケージが対応していないものも含む)。ただ、LuaJITを用いてプログラムを動かす場合はLua 5.1向けのものが使えるので、5.1系に対応していればそれはLuaJITからなら使える。

有用と思われる言語バインディングは

  • luaposix(リファレンス): POSIX準拠の環境向けにOS内の色々な操作やglob(パターン展開)機能などを提供/libcursesのバインディングも提供
  • LuaFileSystem: ファイルやディレクトリの幾つかの操作を提供
  • Lua iconv: 文字列のエンコーディングの変換
  • Lua rexlib: 正規表現の機能を提供
  • LuaSocket: ソケットを用いた通信関係の(低レベル・高レベル)処理
  • Lua-cURLv3: libcurlを用いた通信関係などの処理
  • LuaExpat: XMLパーサExpatのライブラリを用いたXML文書の解析
  • LuaSQL: SQLサーバと接続して問い合わせを行い、結果を得る(SQLite使用可)

など。

LGIと対応ライブラリ

LGIという言語バインディングはGObject Introspection対応の多数のライブラリをLuaから利用可能にし(PythonにおけるPyGObjectに相当)、Luaの新しいバージョンにも対応している。Debian/Ubuntuでのパッケージ名はlua-lgi。下は対応ライブラリの例。

  • GLib: 色々な処理やデータ型などを提供する汎用のライブラリ
  • GIO: ファイルなどの入出力
  • GTK: GUIツールキット
  • GStreamer: プラグインを用いて映像や音声を扱う
  • GdkPixbuf: 画像データやそのバッファを扱う
  • libsoup: ネットワーク処理
  • GUdev: システム上のデバイスや記憶装置などに関する情報を取得

LGIを使用する場合、別途GObject Introspectionの.typelibファイルを提供するパッケージ(Debian/Ubuntuではgir[バージョン]-[ライブラリ名など]形式の名前のパッケージ・例えばgir1.2-gtk-3.0)が必要になる。