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に自作のモジュールを登録してみてはいかがでしょうか。