2022-08-13に投稿

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

こんにちは、しきゆらです。

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

なお、Node.jsのインストールはすぐ終わったのですがYarnのインストールとか諸々に至るまでに紆余曲折ありました。まずは、インストールして環境構築までの流れをまとめます。

その後に、紆余曲折部分をメモしておきます。
必要なコマンドだけよこせ!という方は、以下の「環境構築の流れ」を参考にしてみてください。

環境構築の流れ

コマンド自体の使い方等はそれぞれのツールのサイト等で確認してください。

# 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

Yarnのインストール

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

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

corepack enable

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

いい感じにまとめてくれている方がいました。先人に感謝です。
https://zenn.dev/teppeis/articles/2021-05-corepack

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

# corepackを有効化
corepack enable

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

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

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

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

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

# 明示的にyarnを使う
corepack prepare --activate [email protected]

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

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

asdf reshim

調べてみると、ドンピシャな質問と回答が出てきました。
https://stackoverflow.com/questions/70082424/command-not-found-corepack-when-installing-yarn-on-node-v17-0-1

asdf reshim <name>というコマンドでrbenv rehashのようなことができるとのこと。
https://asdf-vm.com/manage/core.html#reshim

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

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

# 確認
yarn -v
# =&gt; 3.2.2

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

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

ここで、改めてrbenv rehashを調べてみました。
https://github.com/rbenv/rbenv#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の仕組みに躓いたりしましたが、いろいろなことを調べたり知ることができたので満足です。

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

Originally published at shikiyura.com
ツイッターでシェア
みんなに共有、忘れないようにメモ

しきゆら

勉強したり手を動かした記録を「しきゆらの備忘録」(http://shikiyura.com)へ投稿している人。 Ruby/JavaScriptをよく書いている。いろんな言語に触れてみたい。新しい物・辛いもの好き。バグは愛すべきもの。一応社会人。

Crieitは誰でも投稿できるサービスです。 是非記事の投稿をお願いします。どんな軽い内容でも投稿できます。

また、「こんな記事が読みたいけど見つからない!」という方は是非記事投稿リクエストボードへ!

有料記事を販売できるようになりました!

こじんまりと作業ログやメモ、進捗を書き残しておきたい方はボード機能をご利用ください。
ボードとは?

コメント