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