rails5.1でyarnを使ってnpmの管理をしようと色々やっていたら、何かyarnがcommand not foundと言われるように…。
not foundの理由
調査してみると、どうもrbenvのrehashで~/.rbenv/shims配下にyarnと言う名前でファイルが作られて、PATHの優先度が高いために、brewでインストールしたyarnよりも先に実行されてnot foundになっている事が分かった。
原因と対策
正直なところ、正確な発生原因は不明…。
何となく心当たりがあるのは、railsプロジェクトでbundle execを省くために
bundle install --binstubs=bundle_bin
を実行した後からおかしくなった気がしている。
とりあえず、このままだと.bashrcにrbenv rehashを書いているので、ログインする度にyarnがnot foundになってしまう。
なので、趣味グラマとして調査してみた。
まずはrbenv-rehashのスクリプトを眺めてみると、最後の方でhookしているスクリプト(rbenv-binstubs.bash)が有り、どうやらその中でyarnも作成対象になっているっぽい。
rbenv-binstubs.bashは、~/.rbenv/bundlesからbundleを使っているプロジェクトを引っ張ってきて、その中のbinに入っている物も~/.rbenv/shimsに置く対象として追加しているようだった。
確かにいくつかのプロジェクトのbin配下にyarnが有った。
対応策…?
とりあえず、該当するプロジェクトのbin配下から違うディレクトリにyarnをmvして、rbenv rehashを実行してみたところ、~/.rbenv/shimsにはyarnが作られなくなり、not foundにもならなくなった。
まとめ…?
これで終われば、何かすっきりしないまでも、まぁ良いかで終われたんだけど…。何を思ったか、試しにmvしたyarnを再度bin配下に戻してrbenv rehashをやってみたところ、~/.rbenv/shimsにyarnが作られない…。
作られないのは良いんだけど、何で作られなくなったのかが意味不明過ぎる。
発生から解決まで不明点が多過ぎるんだけど、これ以上踏み込むと帰って来れなくなりそうなので、この辺で終わりにしておこう。
とりあえず解決して良かった。
追記(2019/07/16)
Macbook Proをクリーンインストールして、ReactNativeのアプリを触っていたら、またこの現象になった。
直近でRailsのプロジェクトをDocker化して遊んでたので、またRailsのbin配下が悪さしていると判断。
Railsはしばらく使う予定が無いので、rbenv-binstubsをuninstallする事でこの現象を回避。
brew uninstall rbenv-binstubs
同じ事をしてる人がいた\(^o^)/
コメント