💍

Onyx でパッケージを Publish する

2024/01/06に公開

Onyx のパッケージ管理

Onyx には Javascript の npm や Ruby の Gem 、 Python の PyPI のような中央集権的に管理されたパッケージリポジトリはない。 GitHub などの Git リポジトリとしてライブラリを公開するだけです。

パッケージの公開

module.onyx

公開するパッケージリポジトリには簡単な規約がある。ライブラリとして公開したい onyx プログラムを全てロードした module.onyx ファイルを作成して配置すること。このファイルの最小構成は例えば次のようになる。

module.onyx
package package_name_here
#load_all "./src"

onyx pkg コマンドと onyx-pkg.kdl

上記の規約以外にパッケージ公開のための onyx pkg コマンドが提供されている。

  1. onyx pkg init でプロジェクト構成を初期化する。プロジェクト管理の設定ファイル onyx-pkg.kdl もこのコマンドで自動作成が可能。
  2. onyx pkg publish でパッケージを公開。

中央管理型のリポジトリがないので管理は非常に楽で快適。他方で、一元的に管理された一連のパッケージの情報がないので検索ができない。たぶん。少なくとも今現在はそうだと思われる。

onyx-pkg.kdl はだいたいこんな感じになる。[1]

onyx-pkg.kdl
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 リポジトリを参照するだけである。

  1. onyx init により onyx-pkg.kdl を作成。
  2. onyx pkg add <任意の Git リポジトリ URL> [2]onyx-pkg.kdl に依存パッケージの設定を追加。
  3. onyx pkg sync: onyx-pkg.kdl の dependencies に従って各パッケージのソースコードをダウンロード。
  4. lib フォルダ配下に各 dependencies が追加されるため、適宜それらをロードする。例えば雑に全部ロードして試すなら #load_all "lib" して適宜 use すればいい。

補足・注意点

サンプルコード

パッケージマネージャ

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 は既にマージされたので次のリリースには含まれると思います。

脚注
  1. kdl フォーマットの公式ドキュメント → https://kdl.dev/ ↩︎

  2. github.com/onyx-lang/pkg-* から始まる公式パッケージのみ * の名前を指定した省略形での onyx pkg add が可能。 ↩︎

Discussion