ryufutaの学習ブログ

微経験からプログラマを目指して学んだことを中心に書いていきます

ruby-lspのバグが原因で作られた~/.gemによってrails newが失敗する

はじめに

記事の内容はタイトルの通り。
この記事で取り上げるrails newのエラーはruby-lspのバグが原因だったのですが、このバグは既に修正されているため今後発生することはないかと思います。

実行環境

発生した問題

rails newを実行すると以下のエラーで失敗。

$ rails new
(省略)
bin/rails aborted!
LoadError: dlopen(/Users/user/.gem/ruby/3.2.0/gems/debug-1.9.2/lib/debug/debug.bundle, 0x0009): Library not loaded: /Users/user/.rbenv/versions/3.2.2/lib/libruby.3.2.dylib (LoadError)
  Referenced from: <6E739541-8BEB-32C0-8E12-6E3D21ED55B6> /Users/user/.gem/ruby/3.2.0/gems/debug-1.9.2/lib/debug/debug.bundle
  Reason: tried: '/Users/user/.rbenv/versions/3.2.2/lib/libruby.3.2.dylib' (no such file), '/System/Volumes/Preboot/Cryptexes/OS/Users/user/.rbenv/versions/3.2.2/lib/libruby.3.2.dylib' (no such file), '/Users/user/.rbenv/versions/3.2.2/lib/libruby.3.2.dylib' (no such file) - /Users/user/.gem/ruby/3.2.0/gems/debug-1.9.2/lib/debug/debug.bundle
<internal:/Users/user/.rbenv/versions/3.2.3/lib/ruby/3.2.0/rubygems/core_ext/kernel_require.rb>:38:in `require'
<internal:/Users/user/.rbenv/versions/3.2.3/lib/ruby/3.2.0/rubygems/core_ext/kernel_require.rb>:38:in `require'
/Users/user/.gem/ruby/3.2.0/gems/debug-1.9.2/lib/debug/frame_info.rb:16:in `rescue in <module:DEBUGGER__>'
/Users/user/.gem/ruby/3.2.0/gems/debug-1.9.2/lib/debug/frame_info.rb:13:in `<module:DEBUGGER__>'
/Users/user/.gem/ruby/3.2.0/gems/debug-1.9.2/lib/debug/frame_info.rb:three:in `<main>'
/Users/user/.gem/ruby/3.2.0/gems/debug-1.9.2/lib/debug/session.rb:31:in `require_relative'
/Users/user/.gem/ruby/3.2.0/gems/debug-1.9.2/lib/debug/session.rb:31:in `<main>'
/Users/user/.gem/ruby/3.2.0/gems/debug-1.9.2/lib/debug.rb:six:in `require_relative'
/Users/user/.gem/ruby/3.2.0/gems/debug-1.9.2/lib/debug.rb:six:in `<main>'
(省略)

エラーを見ると

  1. ~/.gem/ruby/3.2.0にgemを探しに行く
  2. 削除済みの~/.rbenv/versions/3.2.2に動的ライブラリを探しに行く
  3. no such fileで失敗

となっています。

解決方法

$ rm -r ~/.gem/ruby/3.2.0

で問題の発端となっているディレクトリを削除して解決。

※追記
エラー自体はこれで解決しますが、「根本原因」に記載しているように先にruby-lspをv0.5.20以上にしておく方が良いかもしれません。

根本原因

問題の~/.gem/ruby/3.2.0ruby-lsp v0.5.19のバグが原因で作成されたディレクトリでした。
修正版は2024/4/25にv0.5.20としてリリースされています。 https://github.com/Shopify/ruby-lsp/releases/tag/vscode-ruby-lsp-v0.5.20

問題のディレクトリは削除しても、VS Codeを起動すると自動的に再作成されていたのですが、ruby-lspを再インストールして最新版にした後、再度削除したところ、作成されなくなりました。
また、ruby-lsp再インストール前の時点で~/.gem/ruby/3.2.0/gemsにあったgemは全て~/.rbenv/versions/3.2.3/lib/ruby/gems/3.2.0/gemsに移っています。

よって上記のrails newのエラーは今後発生することはないと考えられます。

gemのインストール先についての補足

gemのデフォルトのインストール先は

$ gem env home

で確認できます。
rbenvを使用している場合は~/.rbenv/versions/version/lib/ruby/gems/...のように表示されます。
(私の環境では~/.rbenv/versions/3.2.3/lib/ruby/gems/3.2.0

一方で、

$ gem install GEMNAME --user-install

とするとユーザーごとにgemがインストールされます。
このときのインストール先は

$ gem env user_gemhome

で確認できます。
(私の環境では~/.gem/ruby/3.2.0

ですので、--user-installを指定してインストールしたことがある方はruby-lspのバグとは関係なく今回問題になっていたディレクトリが作成されていると思います。

参考
Command Reference - RubyGems Guides
rbenv/rbenv: Manage your app's Ruby environment

おわりに

エラーの根本原因の特定にあたってフィヨルドブートキャンプのメンターであるid:JunichiItoさんにお世話になりました。
ありがとうございます🙏

自己紹介

はじめに

初めましてryufutaと申します。
今月末に退職することになって気持ち的にも時間的にも余裕ができたので、前々からやらなければと思っていたブログを始めました。
昨年9月からフィヨルドブートキャンプ(以下、FBC)というプログラミングスクールで学習しています。
そこでの学びや気持ちを中心にブログを書いていこうと思います。

初めてのブログなので自己紹介として現職のこと、FBCに入会したきっかけ、次を決めずに退職に至ったことなどを書こうと思ったのですが...
今の私の立場では書きにくいことが多いので書ける範囲で書いてみます。

経歴

生命科学系大学院博士課程中退

SIerにてAI案件中心にITコンサルタントっぽい仕事

5月末退職(プログラマ目指して学習に専念)

現職について

  • 大学院時代にバイオインフォマティクスに触れたことでITに興味を持った
  • 当時ブームになっていたディープラーニングに興味を持った
  • 数学が好き(ITやAIの仕事に数学が必須でないことは一応わかっていました)
  • 大学での基礎研究より直接社会に役立つ仕事をしたくなった

という理由で未経験から今の会社に就職しました。
バリバリコードを書けて、あわよくばAI関連の仕事もできるようなプログラマを夢見ていたのですが、現実は違いました😭
現職を「ITコンサルタント」ではなく「ITコンサルタントっぽい仕事」と記載しているように、完全にキャリア迷子になりました。
そもそも所属部署が迷子なので社員が迷子になるのは当然なのですが...
(もちろん、私自身の力不足もあり不甲斐なさを感じています)

FBC入会のきっかけ

入社以来、コードをほぼ書いていないのでプログラマとして転職したくてもスキルも経験も足りず、長いこと悶々とした日々を過ごしていました。
ITコンサルタントや技術のわかる営業として転職しようと考えたこともあったのですが、やはりプログラマになりたいと思い、スキルアップのため「経験者向けプログラミングスクール」で検索したところFBCを見つけました。
入会の決め手は

  • コードレビューしてもらえる(それも著名なプログラマの方に‼️)
  • チーム開発を経験できる

の2点。
私のような微経験者が経験者に近づくために重要かつ独学では無理な要素だと思います。

退職理由

FBC卒業後に現職を辞める予定でしたが、30代半ばと年齢的に余裕がなく、自分の人生をこれ以上無駄にしたくないという思いを抑えきれなくなったため、次を決めずに退職することにしました。

おわりに

今のところ、FBCに入会したこと、次を決めずに退職したことは非常に良かったと思っています。
本当のところ何がどう良かったかは転職できてから具体化していくことなので、詳しいことは転職できてから書こうと思います。
その時には、私と同じようにSIerにいてキャリアに不安を感じながらも抜け出せずにいる人にとって参考になる記事を書ける姿になっていたいな〜
頑張ります💪