パッケージの利用と公開#
MoonBit のビルドシステムは、パッケージ管理とドキュメント生成ツールをシームレスに統合しています。これにより、ユーザーは mooncakes.io から依存関係を簡単に取得し、モジュールドキュメントにアクセスし、新しいモジュールを公開できます。
始める前に、moon をインストールしていることを確認してください。
mooncakes.io アカウントの設定#
注釈
公開しない場合は、この手順をスキップできます。
mooncakes.io のアカウントがない場合は、moon register を実行して案内に従ってください。すでに登録済みのアカウントがある場合は、moon login でログインできます。
次のメッセージが表示されたら、ログインに成功しています:
API token saved to ~/.moon/credentials.json
MoonBit プロジェクトのセットアップ#
既存のプロジェクトを開くか、moon new <PATH> で新しいプロジェクトを作成します。例えば:
$ moon new .
Created username/myapp at .
次のパスにテンプレートファイルが生成されます:
├── AGENTS.md # Collaboration guide for agents
├── LICENSE # Open-source license
├── README.mbt.md # README file with type checking support for moonbit
├── README.md -> README.mbt.md # Symlink for platforms that expect README.md
├── cmd
│ └── main
│ ├── main.mbt # MoonBit source file
│ └── moon.pkg # Package configuration for username/myapp/cmd/main package
├── moon.mod.json # Module configuration for username/myapp module
├── moon.pkg # Package configuration for username/myapp package
├── myapp.mbt # MoonBit source file
├── myapp_test.mbt # Black-box test
└── myapp_wbtest.mbt # White-box test
moon new <PATH> は 2 つのパッケージを含むスターターモジュールを生成します。モジュールは複数のパッケージを含む公開単位です。パッケージは名前空間でありコンパイル単位でもあり、パッケージ設定ファイルで定義され、同じディレクトリ内の .mbt ファイルを含みます。
モジュールとパッケージは特別なパス(ファイルシステム上のパスではない)で識別されます。例えば:
username/myapp/cmd/main
─────────────────┬─────
────────┬───── │
│ │
│ └─ package `username/myapp/cmd/main` within the `username/myapp` module
│
└────────── module path. It also defines the package `username/myapp`
テンプレートには、デフォルトでテストファイル、ドキュメント、コラボレーション用メタデータが含まれます。不要なテンプレートファイルは安全に削除できます。次の構成も有効な MoonBit プロジェクトです:
├── moon.mod.json
├── moon.pkg
└── source.mbt
依存関係の追加#
利用可能なモジュールは mooncakes.io で参照できます。必要な依存関係は moon add で追加するか、moon.mod.json の deps フィールドを手動で編集してください。
例えば、moonbit-community/starter モジュールの最新版を追加するには:
$ moon add moonbit-community/starter
注釈
Moon はローカル依存関係もサポートしています。詳しくは Dependency Management を参照してください。
モジュールからパッケージをインポートする#
moonbit-community/starter モジュールには、moonbit-community/starter/rabbit パッケージが含まれています。
依存関係に moonbit-community/starter モジュールを追加した後、username/myapp/cmd/main パッケージで moonbit-community/starter/rabbit パッケージを使うには、まずそのパッケージをインポートする必要があります:
// add this import to `cmd/main/moon.pkg`
import {
"moonbit-community/starter/rabbit"
}
options(
"is-main": true
)
注釈
インポートしたパッケージには別名を付けることもできます:
import {
"moonbit-community/starter/rabbit" @alias
}
これで rabbit パッケージの hello 関数を呼び出せます:
// in `cmd/main/main.mbt`
fn main {
// println("hello")
@rabbit.hello()
}
メインパッケージを実行して、ターミナルの出力を確認します。
$ moon run cmd/main
依存関係の削除#
moon remove <module name> で依存関係を削除できます。
モジュールを公開する#
モジュールを共有する準備ができたら、moon publish を使って mooncakes.io にモジュールを公開できます。公開前に注意すべき重要な点がいくつかあります:
セマンティックバージョニング規約#
MoonBit のパッケージ管理は Semantic Versioning 規約に従います。各モジュールは MAJOR.MINOR.PATCH 形式でバージョン番号を定義する必要があります。公開時には、次のルールでバージョンを更新します:
互換性のない API 変更を行った場合は MAJOR を更新
後方互換性を保った機能追加の場合は MINOR を更新
後方互換性を保ったバグ修正の場合は PATCH を更新
MAJOR.MINOR.PATCH 形式の拡張として、プレリリースおよびビルドメタデータ用の追加ラベルも利用できます。
moon は minimal version selection を実装しており、モジュールのセマンティックバージョニング情報に基づいて依存関係を自動処理・インストールします。minimal version selection では、各モジュールが自身の依存要件を宣言し、セマンティックバージョニング規約に従うことを前提として、ユーザーの依存関係グラフを作者の開発時依存にできるだけ近づけます。
README とメタデータ#
moon.mod.json と README.md のメタデータは mooncakes.io に表示されます。
メタデータは次の項目で構成されます:
license: モジュールのライセンス(SPDX 規約に従う)keywords: このモジュールのキーワードrepository: パッケージのソースリポジトリ URLdescription: このモジュールの短い説明homepage: モジュールのホームページ URL