node2nixの使い方

Table of Contents

背景・動機

最近のAIツールの隆盛でnpm packageを使う機会が増えてきた。 MCP実行するpackageの管理や、claude codeのようなpackageの管理をNixなどが具体例として挙げられる。

@github/copilot-language-serverをNixで扱う時のメモmcp-servers-nixを導入した でも node2nix を使っていることを書いていたので、 node2nix の使い方について後学の為に纏めておく。

試したこと・やったこと

1. node2nix周辺調査

公式レポジトリは以下で、「Generate Nix expressions to build NPM packages」というdescriptionがあるとおり、npm packageをnix packageとして扱えるようにしてくれるもの。

https://github.com/svanderburg/node2nix

日本語解説記事は以下。

2. node2nixセットアップ

自分のnixos-configurationに node2nix/ というディレクトリを掘った。

https://github.com/takeokunn/nixos-configuration/tree/main/node2nix

次のようにコマンドを叩くと必要なファイルが作成される。

$ nix-shell -p nodePackages.node2nix
$ echo '["@github/copilot-language-server", "@anthropic-ai/claude-code", "sitemcp"]' >> node-packages.json
$ node2nix -i node-packages.json

3. home-managerに組込み

node2nix のディレクトリをimportして home.packages に登録するだけ。

let
  pkgs = import nixpkgs {
    inherit system;
    config.allowUnfree = true;
    overlays = basicOverlay ++ advancedOverlay;
  };
  nodePkgs = pkgs.callPackage ../node2nix { inherit pkgs; };
in
n{
  home.packages = [
    nodePkgs."@anthropic-ai/claude-code"
  ];
}

4. GitHub Actionsで定期的に更新

一部抜粋すると以下。毎日packageの更新するようにしている。

https://github.com/takeokunn/nixos-configuration/blob/main/.github/workflows/update.yml

name: update
on:
  workflow_dispatch:
  schedule:
    - cron: 0 10 * * *
jobs:
  nix-update:
    name: Update lockfile
    runs-on: ubuntu-latest
    steps:
      - name: Run node2nix
        run: |
          cd node2nix/
          nix-shell -p nodePackages.node2nix --command "node2nix -i ./node-packages.json -o node-packages.nix"

得られた結果・所感

AI関連ツールの進化は激しすぎるので継続的に更新する必要がある。 運用しはじめて半年くらい経ったが、特に事故ることもなく極めて安全に更新し続けられているので導入してよかった。

今後の展開・検討事項

AI関連ツールをもっと簡単に検証してブログに書いていきたい。 node2nix だけでなく hoge2nix をもっと活用していきたい。