lulliecat

Software Design & Development

検索

Nix Flakes でどこでも同じ開発環境を再現できるようになった話

開発環境大河るり(Taiga Luri)大河るり(Taiga Luri)

この記事をシェア

このエントリーをはてなブックマークに追加

プログラミングを始めると、様々なツールやライブラリをインストールする必要があります。グローバル環境に直接ツール類をインストールしていくと、だんだんと環境が汚れてしまいます。今回は、この問題を解決するパッケージマネージャ「Nix」と、そのバージョン管理ツールである「Nix flakes」について動画で解説しました。

動画内でもお話しましたが、ぼくはこのNixというパッケージマネージャのことをとても気に入っています。なんといってもグローバル環境を汚さないところが良いですね。/nixというディレクトリに全てのパッケージが導入されるので、nix自体を削除するのすら簡単です。インストールが、スクリプトをダウンロードしてきて実行する、という形なのが少しきになりますが...セキュリティ的に...

他の人のプロジェクトで、nix flakesがあってよかったなと思ったプロジェクトは、llama.cppですね。最初、雑に触ったときはビルドガイドを参考に必要そうなパッケージを導入していたのですが、どうにもビルドが失敗していました。ですが、よくよく見るとflake.nixが存在してるじゃん、と気付いてnix developして無事ビルドが通りました。らくちんでしたね。

flake.nixのサンプルとして、ぼくの作ったツールのsvg2woff2にあるflake.nixをご紹介します。以下のような記述になっています。配信で紹介したものと同じ内容です。

{
  description = "Node develop environment";

  inputs = {
    nixpkgs.url = "github:nixos/nixpkgs?ref=nixos-unstable";
  };

  outputs = { self, nixpkgs }:
  let
    system = "x86_64-linux";
    pkgs = import nixpkgs { inherit system; };
  in {
    devShells.${system}.default = pkgs.mkShell {
      buildInputs = with pkgs; [
        nodejs_24
        bun
      ];
    };
  };
}

nix flakesを使って先ほどのsvg2woff2をビルドできるようにする手順を以下に示します。シェル上で以下のコマンドを1行ずつ実行してください。これの上2行は、動画内で説明したものと同一です。

sh <(curl --proto '=https' --tlsv1.2 -L https://nixos.org/nix/install) --no-daemon
mkdir -p ~/.config/nix && echo "experimental-features = nix-command flakes" > ~/.config/nix/nix.conf
git clone https://github.com/osawa-naotaka/svg2woff2.git
cd svg2woff2
nix develop
bun run build

たぶんコピペで動くと思います。上2行は、nixを使い始める初回だけ必要なので、一度設定した後は3行目以降の手順、というか、nix developをするだけで開発環境を構築します。nix developを実行するとシェルが改めて動き、その環境内では指定した開発ツールが使えるようになります。開発を終えたらexitするだけで元の環境に戻ります。以上のように、これだけで全ての必要な開発環境が構築できて、使い終わったら環境を元に戻せるのでとてもらくちんです。

以上、今回の動画の補足でした。Nix、ほんとうにオススメなのでぜひご利用ください!