プログラミング言語Zigでパッケージマネージャgyroを使う
最近、Zigをちょこちょこ触っています。ライブラリの使い方を調べていたところ、パッケージマネージャもあるようで、2023年3月5日現在では zigmod と gyro が使えるようです。
mattnさん曰く、
だそうなので、gyro
を使ってみることにしました。
ちょっとつまずくところがあったのでZenn記事にまとめます。
この記事を書いたときの手元のZigバージョンは 0.10.1、gyroはバージョン番号はわかりませんでしたがGitリポジトリ上ではmasterのコミット19cf64dまでのものを利用しました。
利用までの流れ
gyro
コマンドのインストール-
Zigのプロジェクトに
gyro
で依存パッケージを追加する
3. Zigのプロジェクトを作成
4. 依存パッケージの追加
5.build.zig
ファイルの編集 - ビルド・実行
「build.zig
ファイルの編集」が少し気づきづらかったです。
gyro
コマンドのインストール
リポジトリのREADME.mdに記載のビルド手順 に従ってビルドします。
git clone https://github.com/mattnite/gyro.git
cd gyro
zig build -Drelease-safe
zig-out/bin/gyro
というファイルができますので、適当にパスの通ったディレクトリにファイルをコピーします。
gyro
で依存パッケージを追加する
Zigのプロジェクトに パッケージを使う例として、コマンドライン引数をパースするライブラリ clap のサンプルコードを動かせるようにします。
Zigのプロジェクトを作成
まず、自分用の開発プロジェクトを作りましょう。hoge
という名前のプロジェクトディレクトリとします。
mkdir hoge
cd hoge
zig init-exe
こんな感じでファイルができます。(tree
コマンドの出力)
.
├── build.zig
└── src
└── main.zig
2 directories, 2 files
依存パッケージの追加
gyro
で依存パッケージを追加する場合は、<公開者のユーザー名>/<パッケージ名>
の形で指定するようです。
gyro add Hejsil/clap
すると、依存パッケージを記述する gyro.zzz
というファイルができます。
次に、以下のコマンドでパッケージを取得し deps.zig
ファイルを生成します。( gyro build
でも、fetch
を行ってくれそうです )
gyro fetch
build.zig
ファイルの編集
少しつまずいたのがこのステップです。
build.zig
ファイルを編集して gyro
で取得したパッケージを使えるようにします。
gyroのIntroductionにも書いてありますが、追加してある箇所が分かりづらいので、zig init-exe
で生成される build.zig
に対する修正箇所を以下に記載します。( // ★この行を追加
とある行を追加します)
const std = @import("std");
const pkgs = @import("deps.zig").pkgs; // ★この行を追加
pub fn build(b: *std.build.Builder) void {
// (コメント省略)
const target = b.standardTargetOptions(.{});
// (コメント省略)
const mode = b.standardReleaseOptions();
const exe = b.addExecutable("hoge", "src/main.zig");
pkgs.addAllTo(exe); // ★この行を追加
exe.setTarget(target);
exe.setBuildMode(mode);
exe.install();
const run_cmd = exe.run();
run_cmd.step.dependOn(b.getInstallStep());
if (b.args) |args| {
run_cmd.addArgs(args);
}
const run_step = b.step("run", "Run the app");
run_step.dependOn(&run_cmd.step);
const exe_tests = b.addTest("src/main.zig");
exe_tests.setTarget(target);
exe_tests.setBuildMode(mode);
const test_step = b.step("test", "Run unit tests");
test_step.dependOn(&exe_tests.step);
}
ビルド・実行
src/main.zig
の内容を、 clap.parseサンプル のコードに書き換えます。
その上で、Zig単体では zig build
としていたコマンドを gyro build
のように gyro
を使って実行するようにします。
gyro build run -- aaa -n 100 -s bbb
以下のように出力されればパッケージを使えています。
--number = 100
--string = bbb
aaa
おわりに
gyro
を使ってみました。Zigにはまだ十分に慣れてはいませんが、書くのは楽しいので上手に使えるようになりたいなと思います。
Discussion