📚
build.zig.zonを使ったZigの新しいパッケージ管理
執筆時点でまだNightly (master)の機能なので、今後どんどん変わっていく可能性があるけれど、Zigのビルドシステムにnpmやpipのようなパッケージマネージャーを追加しようという動きがv0.11.0-devから始まっていて、その現時点での使い方として、zapのREADMEがとてもわかりやすい。
要約すると以下の通り。
- build.zig.zon[1] (npmでいうところのpackage.json) を以下のように作る。
build.zig.zon
.{
.name = "My example project",
.version = "0.0.1",
.dependencies = .{
// zap v0.1.6-pre
.zap = .{
.url = "https://github.com/zigzap/zap/archive/refs/tags/v0.1.6-pre.tar.gz",
.hash = "1220a3eab193523b30721dae56a763468b7348b3d1f0b3364d68f6d548c753a72c5a",
}
}
}
- build.zig (pythonでいうところのsetup.py) に以下を追記。
build.zig
// 前略
const zap = b.dependency("zap", .{
.target = target,
.optimize = optimize,
}); // ここでbuild.zig.zonの情報を読み取ってくれる
exe.addModule("zap", zap.module("zap"));
exe.linkLibrary(zap.artifact("facil.io")); // 指定がある場合のみ
// 後略
これだけでライブラリが使えるようになるので、今までの手動でのgit cloneからするとだいぶパッケージマネージャーっぽくなった。たぶん、linkLibraryなんかも今後自動解決するようになるはずで、この辺の自動解決や自動生成を zig pkg
コマンドでできるようにするらしい。v0.11.0〜v0.13.0で随時リリース予定とのこと。
ちなみに上記のbuild.zig.zonを早速使ってみようとすると、v0.11.0-devで行われた破壊的変更のために、大半のライブラリのbuild.zigが正しく読み取れないので、まだちょっと時期尚早。今後に期待。
なお現時点でも使えるサードパーティのZig用パッケージマネージャーは既にいくつかあるのだけれど、gyroが個人的には便利そう。gyro.zzzというYAMLっぽい記法も、build.zig.zonと構造はかなり似ているので、正式リリース後の移行も楽そう。
-
.zonというのはZig Object Notationのことで、ZigのAnonymous Struct (Anonymous List) 記法を使ったjsonのようなもの。 ↩︎
Discussion