Zig 0.17.0、ビルドシステムを分割し高速な再ビルドを実現
Zig(ジグ)0.17.0が10月2日に公開されました。206人の貢献者による925件のコミットを含み、刷新されたビルドシステム、x86_64 Linuxでのインクリメンタルビルド、LLVM 22.1.8を備えます。
4 分で読めます

数字で見る
- commits in Zig 0.17.0
- 925
- contributors to the release
- 206
- months of work since 0.16
- 5
- LLVM version Zig now builds on
- 22.1.8
Zigプロジェクトは2026年10月2日、5か月の作業を経てZig 0.17.0を公開しました。最大の変更点は、設定と実行を分離するよう作り直されたビルドシステムと、x86_64 Linuxのほとんどのプロジェクトで使えるインクリメンタルコンパイルです。Zigは、Cに代わる現代的な言語としてよく使われるシステムプログラミング言語です。Zigのユーザーにとって、今回のリリースは再ビルドの高速化を意味します。一方で、長い破壊的変更のリストと、当面は使えないエディター環境ももたらします。
Zig 0.17.0の内容
リリースノートによると、0.17.0には206人の貢献者による925件のコミットの変更が含まれます。10月3日にこのリリースを報じたLWN.netは、開発サイクルが当初の想定より大きく、長くなったと指摘しています。主な内容は次のとおりです。
| 分野 | 0.17.0での変更 |
|---|---|
| ビルドシステム | 設定と実行が別々のプロセスで動くように |
| ツール | サードパーティー製ツール向けの新しいBuild Server Protocol |
| コンパイル | x86_64 Linuxのほとんどのプロジェクトでインクリメンタルビルドが可能に |
| リンカー | ELFリンカーがx86_64の完全サポート、SPARC64、ライブラリー、デバッグ情報に対応 |
| LLVM | LLVM 22.1.8にアップグレード |
| ターゲット | loongarch32、aarch64-switch、arm-gba、xtensa-linuxを追加 |
LLVMについては、ループのベクトル化に関する回避策がLLVM 23まで残ると、ノートに記されています。LLVMは、Zigが最適化されたマシンコードを生成するのに使うコンパイラーツールキットです。
新しいビルドシステムの仕組み
Zigのプロジェクトは、Zig自身で書かれたbuild.zigというファイルでビルドの内容を記述します。これまでは、1つのプロセスがこのファイルをコンパイルし、ビルド全体の実行も担っていました。
0.17.0では、この作業が2つに分かれます。Squared Techは5月、まだ開発中だったこの設計を紹介しました。「configurer」プロセスがbuild.zigをデバッグモードでコンパイルし、ビルドの手順を割り出します。次に、リリースモードでコンパイルされた別の「maker」プロセスが、ビルドを実行します。
分割の効果は、速度に表れます。bokviのブログ記事によると、作り直しが開発ブランチに取り込まれた2026年5月に、zig build -hの所要時間は150ミリ秒から14.3ミリ秒に短縮されました。
インクリメンタルコンパイルが実用段階に
インクリメンタルコンパイルとは、プログラム全体ではなく、変更されたコードだけを再ビルドすることです。リリースノートによると、x86_64 Linuxをターゲットとするほとんどのプロジェクトで使えるようになりました。開発者はzig build -fincremental --watchで有効にします。するとビルドシステムがソースファイルを監視し、編集のたびにほぼ即座に再ビルドします。
これは、何か月にもわたる作業の積み重ねです。Squared Techは5月、フルビルドに約36秒かかるプロジェクトで、インクリメンタルな再ビルドが228から288ミリ秒だったと報じました。その時点で、インクリメンタルモードは外部ライブラリーやCのソースファイルにも対応していました。ただし、DWARFデバッグ情報はまだありませんでした。DWARFは、デバッガーがマシンコードをソースの行に対応づけるためのデータです。0.17.0のノートは、改良されたELFリンカーの一部としてDWARFへの対応を挙げています。
Squared Techによると、インクリメンタルモードはデフォルトでは無効で、x86_64 Linuxでしか動きません。
破壊的変更
Zigはまだ1.0に達しておらず、今回のリリースでは多くのコードが動かなくなります。リリースノートは、変更点として次のものを挙げています。
@bitCastが再設計されました。@intFromEnumと@enumFromIntは、@backingIntと@fromBackingIntに置き換えられました。- 配列の乗算構文は削除されました。
void{}構文は削除されました。errdeferは、値をキャプチャーできなくなりました。- Cのヘッダーを直接インポートする組み込み関数
@cImportは、非推奨になりました。
2つのターゲットが削除されました。powerpc-linux-gnueabiとpowerpc64-linux-gnuです。
エディターのサポートは当面使えない
新しいプロセス分割には、代償があります。リリースノートによると、makerとconfigurerのプロセスの分離により、Zig Language Server(ZLS)との連携が壊れます。ZLSは、エディターでZigの自動補完や定義へのジャンプを可能にするものです。ノートによると、これを復旧するためにBuild Server Protocolの作業が進められています。
開発者にとっての意味
締め切りの最中に、動いているプロジェクトをアップグレードしないでください。削除された構文と名前が変わった組み込み関数のリストを見る限り、ある程度の規模のコードベースのほとんどは修正が必要になります。@bitCastには特に注意してください。再設計された変換は、ざっと見ただけでは気づかない形で動作を変える可能性があるからです。従来のキャストに頼る前に、リリースノートの該当箇所を読んでください。
エディターのことも念頭に置いてください。自動補完をZLSに頼っているなら、ZLSが0.17.0に対応するまで0.16にとどまるか、当面はプレーンテキストでの編集を受け入れてください。
x86_64 Linuxで作業しているなら、インクリメンタルビルドを試してみてください。ブランチでzig build -fincremental --watchを実行し、編集から実行までの時間を自分で計測しましょう。Squared Techの300ミリ秒を切る再ビルドは1つのプロジェクトでの結果なので、あなたの数値は異なるはずです。
Zigを主にCコンパイラーとして、あるいはCのコードを呼び出すために使っているなら、すべての@cImportを確認してください。0.17.0で非推奨になったので、今後のリリースで削除される前に移行を計画しましょう。
出典
- 0.17.0 Release Notes - Zig
- 0.17.0 Released - Zig
- Zig 0.17 released - LWN.net
- Zig Incremental Compilation: Fastest Builds Revealed - Squared Tech
- Zig in 2026: Colorless Async I/O and the Road to 1.0 - bokvi
関連記事

Debian Code Search、最後のcgo依存を削除
Michael Stapelberg氏が7年前のCライブラリを、実験的なSIMDパッケージを使った純粋なGo実装に置き換え、C版と同等の速度に到達しました。

改ざんされたstripがNixOS全体にバックドアを仕込める
研究者が、Ken Thompsonのtrusting-trust攻撃をコンパイラではなくGNU stripで構成し、NixOSインストーラのほぼ全バイナリにバックドアを仕込みました。

moldのRust書き換え、Linuxの標準リンカを目指す
moldはLLVMのlldより中央値で4.9倍速くリンクします。作者はこれをRust(ラスト)で書き直し、ディストリビューションに/usr/bin/ldとして採用させることを狙っています。