Onyx でパッケージを Publish する
Onyx のパッケージ管理
Onyx には Javascript の npm や Ruby の Gem 、 Python の PyPI のような中央集権的に管理されたパッケージリポジトリはない。 GitHub などの Git リポジトリとしてライブラリを公開するだけです。
パッケージの公開
module.onyx
公開するパッケージリポジトリには簡単な規約がある。ライブラリとして公開したい onyx プログラムを全てロードした module.onyx ファイルを作成して配置すること。このファイルの最小構成は例えば次のようになる。
package package_name_here
#load_all "./src"
onyx pkg コマンドと onyx-pkg.kdl
上記の規約以外にパッケージ公開のための onyx pkg コマンドが提供されている。
-
onyx pkg initでプロジェクト構成を初期化する。プロジェクト管理の設定ファイルonyx-pkg.kdlもこのコマンドで自動作成が可能。 -
onyx pkg publishでパッケージを公開。
中央管理型のリポジトリがないので管理は非常に楽で快適。他方で、一元的に管理された一連のパッケージの情報がないので検索ができない。たぶん。少なくとも今現在はそうだと思われる。
onyx-pkg.kdl はだいたいこんな感じになる。[1]
package {
name "<任意のパッケージ名>"
author "<あなたの名前>"
url "https://github.com/<GiHubのアカウント名か組織名>/<リポジトリ名>.git"
description "<任意の説明文>"
version "0.3.0" // SemVer形式
}
config {
dependency_source_path "./lib"
dependency_binary_path "./bin"
}
onyx pkg publish コマンドは実際には git コマンドのラッパーのような動作をするだけでやってくれることは単純。まず onyx-pkg.kdl 内の package.version の値を適切に更新する。メジャーかマイナーかパッチか、SemVer的にどこを更新するかは対話的に聞かれる。

そして、更新されたそのバージョン番号で git の tag をうち push するそれだけ。
パッケージの利用
パッケージの利用もシンプルで上記のように公開された Git リポジトリを参照するだけである。
-
onyx initによりonyx-pkg.kdlを作成。 -
onyx pkg add <任意の Git リポジトリ URL>[2] でonyx-pkg.kdlに依存パッケージの設定を追加。 -
onyx pkg sync: onyx-pkg.kdl の dependencies に従って各パッケージのソースコードをダウンロード。 -
libフォルダ配下に各 dependencies が追加されるため、適宜それらをロードする。例えば雑に全部ロードして試すなら#load_all "lib"して適宜useすればいい。
補足・注意点
サンプルコード
- ライブラリを公開する側: https://github.com/hatappo/pkg-example-onyx
- ライブラリを使用する側: https://github.com/hatappo/pkg-load-example-onyx
パッケージマネージャ
package manager のコードは https://github.com/onyx-lang/onyx/blob/master/scripts/onyx-pkg.onyx にあります。
3rd party package の追加が失敗する
onyx v0.1.8 では 3rd party library の利用がうまくいかないので nightly を使う必要があります。 nightly のインストールは次のようにインストールスクリプトの実行引数に nightly を足せばOKです。
sh <(curl https://get.onyxlang.io -sSfL) nightly
このバグを修正する PR は既にマージされたので次のリリースには含まれると思います。
-
kdl フォーマットの公式ドキュメント → https://kdl.dev/ ↩︎
-
github.com/onyx-lang/pkg-*から始まる公式パッケージのみ*の名前を指定した省略形でのonyx pkg addが可能。 ↩︎
Discussion