パッケージの利用と公開#

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.jsondeps フィールドを手動で編集してください。

例えば、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.jsonREADME.md のメタデータは mooncakes.io に表示されます。

メタデータは次の項目で構成されます:

  • license: モジュールのライセンス(SPDX 規約に従う)

  • keywords: このモジュールのキーワード

  • repository: パッケージのソースリポジトリ URL

  • description: このモジュールの短い説明

  • homepage: モジュールのホームページ URL