Node.js な環境が必要なとき、自分の開発環境では anyenv 配下の nodenv を使っており、パッケージマネージャーは npm を使っていました。
とくに不便を感じたわけではないのですが、yarn を使う必要がでてきたため、手元の環境へ yarn をインストールする方法から調べ始めたところ、nodenv-yarn-install という nodenv のプラグインがよさそうだったので使ってみることにしました。
設定方法も使い方も簡単なようで、すぐにプラグインのインストールは完了しました。
ところが。
nodenv で新しいバージョンをインストールしてみても、既存バージョンを再インストールしなおしてみても、yarn がインストールされない状況に遭遇したので、そのときの解決方法をメモしておきます。
最初に結論
自分の場合は
% touch $(nodenv root)/default-packages
とすることで、プラグインが無事動くようになりました。
症状
マニュアル通り nodenv-yarn-install を以下のようにインストールし
% mkdir -p "$(nodenv root)/plugins"
% git clone https://github.com/pine/nodenv-yarn-install.git "$(nodenv root)/plugins/nodenv-yarn-install"
手元では未インストールだった v12.13.0 をインストールしてみましたが、以下のような感じで、yarn のインストールが始まらず終了してしまいました。
% nodenv install 12.13.0
Downloading node-v12.13.0-linux-x64.tar.gz...
-> https://nodejs.org/dist/v12.13.0/node-v12.13.0-linux-x64.tar.gz
Installing node-v12.13.0-linux-x64...
Installed node-v12.13.0-linux-x64 to /Users/.centos/.anyenv/envs/nodenv/versions/12.13.0
nodenv: default-packages file not found
nodenv-default-packages プラグインが何か言っている……と気にしつつも、この時点で v12.13.0 自体はインストールできており、使える状態になっていました。
ちなみに nodenv install コマンドのフックを確認すると以下のように nodenv-default-packages と nodenv-yarn-install プラグインのトリガーが登録されていました。
% nodenv hooks install
/Users/.centos/.anyenv/envs/nodenv/plugins/nodenv-default-packages/etc/nodenv.d/install/default-packages.bash
/Users/.centos/.anyenv/envs/nodenv/plugins/nodenv-yarn-install/etc/nodenv.d/install/yarn-install.bash
原因
nodenv を使い始めたときに、nodenv-default-packages というプラグインをインストールしていました。
このプラグインは nodenv install コマンド実行時に自動的にインストールしたい npm パッケージを設定しておけるという便利なものなのですが、インストールはしたものの、自動的にインストールしておきたいパッケージも特になく、マニュアルのInstallationだけ行った状態で nodenv を利用していました。
マニュアルのUsageには自動的にインストールしたいパッケージの書き方および設定ファイルについて記載がありますが、まだなにも必要なかったため、$(nodenv root)/default-packages ファイル自体作っていませんでした。
そのため nodenv install コマンド実行時に設定ファイルが存在しないとエラーで止まってしまい、 nodenv-yarn-install のトリガーが呼ばれず終わってしまっているということのようです。
初期設定を最後までやっていなかった自分が悪いです……
おまけ
nodenv-yarn-install プラグインの実態は
"$DEFINITION" nodenv-exec npm install yarn -g --silent
と npm パッケージとして yarn をインストールしているようなので、nodenv-default-packages に yarn を登録しておくことと同じかもしれません。
また yarn公式サイトのインストールガイド のページで、 npm でのインストールはあまりオススメしていないような雰囲気があります。
注意: npm から Yarn をインストールすることは一般的にはお勧めしません。 Node ベースのパッケージマネージャで Yarn をインストールする場合は、パッケージは署名されておらず、整合性のチェックはベーシックな SHA1 ハッシュのみで行われており、システム全体にまたがるアプリケーションをインストールする場合にはセキュリティリスクとなります。
これらの理由から、使用中の OS に最も適した方法で Yarn をインストールすることを強くお勧めします。
yarn からすると npm は競合ツールなので、これを理由に yarn への乗り換えをお勧めしているのかもしれませんが、公式サイトのインストール方法も確認して、納得したうえで使うのが良いと思います。