VS CodeのZig設定
ようやく、VS CodeでZigを安定して使えるようにする方法が見つかったので、同じ問題で誰かが頭を悩ませずに済むことを願って、私の設定を共有します。

VS CodeのZig拡張機能が正常に動作している様子
動作する解決策にたどり着くまで、Zigのバージョンが合わなかったり、VS CodeがZigのセマンティクスをまったく認識できず、素朴なオートコンプリートにフォールバックしたりする問題に何度も遭遇していました。
プロジェクトごとに異なるZigのバージョンを管理する
Zigはまだ安定版の1.0リリースに到達していません。Zigで書かれたソフトウェアに取り組む場合は、そのプロジェクトに合ったバージョンのZigコンパイラーを使う必要があります。
複数のプロジェクトに取り組むなら、同じシステム上で異なるバージョンのZigを切り替えて使う方法が必要です。
Zigのバージョン管理にはZig Version Managerが最もよく使われているようですが、私は試したことがないので、VS Codeとどのように連携するのかは分かりません。
私はNixの開発シェルを使ってプロジェクトごとにZigのバージョンを管理しています。以下では、その方法を紹介します。
問題:VS CodeがZLSを見つけられない
Zigプロジェクトを開くと、VS Codeは親切にもZig Language Serverを有効にするよう促してくれます。しかし「はい」と答えると、次のエラーメッセージが表示されます。

ZLSのインストールに失敗
問題は、Nixの開発環境を起動する前にVS Codeを起動していることです。そのため、ZigのVS Codeプラグインは、ローカルのZigコンパイラーやZig Language Serverのバイナリであるzlsの場所を知ることができません。
解決策:direnvのVS Code拡張機能を使う
追記(2025-02-14):Nixに依存しないもっと簡単な解決策があります。
最初は、開発シェルに入るたびにNix flakeがVS Codeの設定を自動的に書き換えるという、かなり奇妙な解決策を考えました。これなら、VS Codeは常にZigとZLSのバイナリへの最新のパスを持つことになります。
その後、fasterthanlimeの記事を読んで、もっと簡単な解決策があることを知りました。
direnvのVS Code拡張機能を使えば、手間をかけずにZigのパスをVS Codeと同期できます。この方法なら、VS CodeでRemote SSH開発を使う場合にも動作します。
完全に動作する私の解決策
ここでは私の解決策について説明しますが、説明を読み飛ばしてそのまま使いたい場合は、下にコピーしやすいテンプレートを用意しています。
flake.nix
ここで大部分の仕事をしているのが、私のNix flakeです。
{
description = "Zig development environment";
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixos-24.11";
flake-utils.url = "github:numtide/flake-utils";
zig-overlay.url = "github:mitchellh/zig-overlay";
# Keep in sync with zigVersion below.
zls-overlay.url = "github:zigtools/zls/0.13.0";
};
outputs = {
self,
nixpkgs,
flake-utils,
...
} @ inputs:
flake-utils.lib.eachSystem (builtins.attrNames inputs.zig-overlay.packages) (system: let
pkgs = import nixpkgs {
inherit system;
overlays = [
(final: prev: {
zigpkgs = inputs.zig-overlay.packages.${prev.system};
})
];
};
zigVersion = "0.13.0";
zig = pkgs.zigpkgs.${zigVersion};
zls = inputs.zls-overlay.packages.${system}.zls.overrideAttrs (old: {
nativeBuildInputs = [zig];
});
in {
devShells.default = pkgs.mkShell {
packages = with pkgs; [
zig
zls
];
shellHook = ''
echo 'zls' "$(zls --version)"
echo 'zig' "$(zig version)"
'';
};
});
}Nix flakeによって、ZigコンパイラーとZig Language Server(ZLS)を含む開発シェルが作成されます。
ここではZig 0.13.0を指定していますが、タグの付いた任意のリリースに変更できます。Zigのプレリリース版、つまり開発版を使うには、0.13.0の2か所をmasterに変更してください。
0.13.0の重複をなくして定義を1か所にまとめる方法をいくつか試しましたが、Nix言語の知識が足りず、方法を見つけられませんでした。解決策がある方は、ぜひ教えてください。
.envrc
私の解決策では、プロジェクトディレクトリにいる間は常にNixの開発シェルを起動するためにdirenvを使います。定義は簡単です。
use_flake.vscode/extensions.json
VS CodeをZigと連携させるには、2つのVS Code拡張機能が必要です。
{
"recommendations": ["mkhl.direnv", "ziglang.vscode-zig"]
}1つ目は公式のZig VS Code拡張機能です。
もう1つの、少し分かりにくい方がdirenvのVS Code拡張機能です。これにより、VS CodeからNixの開発シェル内にあるパスが見えるようになります。
.vscode/settings.json
最後に、VS CodeにZig Language Serverを使わせるための設定が1つだけ必要です。
{
"zig.zls.enabled": "on"
}テンプレートをコピーする
私の設定を簡単に再現できるよう、Nix flakeのテンプレートを作りました。
必要なもの
- Nix(私が使っているのは2.24.12)
- flakeを有効にしてあること
- direnv(私が使っているのは2.35.0)
- VS Code(私が使っているのは1.96.4)
ZigとVS Code用のNix flakeテンプレート
私のZig + VS Codeの解決策をまとめたNix flakeテンプレートを作りました。次のコマンドを実行すれば使えます。
nix flake init \
--template git+https://codeberg.org/mtlynch/zig-vscode-flake.gitnix flake initを実行したら、続けてdirenv allowを実行します。zigとzlsが利用可能であることが表示されるはずです。
$ direnv allow
...
direnv: nix-direnv: Renewed cache
Alejandra 3.0.0
zls 0.13.0
zig 0.13.0最後に、VS Codeで「Extensions: Show Recommended Extensions」を開き、推奨されている拡張機能をインストールします。
ここまでできたら、zig initを実行して新しいプロジェクトを作成できます。Zig VS Code拡張機能がZigと正常に連携して動作するはずです。

すべてが正常に動作していれば、src/main.zigに言語オーバーレイが表示され、Zigライブラリの定義へジャンプできるはずです。
Zigのバージョンを変更する
私のflakeでは、執筆時点で最新リリースのZig 0.13.0を指定しています。
別のタグ付きリリースを使いたい場合は、0.13.0を別のバージョンに置き換えます。
EXISTING_ZIG_VERSION='0.13.0' # Set to whatever the version in the flake.nix is.
NEW_ZIG_VERSION='0.12.0' # Set to your desired Zig version.Zigの最先端のプレリリース版を使うには、バージョンをmasterに設定します。
NEW_ZIG_VERSION='master' # Set if you want bleeding edge Zig.flake.nixファイルのZigのバージョンを更新したら、次のコマンドを実行して変更を適用します。
sed \
--in-place \
"s/${EXISTING_ZIG_VERSION}/${NEW_ZIG_VERSION}/g" \
flake.nix && \
nix flake update zig zls-overlay && \
nix develop変更を反映するには、VS Codeを単に再読み込みするだけでなく、再起動しなければならない場合があります。
追記:Nixを使わない、もっと簡単な解決策
Zig VS Code拡張機能の開発者の1人がこの記事に返信を寄せ、Zigのバージョンは拡張機能だけで管理できるはずだと教えてくれました。
Zig VS Code拡張機能でZigのインストールを管理できるとは知らなかったので、試してみました。VS Code拡張機能からZigをインストールするには、VS Codeのコマンドパレットを開き、次を選択します。
- Zig Setup: Install Zig

次に、使いたいZigのバージョンを選べば動くはずです。反映させるには、settings.jsonを手動で設定し、VS Codeを再読み込みする必要がありました。
私はNixの開発シェルが気に入っているので、これからも自分のものを使い続けます。ただ、シンプルな構成だけを求めるなら、Zigのインストール管理はZig VS Code拡張機能に任せた方がよいでしょう。
記事をランダムに読む