.zigファイルの作成と実行方法
『Zig』では、ソースコードを `.zig` という拡張子のファイルに記述し、`zig run` コマンドを使ってコンパイルと実行を一括で行えます。ここでは、`.zig` ファイルの基本的な書き方と、`zig run` によるプログラムの実行手順を解説します。
構文
// -----------------------------------------------
// .zig ファイルの基本構造
// -----------------------------------------------
// 標準ライブラリをインポートします
const std = @import("std");
// pub fn main() !void がエントリポイントです
// !void はエラーユニオン型を示します(エラーが返る可能性がある void)
pub fn main() !void {
// 標準出力への Writer を取得します
const stdout = std.io.getStdOut().writer();
// try で関数のエラーを呼び出し元へ伝播します
// {s} は文字列、{d} は整数の10進数を表すフォーマット指定子です
try stdout.print("Hello, {s}!\n", .{"World"});
}
// -----------------------------------------------
// zig run — .zig ファイルをコンパイルして実行します
// -----------------------------------------------
zig run ファイル名.zig
// ファイル名.zig : 実行する Zig ソースファイルのパスです
// コンパイルと実行が一括で行われます(一時バイナリは自動削除されます)
構文一覧
| 構文 / コマンド | 概要 |
|---|---|
const std = @import("std"); | 標準ライブラリをインポートします。ほぼすべての Zig プログラムで先頭に記述します。 |
pub fn main() !void { } | プログラムのエントリポイントを定義します。! はエラーユニオン型を示します。 |
std.io.getStdOut().writer() | 標準出力への Writer を取得します。print() や writeAll() で出力します。 |
try 式 | エラーが返された場合に呼び出し元へそのまま伝播します。エラーハンドリングの基本構文です。 |
stdout.print("...", .{}) | フォーマット文字列を標準出力に書き込みます。第2引数はフォーマット引数のタプルです。 |
{s} | 文字列(スライス)用のフォーマット指定子です。 |
{d} | 整数の10進数表示用のフォーマット指定子です。 |
const 定数名 = 値; | 変更不可の定数を定義します。Zig では型推論により型を省略できます。 |
zig run ファイル名.zig | ソースファイルをコンパイルしてそのまま実行します。開発中の動作確認に使います。 |
zig fmt ファイル名.zig | ソースファイルを Zig 公式スタイルに従って自動整形します。 |
サンプルコード
『.zig』ファイルの作成とzig runを使ったコンパイル・実行手順を確認するサンプルコードです。
kof_fighters.zig
// kof_fighters.zig — .zig ファイルの基本構造と zig run による実行サンプルです
// KOF(ザ・キング・オブ・ファイターズ)のキャラクターを使って
// ファイルの書き方と標準出力への表示を確認します
// 標準ライブラリをインポートします
// @import() はコンパイル時に解決される組み込み関数です
const std = @import("std");
// pub fn main() !void がプログラムのエントリポイントです
// pub は外部から参照可能であることを示します
// !void はエラーが返る可能性がある void 型(エラーユニオン型)を意味します
pub fn main() !void {
// 標準出力への Writer を取得します
// getStdOut() で標準出力ファイルを取得し、writer() で書き込み用インターフェースを得ます
const stdout = std.io.getStdOut().writer();
// KOF のキャラクター名を定数として定義します
// const は変更不可のバインディングです
// []const u8 は UTF-8 バイト列のスライス型(文字列型)です
const terry: []const u8 = "テリー・ボガード";
const kyo: []const u8 = "草薙京";
const iori: []const u8 = "八神庵";
const mai: []const u8 = "不知火舞";
const ralph: []const u8 = "ラルフ・ジョーンズ";
// 各キャラクターの必殺技名を定数として定義します
const terry_move: []const u8 = "パワーウェイブ";
const kyo_move: []const u8 = "八稚女";
const iori_move: []const u8 = "闇払い";
const mai_move: []const u8 = "花蝶扇";
const ralph_move: []const u8 = "ガトリングアタック";
// try は print() がエラーを返した場合に main() の呼び出し元へ伝播します
// {s} は文字列スライスを表示するフォーマット指定子です
try stdout.print("=== KOF ファイター紹介 ===\n", .{});
try stdout.print("\n", .{});
// キャラクター名と必殺技を組み合わせて表示します
// print() の第2引数は .{} で囲んだタプル形式で渡します
try stdout.print("ファイター: {s} 必殺技: {s}\n", .{ terry, terry_move });
try stdout.print("ファイター: {s} 必殺技: {s}\n", .{ kyo, kyo_move });
try stdout.print("ファイター: {s} 必殺技: {s}\n", .{ iori, iori_move });
try stdout.print("ファイター: {s} 必殺技: {s}\n", .{ mai, mai_move });
try stdout.print("ファイター: {s} 必殺技: {s}\n", .{ ralph, ralph_move });
try stdout.print("\n", .{});
// 配列を使って戦闘力をまとめて管理します
// [_]u32 は要素数をコンパイラが推論する u32 型の配列です
const power_levels = [_]u32{ 850, 900, 880, 780, 870 };
const names = [_][]const u8{ terry, kyo, iori, mai, ralph };
try stdout.print("--- 戦闘力ランキング ---\n", .{});
// for 文で配列を並列に走査します
// |name, power| で各要素の値を取り出します
for (names, power_levels) |name, power| {
// {d} は整数を10進数で表示するフォーマット指定子です
try stdout.print(" {s}: {d}\n", .{ name, power });
}
try stdout.print("\nzig run による実行が完了しました!\n", .{});
}
コンパイルして実行すると次のように出力されます。
zig run kof_fighters.zig === KOF ファイター紹介 === ファイター: テリー・ボガード 必殺技: パワーウェイブ ファイター: 草薙京 必殺技: 八稚女 ファイター: 八神庵 必殺技: 闇払い ファイター: 不知火舞 必殺技: 花蝶扇 ファイター: ラルフ・ジョーンズ 必殺技: ガトリングアタック --- 戦闘力ランキング --- テリー・ボガード: 850 草薙京: 900 八神庵: 880 不知火舞: 780 ラルフ・ジョーンズ: 870 zig run による実行が完了しました!
概要
『Zig』のソースファイルは `.zig` という拡張子で保存します。エントリポイントは pub fn main() !void で定義し、標準ライブラリは @import("std") でインポートします。標準出力への書き込みは std.io.getStdOut().writer() で取得した Writer の print() メソッドを使い、try キーワードでエラーを呼び出し元へ伝播します。zig run ファイル名.zig を実行すると、コンパイルと実行が一括で行われ、一時的なバイナリファイルは実行後に自動的に削除されます。開発中の動作確認に非常に便利なコマンドです。本番向けのバイナリを生成したい場合は zig build-exe を使います。変数・定数の詳細については 変数と定数 を、標準出力への出力方法については print(標準出力) を合わせて確認してください。
記事の間違いや著作権の侵害等ございましたらお手数ですがこちらまでご連絡頂ければ幸いです。