Skip to content

はじめに

このページでは、YanmaJS を自分の Zig プロジェクトに組み込んで JavaScript コードを実行するまでの手順を説明します。

前提条件

  • Zig 0.16.0 以降

ライブラリとして組み込む

YanmaJS は Zig の package manager(build.zig.zon)経由で依存関係として追加できます。自分の Zig プロジェクトの build.zig.zon に以下のように依存を追加します。

zig fetch --save git+https://github.com/heriet/yanmajs.git#main

または build.zig.zon に手動で依存を追記します。

.dependencies = .{
    .yanmajs = .{
        .url = "git+https://github.com/heriet/yanmajs.git#main",
        .hash = "...", // zig fetch が出力したハッシュ値
    },
},

自分の build.zig では、依存モジュールとして取り込み、実行ファイルにインポートします。

const yanmajs_dep = b.dependency("yanmajs", .{
    .target = target,
    .optimize = optimize,
});
exe.root_module.addImport("yanmajs", yanmajs_dep.module("yanmajs"));

これでソースコード中から @import("yanmajs") としてエンジンを利用できます。

Hello World

最小構成の例です。Context を初期化し、eval で JavaScript コードを評価して結果を取り出します。

const std = @import("std");
const yanmajs = @import("yanmajs");
const Context = yanmajs.Context;

pub fn main() !void {
    var gpa = std.heap.GeneralPurposeAllocator(.{}){};
    defer _ = gpa.deinit();
    const ctx = try Context.init(gpa.allocator());
    defer ctx.deinit();

    const result = try ctx.eval("1 + 2");
    const n = yanmajs.toFloat(result);
    std.debug.print("Result: {d}\n", .{n}); // 3
}

より発展的な使い方(グローバル変数、ホスト関数の登録、モジュール、Promise など)については 組み込み(Embedding)ガイド を参照してください。

次のステップ