Luaには、LuaRocksというパッケージマネージャーがあります。RubyでいうとRubyGemsのようなものです。
LuaRocksに登録されているモジュールは、luarocks install モジュール名で簡単にインストールできます。
Luaは言語に組み込まれている機能が少ないので、LuaRocksに登録されている外部のモジュールを使って機能を拡張することが多いです。
この記事では、自作したモジュールをこのLuaRocksに登録する方法を紹介します。 モジュールの登録に必要なことは以下の通りです。順に説明していきます。
-
LuaRocksのアカウント作成、APIキーの取得
-
luarocksコマンドのインストール -
rockspecの作成
-
rockspecとモジュールのアップロード
LuaRocksのアカウント作成、APIキーの取得
作成したモジュールは、LuaRocksに公開されるので、まずは、このサイトのアカウントを作成します。 アカウントを作成後は、モジュールのアップロードに必要なAPIキーを取得します。
アカウントの登録は、LuaRocksにアクセスして、右上にあるRegisterをクリックし、ユーザー名とパスワード、メールアドレスを記入、送信すれば完了です。
APIキーは、LuaRocksにログイン後、右上にあるSettingsのAPI keysタブで生成できます。
luarocksコマンドのインストール
モジュールをアップロードするのは、LuaRocksのサイト上で行うか、luarocksコマンドを使って行います。
コマンドラインで操作できたほうが、モジュールの登録を自動化しやすいので、この記事では、luarocksコマンドを使ってモジュールの登録をおこないます。
luarocksコマンドのインストールはお使いのOSのパッケージマネージャーを使ってできます。
例えば、Debian GNU/Linuxでは以下のコマンドでインストールできます。
% sudo apt install luarocks
rockspecの作成
モジュールを登録するには、rockspecというファイルが必要です。 これは、登録するモジュールの情報(パッケージ名やバージョン、依存モジュール等)を記載します。
rockspecは、公開したモジュールのトップディレクトリで、luarocks write_rockspecと実行すると、雛形を作成してくれますので、その雛形に必要な情報を追記すれば完成です。
rockspecの記載が完了したら、lockspec makeコマンドを実行して、ビルド出来ることを確認しましょう。
luarocks makeがエラー無く完了すれば大丈夫です。
rockspecの書き方については、公式ドキュメントにも記載がありますので、こちらも参考にしてください。
rcokspecに記載する主な内容は以下の通りです。
-
package:- このモジュールの名前を記載します。
-
version:- このモジュールのバージョンを記載します。
-
packageとversionは必須です。packageとversionは、rockspecのファイル名に使用するためです。 -
description: 公開するモジュールについて記載します。maintainer以外の内容は、LuaRocks上のモジュールのページに表示されます。-
summary: モジュールの概要を記載します。 -
detailed: モジュールの詳細を記載します。 -
license: モジュールのライセンスを記載します。 -
homepage: モジュールのプロジェクトのURLを指定します。 -
maintainer: モジュールのメンテナーを記載します。
-
-
source: モジュールをビルドするためのソースを取得する方法を記載します。-
url: モジュールのソースアーカイブのURLを指定します。 -
dir: ソースアーカイブが解凍された時に作成されるディレクトリの名前を指定します。
-
-
build: このモジュールのビルド方法を記載します。-
copy_directories: モジュールのインストールディレクトリ配下にそのままコピーされるディレクトリを指定します。- ビルドが必要ないドキュメントやサンプルコード等をインストールするのに便利です。
-
modules: 後述するtypeにbuiltinを指定したときのみ使用できます。- モジュールのコンパイル方法を記載します。
-
type: このモジュールのビルド方法を指定します。-
幾つかのビルド方法を選ぶことができます。
-
make: Makefileを使ってモジュールをビルドする際に使用します。 -
cmake: CMakeを使ってモジュールをビルドする際に使用します。 -
builtin: これを指定すると、後述するmodules内にこのモジュールをビルドする方法を定義できます。-
登録するモジュールがLuaで書かれたソースコードのみの場合は、コンパイルの必要はないので、この
builtinを選択して、モジュールの動作に必要なソースコードをコピーするよう記載します。 -
例えば以下のように書くと、
xmluaモジュールは、XMLuaモジュールのトップディレクトリに配置されます。また、xmlua.attributeモジュールは、xmluaディレクトリの下に配置されます。
-
-
build = { type = "builtin", modules = { ["xmlua"] = "xmlua.lua", ["xmlua.attribute"] = "xmlua/attribute.lua" }, }
-
-
dependencies:-
依存しているLuaのモジュールを記載します。また、このモジュールの動作に必要なLuaのバージョンも指定できます。
-
ここに記載されたモジュールがシステムにインストールされていない場合は、モジュールのインストールに失敗します。
-
また、ここに記載されたLuaのバージョンに満たないLuaがシステムにインストールされていた場合は、同様にインストールに失敗します。
-
-
external_dependencies:-
依存している、Cのライブラリーを指定できます。
- ここに記載されたライブラリーは、モジュールインストール時に存在をチェックされるため、ここで指定したライブラリーがシステムにインストールされていない場合は、モジュールのインストールに失敗します。
-
rockspecとモジュールのアップロード
モジュールの登録には、rockspecとrockファイルをアップロードする必要があります。
rockファイルの作成は、luarocks pack rockspecファイルで作成できます。
rockspecには、ファイル名の規定があり、name-version-revision.rockspecという形式のファイル名でないとrcokファイルを作成してくれないので注意しましょう。
ここまでで、アップロードに必要なファイルは揃いました。
あとは、以下のコマンドでアップロードできます。
% luarocks upload rockspecファイル --api-key=APIキー
終わりに
rockspec には、色々なパラメータが指定出来るのでモジュールの登録を難しく感じたかもしれませんが、基本的には、luarocks write_rockspecで生成されるrockspecの雛形のsourceとdescriptionの内容を埋めれば、登録に必要な情報は揃います。
Luaで便利なモジュールを作成したら、より多くの人に使ってもらえるよう、LuaRocksに自作のモジュールを登録してみてはいかがでしょうか。