Vex パッケージマネージャー

マニフェスト形式の Wave プロジェクト、Git とパス依存関係、ロックファイル、オフラインビルド、wavec との境界を説明します。

Wave Foundation

役割

Vex は Wave のパッケージマネージャー兼ビルドツールです。Vex は wavec の上位に位置し、プロジェクト構造と依存関係の解決を管理します。wavec はコンパイラフラグとコンパイルパイプラインを管理します。

Vex のコマンドはマニフェストに基づきます。生の wavec フラグを vex buildvex checkvex run へ直接渡すことはできません。

パッケージの作成

vex init
vex init --lib

アプリケーションは src/main.wave、ライブラリは src/lib.wave を使います。パッケージルートの構成は次のとおりです。

my_project/
├── src/
│   └── main.wave
├── vex.ws
├── vex.lock
└── .vex/
    └── deps/

vex.ws がマニフェストです。Vex は .wson 拡張子のマニフェストを使用しません。

{
    name = "my_project",
    version = 0.1.0,
    lib = false,
    description = "my_project Project",
    author = "unknown",
    license = "Unknown",
    dependencies = []
}

ビルドコマンド

vex build [--target <triple>] [--release] [--dry-run] [--locked] [--offline]
vex check [--target <triple>] [--release] [--dry-run] [--locked] [--offline]
vex run   [--target <triple>] [--release] [--dry-run] [--locked] [--offline] [-- <args...>]

Vex はコマンド面を小さく保ちます。コンパイラ固有の出力、リンカー、CPU、ABI、デバッグ制御が必要な場合は wavec を直接使用します。Vex に特定のコンパイラバイナリを使わせる場合は VEX_WAVEC=/path/to/wavec を設定します。

ResolvingFetchingCompilingCheckingRunningFinished などの進行段階は標準エラー出力に書き込まれます。プログラム出力は標準出力に保持されます。

Git を中心とした依存関係

Vex はローカルパスまたは Git URL から依存関係を解決します。各依存関係では、ソース形式をひとつだけ指定します。

{
    name = "app",
    version = 0.1.0,
    dependencies = [
        { name = "local_math", path = "../local_math" },
        { name = "remote_math", git = "https://github.com/example/math.git", tag = "v0.1.0" }
    ]
}

Git 依存関係では branchtagrev のいずれかひとつだけを指定できます。すべての依存関係ルートには固有の vex.ws が必要です。Vex は依存先のマニフェストを再帰的に解決し、競合するパッケージ識別情報を拒否し、管理対象の Git チェックアウトを .vex/deps/<name> に格納します。

ロックファイルの契約

スキーマ v2 の vex.lock は、完全な推移的依存グラフと正確な Git コミットを記録します。マニフェストとともにコミットしてください。同じマニフェストと有効なロックファイルを使うと、Vex はブランチやタグを再追跡せず、同じ依存グラフを選択します。

依存関係が必要なコマンドは自動的に解決を行います。次のコマンドでグラフを明示的に準備することもできます。

vex fetch
vex update
vex update math shared_core

vex update はすべての Git パッケージ、または指定したパッケージと影響を受ける推移的グラフだけを更新します。関係のないロック済みパッケージは選択済みコミットを維持します。

ロック済み・オフラインのワークフロー

--lockedvex.lock の作成と変更を禁止します。ファイルがない、未知のスキーマを使っている、マニフェストグラフと一致しない場合に失敗します。ロックファイルに固定済みのコミットは取得することがあります。

--offline は Git のネットワーク操作を禁止します。必要なチェックアウトとコミットがローカルに存在していなければなりません。

vex fetch --locked
vex build --locked --offline

この組み合わせが厳密な CI ワークフローです。ネットワークを使用できる間にロックされた正確なコミットを取得し、その後はネットワークアクセスやロックファイル変更なしでコンパイルします。ドライランでは依存関係を取得せず、ロックファイルも書き換えません。

コンパイラのセットアップと調査

vex info
vex setup wavec
vex setup wavec --version <version>
vex --version

Vex は、コンパイルを開始する前に wavec --dry-run が返す JSON ビルド計画を検証します。スキーマバージョンが一致しない場合、ビルドを開始せず互換性エラーを報告します。