Yarnをグローバルからproto管理に移行【Nix home-manager】
最近nixやprotoをさわったりhomebrewについて再考したり開発環境を見直している。そんな中あるプロジェクトで使っているyarnが気になった。あれ、このyarn、どこで管理してるっけ?
$ which yarn
<user-home>/.yarn/bin/yarn
そういえばberryにアップグレードする時にグローバルインストールした気がする。これはいけない!
環境
- macOS 15.3.2
- MacBook Air M1
環境管理ツール proto
プロジェクトごとに環境構築するために色々なツールがある。これまでNodeのバージョン管理のためにnodenvやvoltaなど使ったことがあるが、protoはnodeに限らず、bun, denoといったオールインワン・パッケージマネージャとか、go, rust, pyhon, ruby などさまざまなツールに対応しているのが特徴だ。
現在ぼくのnode管理ははるか昔にanyenv, nodenv
で構築したもの。というかanyenv
の存在を最近まで忘れていたものだ。当初はわかりやすいし、ツールを使いこなしてるのイケてるぅと思っていた。でも2段階かけて環境構築していたのは複雑でめんどくさいと感じるようになり、忘れやすいというデメリットもわかった。ぼくのフロントエンド環境は「このnodeどこで入れたっけ?」「yarnはグローバル、pnpmはhomebrew、bunは、、、わからん!」と混乱を極めている。なんとか整理したい。
Nix + proto 使い分け
最近nixで宣言的な環境構築をたのしんでいる。この混乱を極めた開発環境をNix Home Managerで整頓することにした。
- Nix home managerでprotoをインストール
- グローバルで使うコマンド(proto)はhome managerで管理する
- プロジェクトごとのツールは各ディレクトリでprotoをつかって構築
- ex.
some/where/project/
ではNode: 22.x, pnpm: 10.8 など
- ex.
ちなみに、なぜプロジェクトごとのツール管理をnix direnvを使わないのかというと、正直完全にイミュータブルな環境にするのが不安だからというだけ。いま現在では「全部nixファイルで完結するよ〜」という言葉が魅力的ながら、裏を返すと「nix以外でのアップデートできないし設定変更できないぞ」という点が懸念。 nixに慣れてくれば全部nixに移行するかもしれないが、とりあえずプロジェクトごとのツールはprotoを使うことにする。
Nix Home Managerでprotoをインストール
nix home managerのインストール方法は、いくつかの記事を参考にしました。
Protoをインストールするにはpkgs.proto
を追加するだけ。
home.packages = [
...
+ pkgs.proto
];
保存してhome-manager switch
を実行して新しいターミナルをひらくと、あら不思議$ proto
が利用できる。
古いyarnを掃除する
ぼくのPATHを確認すると"$HOME/.yarn/bin" "$HOME/.config/yarn/global/node_modules/.bin"という2つがある。
$ rm -rf $HOME/.config/yarn
$ rm -rf $HOME/.yarn
ほかに見落としがあるかもしれませんが、コマンドとしてはyarn
は使えなくなった。
こういう「見落としがあるかも」というのを排除できるのがnixファイルでの管理の素朴なメリットだなあ。
protoでyarnをインストール
ではプロジェクトsome/where/project/
でyarn
をインストール。
まずこれまで使用していたyarnのバージョンに固定。
$ proto pin yarn 4.6
│ SUCCESS
│ Pinned yarn version ~4.6 to config some/where/project/.prototools
✨ There's a new version of proto available, 0.47.11 (currently on 0.47.9)
✨ Run proto upgrade or install from https://moonrepo.dev/docs/proto/install
$ proto install yarn 4.6
│ SUCCESS
│ yarn 4.6.0 has been installed to <user-home>/.proto/tools/yarn/4.6.0!
以上でインストールできました。which yarn
の結果は<user-home>/.proto/shims/yarn
となりyarn run dev
などのコマンドも動作しました。protoのバージョンについて注意されてますがnixpkgsのアップデート待ちです。
最近nixに入門しました
これからも更新していく予定です。
Discussion