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
をもっと活用していきたい。