tag:crieit.net,2005:https://crieit.net/tags/asdf/feed
「asdf」の記事 - Crieit
Crieitでタグ「asdf」に投稿された最近の記事
2022-08-13T18:55:09+09:00
https://crieit.net/tags/asdf/feed
tag:crieit.net,2005:PublicArticle/18278
2022-08-13T18:55:09+09:00
2022-08-13T18:55:09+09:00
https://crieit.net/posts/install-nodejs-using-asdf
【node/yarn】asdfでnodeをインストールし、Yarnもつかえるようにする
<p>こんにちは、しきゆらです。</p>
<p>今回は、<a target="_blank" rel="nofollow noopener" href="https://shikiyura.com/2022/08/install_the_multiple-runtime-versions_management_tool__asdf/">こちらで紹介したasdf</a>を使ってNode.jsをインストールし、個人的によく使っているYarnも使えるように環境を作っていきます。</p>
<p>なお、Node.jsのインストールはすぐ終わったのですがYarnのインストールとか諸々に至るまでに紆余曲折ありました。まずは、インストールして環境構築までの流れをまとめます。</p>
<p>その後に、紆余曲折部分をメモしておきます。<br />
必要なコマンドだけよこせ!という方は、以下の「環境構築の流れ」を参考にしてみてください。</p>
<h2 id="環境構築の流れ"><a href="#%E7%92%B0%E5%A2%83%E6%A7%8B%E7%AF%89%E3%81%AE%E6%B5%81%E3%82%8C">環境構築の流れ</a></h2>
<p>コマンド自体の使い方等はそれぞれのツールのサイト等で確認してください。</p>
<pre><code class="zsh"># node用のプラグインを追加
asdf plugin add nodejs
# nodeをインストール
asdf install nodejs latest
# システム全体で使うバージョンを指定
asdf global nodejs latest
# yarnを使う準備
corepack enable
# asdfの再構築
asdf reshim nodejs
</code></pre>
<p>これにて、環境構築は終了です。</p>
<p>yarnの手順が以前とだいぶ変わりましたが、npmで個別にインストールせずにパッケージマネージャを管理する仕組みが入ったようです。<br />
そのおかげで手順がさっぱりしました。</p>
<p>では、前述の通り環境構築の紆余曲折や各ドキュメントを見ながらの細かい話は以下にまとめていきます。</p>
<h2 id="環境構築の紆余曲折"><a href="#%E7%92%B0%E5%A2%83%E6%A7%8B%E7%AF%89%E3%81%AE%E7%B4%86%E4%BD%99%E6%9B%B2%E6%8A%98">環境構築の紆余曲折</a></h2>
<h3 id="Nodeのインストール"><a href="#Node%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB">Nodeのインストール</a></h3>
<p>こちらは、asdfの仕組みにのっとって進めるだけなので、<a target="_blank" rel="nofollow noopener" href="https://shikiyura.com/2022/08/install_the_multiple-runtime-versions_management_tool__asdf/">前回の記事</a>と同じ手順を踏むだけです。</p>
<pre><code class="zsh"># node用のプラグインを追加
asdf plugin add nodejs
# nodeをインストール
asdf install nodejs latest
# システム全体で使うバージョンを指定
asdf global nodejs latest
# 確認
node -v
</code></pre>
<h3 id="Yarnのインストール"><a href="#Yarn%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB">Yarnのインストール</a></h3>
<p>手間取ったのはこちらのほう。<br />
インストールするために、公式サイトを見てみると記述がガラッと変わっていました。<br />
<a target="_blank" rel="nofollow noopener" href="https://yarnpkg.com/getting-started/install">https://yarnpkg.com/getting-started/install</a></p>
<p>Node.js 16.10以上だと以下のコマンドだけでよいとのこと。</p>
<pre><code class="zsh">corepack enable
</code></pre>
<p>corepackとは何ぞや。<br />
と思って調べると、Node.jsのパッケージマネージャを管理するための仕組みのようです。<br />
<a target="_blank" rel="nofollow noopener" href="https://nodejs.org/api/corepack.html">https://nodejs.org/api/corepack.html</a></p>
<p>いい感じにまとめてくれている方がいました。先人に感謝です。<br />
<a target="_blank" rel="nofollow noopener" href="https://zenn.dev/teppeis/articles/2021-05-corepack">https://zenn.dev/teppeis/articles/2021-05-corepack</a></p>
<p>ということで、公式の手順に従ってコマンド実行してみました。</p>
<pre><code class="zsh"># corepackを有効化
corepack enable
# yarnは入った・・・?
yarn
zsh: command not found: yarn
</code></pre>
<p>ということで、実行してもyarnは使えませんでした。</p>
<h3 id="corepackについてもう少し調べてみる"><a href="#corepack%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6%E3%82%82%E3%81%86%E5%B0%91%E3%81%97%E8%AA%BF%E3%81%B9%E3%81%A6%E3%81%BF%E3%82%8B">corepackについてもう少し調べてみる</a></h3>
<p>なんでじゃ、と思ってこれまた調べてみると、プロジェクトごとに使うパッケージマネージャを指定するような使い方を想定しているようです。</p>
<p>そして、事前に使うパッケージマネージャを指定することもできるようです。<br />
ということで、以下のコマンドで明示的にyarnを使うようにしてみます。</p>
<pre><code class="zsh"># 明示的にyarnを使う
corepack prepare --activate [email protected]
# yarnは入った・・・?
yarn
zsh: command not found: yarn
</code></pre>
<p>同じくコマンドがない、と怒られたのでいろいろ考えてみました。<br />
ここで思い出したのが、rbenvではrehashというコマンドを使っていたこと。<br />
gemや新しいバージョンのRubyをインストールしたときはとりあえずrehashしておけ、<br />
という程度の認識でしたが、このような仕組みがasdfにもあるのでは、と思い調べてみました。</p>
<h3 id="asdf reshim"><a href="#asdf+reshim">asdf reshim</a></h3>
<p>調べてみると、ドンピシャな質問と回答が出てきました。<br />
<a target="_blank" rel="nofollow noopener" href="https://stackoverflow.com/questions/70082424/command-not-found-corepack-when-installing-yarn-on-node-v17-0-1">https://stackoverflow.com/questions/70082424/command-not-found-corepack-when-installing-yarn-on-node-v17-0-1</a></p>
<p>asdf reshim <name>というコマンドでrbenv rehashのようなことができるとのこと。<br />
<a target="_blank" rel="nofollow noopener" href="https://asdf-vm.com/manage/core.html#reshim">https://asdf-vm.com/manage/core.html#reshim</a></p>
<p>上記によると、インストール時に~/.asdf/shimsへコマンドとして使えるようにファイルが自動的に生成されるが、それ以外ではファイルが生成されないのこと。今回の場合は、nodeインストール後に手動でcorepack enableやcorepack prepare --activate [email protected]を実行しているのでasdf的には存在を知らない。そこで、asdfに追加があったことを教えてあげて、ファイルを作ってもらう必要があったようだ。</p>
<pre><code class="zsh"># asdfにファイル生成をしてもらう
asdf reshim nodejs
# 確認
yarn -v
# => 3.2.2
</code></pre>
<p>ようやく使えるようになりました。<br />
ただ、未確認ではありますが、asdf reshimの動きを見るとcorepack prepareは不要な気がします。<br />
ということで、「環境構築の流れ」では省いてます。</p>
<h3 id="おまけ: rbenv rehashについて改めて確認してみる"><a href="#%E3%81%8A%E3%81%BE%E3%81%91%3A+rbenv+rehash%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6%E6%94%B9%E3%82%81%E3%81%A6%E7%A2%BA%E8%AA%8D%E3%81%97%E3%81%A6%E3%81%BF%E3%82%8B">おまけ: rbenv rehashについて改めて確認してみる</a></h3>
<p>ここで、改めてrbenv rehashを調べてみました。<br />
<a target="_blank" rel="nofollow noopener" href="https://github.com/rbenv/rbenv#rbenv-rehash">https://github.com/rbenv/rbenv#rbenv-rehash</a></p>
<p>御幣を恐れずにざっくり書けば、新しいgemやRubyをインストールした場合は「~/.rbenv/versions/*/bin/」にインストールされるが、PATHが通っているのは「~/.rbenv/shims」なのでそのままでは使うことはできません。<br />
そこで、バージョン切り替えやgemのコマンドなどを追加する場合は新たに「~/.rbenv/shims」へコピーしてあげる必要があるわけです。そのコマンドがrbenv rehashのようです。</p>
<p>・・・とはいえ、いつの間にかrbenv installなどのタイミングで良しなにrbenv rehashが実行されるようになり明示的に実行する必要はなくなったようです。</p>
<p>ということで、asdfも正式版がリリースされる頃にはもしかしたら今回のようなごたごたはなくなるかもしれないなぁ・・・ということを思いながら、諸々調べる機会を与えてくれて感謝しつつ紆余曲折のメモを終わります。</p>
<h2 id="まとめ"><a href="#%E3%81%BE%E3%81%A8%E3%82%81">まとめ</a></h2>
<p>今回は、asdfを使ってNode.jsをインストールし、パッケージマネージャのYarnを使えるように環境構築をしました。<br />
いつの間にかYarnのインストール方法が変わっていたり、asdfの仕組みに躓いたりしましたが、いろいろなことを調べたり知ることができたので満足です。</p>
<p>というわけで、今回はここまで。<br />
おしまい</p>
しきゆら