yarnがcommand not foundに…謎過ぎる解決 ※追記有り

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
`yarn` shim can't seem to find installed `yarn` · Issue #1051 · rbenv/rbenv
I've had this problem for a bit. It seems that rbenv can't seem to figure out where yarn is. I realize it's a js dependency so i'm not quite sur...

同じ事をしてる人がいた\(^o^)/

コメント

タイトルとURLをコピーしました