パッケージ
パッケージ は、アセット、Zigソース、ネイティブライブラリ、ランタイムプラグインの任意の組み合わせを含む、配布可能な機能単位です。手動でファイルをコピーすることなくプロジェクトにインストールできます。Unityのパッケージマネージャーとアセットストアに対するTurianの回答であり、Zigのパッケージマネージャー上に構築されています。
ステータス: MVPはアセットパッケージのエンドツーエンド(インストール→ビルド→実行)を提供します。ソース、ネイティブ、プラグインパッケージはマニフェストに設計されており、将来のリリースで有効化されます。
概念
| 用語 | 意味 |
|---|---|
| パッケージ | 作成/配布単位:turian-package.json マニフェストとアセット、ソース、ネイティブライブラリ、またはプラグインエントリポイント。 |
OAP (.oap) |
ゲームに出荷する、クック済みのランタイムアセットコンテナ。パッケージのアセットはビルド時にプロジェクトの game.oap にクックされます。 |
| モジュール | Zigコンパイル単位(b.addModule)——Unityの asmdef 相当。 |
| プラグイン | パッケージのランタイム/エディター登録エントリポイント。 |
完全な理論的根拠とスキーマは ADR 0001 にあります。
project.json が信頼できる情報源
すべてのTurianプロジェクトには project.json があり、プロジェクトのアイデンティティと宣言された依存関係を記録します。プロジェクトの build.zig.zon は project.json から生成されます——UnityやFlaxが .csproj/.sln を再生成するのと同様です。build.zig.zon を手動で編集することはありません。CLIとStudioは project.json を変更し、ビルドのたびにZONを再生成します。これにより、依存関係管理は安全で親しみやすいJSONに保たれ、ZONの構文ミスを回避できます。
{
"turian_version": "0.16",
"name": "My Game",
"version": "0.0.0",
"dependencies": {
"com.acme.physics": { "url": "git+https://example.com/physics#v1.2.0", "hash": "..." }
}
}
依存関係の解決(バージョン、競合、ハッシュ、ロックファイル)はZigのパッケージマネージャーに委任されます。Turianのレイヤーは、エンジン統合マニフェスト、ディスカバリー、アセットパイプラインインジェクション、エンジン互換性チェックを追加します。
マニフェスト:turian-package.json
パッケージはルートにある turian-package.json で自身を宣言します:
{
"name": "com.example.color-palette",
"version": "1.0.0",
"author": "Example",
"description": "A sample asset-only package",
"license": "MIT",
"engine_compat": ">=1.0.0",
"types": ["asset"],
"assets": ["assets"]
}
| フィールド | 必須 | 説明 |
|---|---|---|
name |
✓ | 逆DNS形式、グローバルに一意。 |
version |
✓ | セマンティックバージョニング。 |
types |
✓ | 一つ以上:asset、source、native、plugin。 |
assets |
パッケージルートからの相対アセットディレクトリ(デフォルト ["assets"])。 |
|
modules |
エクスポートされたZigモジュール:{ "name", "root" }(ソースパッケージ)。 |
|
native |
ネイティブライブラリ:{ "name", "kind", "lib", "include" }。 |
|
plugin |
ランタイムエントリポイント:{ "register", "entry" }。 |
|
engine_compat |
実行中のエンジンバージョンと照合されるセマンティックバージョン範囲。 | |
dependencies |
パッケージ名 → セマンティックバージョン範囲のマップ。 |
パッケージのインストール
# ローカルディレクトリから
turian-cli package install ./path/to/package --project my-game
# gitリポジトリから
turian-cli package install git+https://example.com/my-package --project my-game
デフォルトでは、パッケージはすべてのプロジェクトで共有される中央ストアにインストールされます——
$TURIAN_PACKAGE_HOME、なければ ~/.cache/turian/packages(Windowsでは
%APPDATA%\turian\packages)—— <name>/<version>/ のレイアウトで、複数のバージョンが共存できます。プロジェクトは project.json に使用するパッケージとバージョンを記録します。プロジェクトごとに重複はありません。これは、会社が内部アセットストアを立ち上げる方法でもあります:一つの共有ストア、多数のプロジェクト。
--vendored を指定すると、パッケージが <project>/packages/ にコピーされます(プロジェクトと一緒にコミットする場合や、
オフラインで作業する場合に使用)。ベンダーコピーはストアより優先されます。
turian-cli package install ./pkg # → 中央ストア(デフォルト)
turian-cli package install ./pkg --vendored # → <project>/packages/
turian-cli package list --project my-game
turian-cli package info com.example.color-palette --project my-game
turian-cli package remove com.example.color-palette --project my-game # 共有ストアのコピーは保持
次回の turian-cli build はインストールされたすべてのパッケージ(ストア + ベンダー)を検出し、そのアセットを自動的に game.oap にクックします——手動コピーは不要です。
インストールされたパッケージのアセットは、Studio → アセットブラウザの読み取り専用のパッケージセクションに表示されます。編集は消費プロジェクトではなく、パッケージ内で行います。
競合と互換性
- 重複するパッケージ名と2つのパッケージ間で共有されるGUIDはハードエラーとなり、明確な診断メッセージとともにビルドが失敗します——パッケージ作成者はアセットGUIDをグローバルに一意に保つ必要があります。
engine_compat範囲が実行中のエンジンバージョンと合わないパッケージは警告を生成します(ビルドは続行されます)。