【WSL/node】asdfでnodeをインストールし、yarnも使えるようにする

2022年8月22日

こんにちは、しきゆらです。
今回は、以前紹介したasdfを使ってNode.jsをインストールし、個人的によく使っているYarnも使えるように環境を作っていきます。

なお、Node.jsのインストールはすぐ終わったのですがYarnのインストールとか諸々に至るまでに紆余曲折ありました。
まずは、インストールして環境構築までの流れをまとめます。
その後に、紆余曲折部分をメモしておきます。
必要なコマンドだけよこせ!という方は、以下の「環境構築の流れ」を参考にしてみてください。

環境構築の手順

コマンド自体の使い方等はそれぞれのツールのサイト等で確認してください。
なお、インストール先はタイトルにある通りWSL2上に動いているUbuntu20.04です。

# node用のプラグインを追加
asdf plugin add nodejs

# nodeをインストール
asdf install nodejs latest

# システム全体で使うバージョンを指定
asdf global nodejs latest

# yarnを使う準備
corepack enable

# asdfの再構築
asdf reshim nodejs

これにて、環境構築は終了です。

yarnの手順が以前とだいぶ変わりましたが、npmで個別にインストールせずにパッケージマネージャを管理する仕組みが入ったようです。
そのおかげで手順がさっぱりしました。

では、前述の通り環境構築の紆余曲折や各ドキュメントを見ながらの細かい話は以下にまとめていきます。


環境構築の紆余曲折

Nodeのインストール

こちらは、asdfの仕組みにのっとって進めるだけなので、前回の記事と同じ手順を踏むだけです。

# node用のプラグインを追加
asdf plugin add nodejs

# nodeをインストール
asdf install nodejs latest

# システム全体で使うバージョンを指定
asdf global nodejs latest

# 確認
node -v
# => v18.7.0

Yarnのインストール

手間取ったのはこちらのほう。
インストールするために、公式サイトを見てみると記述がガラッと変わっていました。

Node.js 16.10以上だと以下のコマンドだけでよいとのこと。

corepack enable

corepackとは何ぞや。
と思って調べると、Node.jsのパッケージマネージャを管理するための仕組みのようです。

いい感じにまとめてくれている方がいました。先人に感謝です。

ということで、公式の手順に従ってコマンド実行してみました。

# corepackを有効化
corepack enable

# yarnは入った・・・?
yarn
zsh: command not found: yarn

ということで、実行してもyarnは使えませんでした。

corepackについてもう少し調べてみる

なんでじゃ、と思ってこれまた調べてみると、プロジェクトごとに使うパッケージマネージャを指定するような使い方を想定しているようです。

そして、事前に使うパッケージマネージャを指定することもできるようです。
ということで、以下のコマンドで明示的にyarnを使うようにしてみます。

# 明示的にyarnを使う
corepack prepare --activate yarn@3.2.2

# yarnは入った・・・?
yarn
zsh: command not found: yarn

同じくコマンドがない、と怒られたのでいろいろ考えてみました。
ここで思い出したのが、rbenvではrehashというコマンドを使っていたこと。
gemや新しいバージョンのRubyをインストールしたときはとりあえずrehashしておけ、
という程度の認識でしたが、このような仕組みがasdfにもあるのでは、と思い調べてみました。

asdf reshim

調べてみると、ドンピシャな質問と回答が出てきました。

asdf reshim <name>というコマンドでrbenv rehashのようなことができるとのこと。

上記によると、インストール時に~/.asdf/shimsへコマンドとして使えるようにファイルが自動的に生成されるが、それ以外ではファイルが生成されないのこと。
今回の場合は、nodeインストール後に手動でcorepack enablecorepack prepare --activate yarn@3.2.2を実行しているのでasdf的には存在を知らない。
そこで、asdfに追加があったことを教えてあげて、ファイルを作ってもらう必要があったようだ。

# asdfにファイル生成をしてもらう
asdf reshim nodejs

# 確認
yarn -v
# => 3.2.2

ようやく使えるようになりました。
ただ、未確認ではありますが、asdf reshimの動きを見るとcorepack prepareは不要な気がします。
ということで、「環境構築の流れ」では省いてます。

おまけ: rbenv rehashについて改めて確認してみる

ここで、改めてrbenv rehashを調べてみました。

御幣を恐れずにざっくり書けば、新しいgemやRubyをインストールした場合は「~/.rbenv/versions/*/bin/」にインストールされるが、PATHが通っているのは「~/.rbenv/shims」なのでそのままでは使うことはできません。
そこで、バージョン切り替えやgemのコマンドなどを追加する場合は新たに「~/.rbenv/shims」へコピーしてあげる必要があるわけです。
そのコマンドがrbenv rehashのようです。

・・・とはいえ、いつの間にかrbenv installなどのタイミングで良しなにrbenv rehashが実行されるようになり明示的に実行する必要はなくなったようです。

ということで、asdfも正式版がリリースされる頃にはもしかしたら今回のようなごたごたはなくなるかもしれないなぁ・・・
ということを思いながら、諸々調べる機会を与えてくれて感謝しつつ紆余曲折のメモを終わります。

まとめ

今回は、asdfを使ってNode.jsをインストールし、パッケージマネージャのYarnを使えるように環境構築をしました。
いつの間にかYarnのインストール方法が変わっていたり、asdfの仕組みに躓いたりしましたが、いろいろなことを調べたり知ることができたので満足です。

というわけで、今回はここまで。
おしまい