Apidog

オールインワン協働API開発プラットフォーム

API設計

APIドキュメント

APIデバッグ

APIモック

API自動テスト

初心者のためのZigチュートリアル:Zigのインストールと使い方

中村 拓也

中村 拓也

Updated on 4月 2, 2025

Zigは、堅牢、最適、かつメンテナブルに設計された現代的かつ汎用的なプログラミング言語です。シンプルさと明確さに重点を置きながら、Zigは低レベルの制御を提供し、隠れた制御フローやアロケーションを避けます。このチュートリアルでは、インストールプロセス、最初のZigプログラムの作成、およびテストの実行についてガイドします。最後には、この強力な言語をさらに探求するための堅実な基盤が得られるでしょう。

強力な開発者ツールを探求するにあたって、API開発とテストのためのPostmanの究極の代替であるApidogについて言及する価値があります。Apidogは、APIのドキュメント化、デザイン、モック、テスト、デバッグを一つの効率的なプラットフォームに統合しています。

ボタン

直感的なインターフェース、コラボレーション機能、シームレスなバージョン管理統合を備えたApidogは、APIを使用する開発者のワークフローの効率を大幅に向上させます。その包括的な機能セットには、自動テスト、環境管理、リクエストチェーン、インテリジェントなレスポンス検証が含まれており、現代の開発チームにとって不可欠なツールとなっています。

ボタン

Zigプログラミングに飛び込む前に、APIやウェブサービスを扱う際の全体的な生産性を向上させるために、開発者ツールキットにApidogを追加することを検討してください。

パート1: Zigのインストール

Zigでプログラミングを始めるには、コンパイラとツールをインストールする必要があります。インストールプロセスは、オペレーティングシステムによって異なります。

Linuxへのインストール

LinuxにZigをインストールするための主なオプションは2つあります:

オプション1: ディストリビューションのパッケージマネージャを使用する

ほとんどの主要なLinuxディストリビューションは、最新のZigリリースをパッケージ化しています。これは最も簡単なアプローチです:

# Debian/Ubuntuの場合
sudo apt install zig

# Fedoraの場合
sudo dnf install zig

# Arch Linuxの場合
sudo pacman -S zig

オプション2: 手動でインストールする

ディストリビューションにZigがない場合や特定のバージョンが必要な場合:

公式ウェブサイトから、CPUアーキテクチャに合ったプリビルド版のZigをダウンロードします。

アーキテクチャを確認するには、次を使用します:

uname -m

tarを使用してアーカイブを抽出します:

tar xf zig-linux-x86_64-0.13.0.tar.xz

ZigバイナリをPATHに追加します:

echo 'export PATH="$HOME/zig-linux-x86_64-0.13.0:$PATH"' >> ~/.bashrc

変更を適用します:

source ~/.bashrc

Windowsへのインストール

Windowsユーザーは幾つかのオプションがあります:

オプション1: パッケージマネージャを使用する

# Chocolateyを使用して
choco install zig

# Wingetを使用して
winget install zig.zig

# Scoopを使用して
scoop install zig

オプション2: 手動インストール

Windows用のプリビルド版Zigをダウンロードします。これはCPUアーキテクチャに合わせたものです(ほとんどのWindowsシステムはx86_64/AMD64を使用します)。

アーキテクチャを確認するには:

$Env:PROCESSOR_ARCHITECTURE

ZIPファイルを抽出します。

ZigをPATHに追加します:

現在のユーザーの場合:

[Environment]::SetEnvironmentVariable(
    "Path",
    [Environment]::GetEnvironmentVariable("Path", "User") + ";C:\\\\path\\\\to\\\\zig-windows-x86_64",
    "User"
)

全システムの場合:

[Environment]::SetEnvironmentVariable(
    "Path",
    [Environment]::GetEnvironmentVariable("Path", "Machine") + ";C:\\\\path\\\\to\\\\zig-windows-x86_64",
    "Machine"
)

ターミナルを閉じて再度開きます。

macOSへのインストール

macOSにZigをインストールする最も簡単な方法は、Homebrewを使用することです:

brew install zig

インストールの確認

インストール後、次のコマンドを実行してZigが正しくインストールされていることを確認します:

zig version

次のような出力が表示されるはずです:

0.13.0

パート2: ZigでのHello, World!

Zigがインストールされたので、最初のZigプログラムを作成しましょう。伝統的な「Hello, World!」の例です。

プログラムファイルの作成

  1. main.zigという名前の新しいファイルを作成します。
  2. 好みのテキストエディタで開きます。
  3. 次のコードを追加します:
const std = @import("std");

pub fn main() void {
    std.debug.print("Hello, {s}!\\\\n", .{"World"});
}

このコードが何をしているのかを分解してみましょう:

  • const std = @import("std");はZigの標準ライブラリをインポートします。
  • pub fn main() void {はプログラムのエントリーポイントとして機能するmain関数を宣言します。
  • std.debug.print("Hello, {s}!\\\\n", .{"World"});は標準エラー出力ストリーム(stderr)に「Hello, World!」を出力します。
  • {s}は文字列のフォーマット指定子であり、.{"World"}はZigがフォーマット指定子に引数を渡す方法です。

プログラムの実行

プログラムをビルドして実行するには、次のコマンドを使用します:

zig run main.zig

これにより、コードがコンパイルされ、直ちに実行されます。出力として次のように表示されるはずです:

Hello, World!

ファイルエンコーディングに関する重要な注意

ZigはソースファイルにUTF-8エンコーディングを要求します。invalid bytesのようなエラーが発生した場合、ファイルが別のエンコーディングになっている可能性があります。これを修正するには:

zig fmt main.zig

これにより、ファイルがUTF-8として再エンコードされます。その後、エディタでファイルを再度開いてください。

パート3: Zigでのテストの実行

Zigには、テストを簡単に書いて実行できる組み込みのテストフレームワークがあります。テストの使い方を理解することは、Zigを学ぶ際に重要です。特に、Zigのドキュメントでは多くの例がテストとして提供されています。

常に成功する簡単なテストの作成

基本的なテストファイルを作成してみましょう:

  1. test_pass.zigという名前の新しいファイルを作成します。
  2. 次のコードを追加します:
const std = @import("std");
const expect = std.testing.expect;

test "always succeeds" {
    try expect(true);
}

このコードはテストモジュールをインポートし、trueが常にtrueであることを期待する「常に成功する」という名前のテストを定義します。

このテストを実行するには:

zig test test_pass.zig

次のような出力が表示されるはずです:

All 1 tests passed.

失敗するテストの作成

次に、Zigがテストの失敗を処理する方法を理解するために、失敗するテストを作成してみましょう:

  1. test_fail.zigという名前のファイルを作成します。
  2. 次のコードを追加します:
const std = @import("std");
const expect = std.testing.expect;

test "always fails" {
    try expect(false);
}

このテストは、falsetrueであることを期待しているため、明らかに失敗します。

次のコマンドを実行すると:

zig test test_fail.zig

次のようなエラー出力が表示されます:

Test [1/1] test.always fails... FAIL (TestUnexpectedResult)
/usr/lib/zig/std/testing.zig:515:14: 0x2241ef in expect (test)
if (!ok) return error.TestUnexpectedResult;
^
[...]/test_fail:5:5: 0x224305 in test.always fails (test)
try expect(false);
^
0 passed; 0 skipped; 1 failed.

テストにおけるエラーハンドリングの理解

tryキーワードはZigのテストにおいて重要です。これは、エラーを返す可能性がある関数を実行しようとします。エラーが返された場合、そのエラーは呼び出し元に伝播します。

同じテストをtryキーワードなしで実行してみてください:

test "will not compile correctly" {
    expect(false);
}

潜在的なエラーを処理していないため、コンパイラーエラーが発生します。

パート4: 初心者のためのZigの基本

変数と定数

Zigでは、変数と定数を次のように定義します:

const std = @import("std");

pub fn main() void {
    // 定数(変更不可)
    const fixed_value = 42;

    // 変数(変更可能)
    var changeable_value = 10;
    changeable_value = 20; // これは許可されています

    // 型を明示的に指定できます
    const explicit_integer: i32 = 1234;
    var explicit_float: f64 = 3.14159;

    std.debug.print("Fixed: {d}, Changeable: {d}\\\\n",
        .{fixed_value, changeable_value});
}

基本データ型

Zigにはいくつかの組み込みデータ型があります:

const std = @import("std");

pub fn main() void {
    // 整数
    const i: i32 = -42;       // 符号付き32ビット整数
    const u: u32 = 42;        // 符号なし32ビット整数

    // 浮動小数点数
    const f: f32 = 3.14;      // 32ビット浮動小数点
    const d: f64 = 2.71828;   // 64ビット浮動小数点

    // ブール値
    const b: bool = true;

    // 文字と文字列
    const c: u8 = 'A';                    // 文字(整数として)
    const s: []const u8 = "Hello, Zig!";  // 文字列(u8のスライス)

    // コンパイル時にサイズが決まる固定サイズの配列
    const arr = [5]u8{1, 2, 3, 4, 5};

    std.debug.print("Integer: {d}, Float: {d}\\\\n", .{i, f});
    std.debug.print("String: {s}\\\\n", .{s});
}

関数

Zigでは、fnキーワードを使用して関数を定義します:

const std = @import("std");

// 引数と戻り値を持つ基本関数
fn add(a: i32, b: i32) i32 {
    return a + b;
}

// エラーを返す可能性のある関数
fn divide(a: f32, b: f32) !f32 {
    if (b == 0) {
        return error.DivisionByZero;
    }
    return a / b;
}

pub fn main() void {
    // 簡単な関数の呼び出し
    const sum = add(5, 3);
    std.debug.print("5 + 3 = {d}\\\\n", .{sum});

    // エラーを返す可能性のある関数の呼び出し
    if (divide(10, 2)) |result| {
        std.debug.print("10 / 2 = {d}\\\\n", .{result});
    } else |err| {
        std.debug.print("エラー: {}\\\\n", .{err});
    }

    // エラーを処理する別の方法
    const division_result = divide(10, 0) catch |err| {
        std.debug.print("除算に失敗しました: {}\\\\n", .{err});
        0; // エラーが発生した場合のデフォルト値
    };
    std.debug.print("結果(またはデフォルト): {d}\\\\n", .{division_result});
}

結論

このチュートリアルでは、Zigを始めるための基本事項 - 異なるオペレーティングシステム間でのインストール、最初のプログラムの作成と実行、およびZigのテストフレームワークでの作業について説明しました。また、変数、データ型、関数などの基本的な概念も紹介しました。

Zigは、低レベルの制御を提供しながら、安全性、明確さ、およびメンテナンス性を重視する強力な言語です。エラーハンドリングとメモリ管理のアプローチにより、C、C++、Rustなどの言語に対する興味深い代替手段となります。

Zigの旅を続けるために、次のことを考慮してください:

  • 公式Zigドキュメントを探索する
  • DiscordのZigコミュニティやZiggitフォーラムに参加する
  • より良いIDE統合のためにZig言語サーバーをインストールする
  • 小さなプロジェクトを構築し、実際に体験する

Zigはまだ進化しているため、言語が1.0バージョンに成熟するにつれて、いくつかの機能が変わる可能性があることを忘れないでください。コーディングを楽しんでください!