GitHubでカジュアルにhaxelibを公開する


haxelibってなんぞ

Haxeをインストーラーから導入した場合、標準でhaxelibというdistributorが付属してきます。
つまるところ、Rubyでいうところのgemにあたるようなツールです(登録されているライブラリの数は少ないですが)。

そんなhaxelibですが、Haxe3からgit経由でのインストールに対応しました。

haxelib2以前は、依存性のないモジュールをガンガン外部化したいという欲求に対して、公式のhaxelibだとあまりに個人的なコードや中途半端なexternの登録にためらいが生じがちで、かといっていちいちzipを作ったりプロジェクトのsubmodule化するというのも面倒です。

gitならば、GitHubやBitbucketや適当なリポジトリに公開しているコードをそのまま使えてカジュアルハッピーですね。

公式ドキュメント

Using haxelib

Haxelib 3

  

前準備

  • haxelib.json

    Pythonでいうところのsetup.pyみたいなものですね。
    作者やプロジェクトの名前から、依存モジュールまでを記述します。
    git経由ならいらないような気もするのですが、作法的にも書いておいた方が良いとおもいます。

    ver2まではhaxelib.xmlだったのですが、ver3からはJSONに対応して、そちらが推奨になりました。
    XMLを書くのは疲れるので嬉しいですね。

以下は、公式にあがっている例になります。

{
  "name": "useless_lib",
  "url" : "https://github.com/jasononeil/useless/",
  "license": "MIT",
  "tags": ["cross", "useless"],
  "description": "This library is useless in the same way on every platform",
  "version": "1.0.0",
  "releasenote": "Initial release, everything is working correctly",
  "contributors": ["Juraj","Jason","Nicolas"],
  "dependencies": {
    "tink_macros": "",
    "nme": "3.5.5"
  }
}

各設定項目に関しては、みたまんまなので特に説明はいらないですね。

実践

登録

では実際に雰囲気を掴むために、挨拶モジュールをつくってみましょう。
プロジェクト構成は以下のようになります。

.
├── greet
│   └── Hello.hx
└── haxelib.json

中身は以下のとおり。

haxelib.json
{
  "name": "greet",
  "url" : "https://github.com/yourname/greet/",
  "license": "MIT",
  "tags": ["cross"],
  "description": "greet everyone",
  "version": "0.0.1",
  "contributors": ["yourname"],
  "dependencies": {
  }
}
Hello.hx
package greet;

class Hello {

    public static function japanase(): String {
        return "こんにちわ";
    }

    public static function english(): String {
        return "Hello";
    }

    public static function chinese(): String {
        return "您好";
    }

    public static function nonnon(): String {
        return "にゃんぱすー";
    }
}

packageの指定に注意してくださいね。
後はこれを適当なリポジトリに突っ込んでしまいましょう。

呼び出し

# haxelib git <project-name> <git-clone-path> <subdirectory>
$ haxelib git greet path-to-your-repository

でインストールできます。
なお、プロジェクト名がかぶった場合は容赦なく上書きされるようなので気をつけましょう。

upgradeコマンドを使うことで更新(pull)を行えます。

それでは実際にimportして呼び出せるかためしてみませう。

.
├── Main.hx
└── build.hxml
build.hxml
# -libでどのモジュールを利用するのかを明示する必要がある
-lib  greet

-neko main.n
-main Main
Main.hx
package ;

import greet.Hello;

class Main {

    public static function main() {
        trace(Hello.japanase());
        trace(Hello.english());
        trace(Hello.chinese());
        trace(Hello.nonnon());
    }
}
result
# ビルド
$ haxe build.hxml
# 実行
$ neko main.n
Main.hx:8: こんにちわ
Main.hx:9: Hello
Main.hx:10: 您好
Main.hx:11: にゃんぱすー

どうでしょう、うまくいきましたでしょうか。

細かいことをしだすとまたなにかハマったりするかもしれませんが、こんな感じでとりあえず公開するだけならかなりカジュアルにやらかせます。

情報が少ないせいかhaxelibを利用している人を見かけませんが、少しづつ使う人が増えるといいなと思いました。以上!

次は @shohei909 さんの「実用!Haxe黒魔術使い入門」です、よろしくお願いします。