⬇️

ruby/debugのインストールに苦労した話

2023/10/28に公開

1. はじめに

現在、私はRubyの勉強をしているのですが、その中でruby/debugのインストールに苦労したので、その解決方法や何に詰まったか等を備忘録的に記録しておこうと思います。

ちなみに、私は備忘録(びぼうろく)のことを10年くらいは忘備録(ぼうびろく)と呼んでいました。

しかし、1年前くらいに知り合いと話したときにあれ?となって調べたら、「備忘録が正しく、忘備録は誤記だがそのまま使われている」ということがわかりました。こういうこと、よくありますよね。

2. ruby/debugについて

気を取り直して、ruby/debugとは、Rubyにおける有名なバグ発見ツールです。debug.gemと呼ばれることもあります。

bundlerでは、Gemfile内でgem 'debug'と記載するので、以後当記事内ではdebugと呼ぶことにします。

debugは、バージョンが1未満と1以上では別物らしく、バージョン1以上をインストールしなければなりません。ここは注意ポイントですね。

3. 原因と解決方法

初めに、私が詰まっていた原因と解決方法を述べておきます。

3.1. 原因

私はDockerでUbuntu環境を作り、その中でRubyをインストールしてプログラミングをしていました。

しかし、特にバージョンを気にすることなくapt install rubyと進めていたため、私の環境にはRuby (3.0.2) がインストールされていました。

このRuby (3.0.2) がインストールされた際に、一緒にいくつかのgemがインストールされるのですが、その中にdebug (0.1.0) がありました。ただ、こいつをバージョン1以上にすることが全然できませんでした。

3.2. 解決方法

debug単体ではどうにもなりませんでしたが、最終的にRuby (3.1.2) をインストールしたら、一緒にdebug (1.4.0) がインストールされて、解決したという流れです。

4. 試したこと一覧

4.1. エラーメッセージに素直に従う

私の環境では、Gemfileに1.0.0以上を指定し、bundle installを行うと、エラーを吐きました。

gem 'debug', '>= 1.0.0'

[Gemfile]

An error occurred while installing stringio (3.0.8), and Bundler cannot continue.

[bundle install した時のエラー文]

すると、stringioのインストール中にエラーが起きたと書いてありました。その中でruby-devかruby-develをインストールすればいいかもとあったので、apt installしてみました。

前者をインストールした結果、stringioだけでなく、io-consoleもインストールできないからダメとエラーが増える結果に。

後者については、そもそもインストールできませんでした。

An error occurred while installing stringio (3.0.8), and Bundler cannot continue.

An error occurred while installing io-console (0.6.0), and Bundler cannot continue.

[sudo apt install ruby-dev の後で bundle install した時のエラー文]

4.2. bundlerを介さずにインストール

sudo gem install debugとコマンドを打ちましたが、普通にエラーを吐きました。

ERROR: Failed to build gem native extension.

You might have to install separate package for the ruby development
environment, ruby-dev or ruby-devel for example.

[sudo gem install debug した時のエラー文]

4.3. bundler以外のgemをアンインストール

実は、bundlerをインストールする前に、gem installでkaminariというgemを試しにいれていました。こいつが干渉している可能性があるので、Dockerで新しいコンテナを作成してやりなおしましたが、エラーは変わりませんでした。

gem uninstallでも良かったのですが、コマンドへの理解が浅く、関連ファイルを全部削除できるかなどがわからなかったので、この時はUbuntu環境自体を作り直しました。しかし、エラー文は変わりませんでした。

4.4. エラーメッセージを直接ググる

エラーメッセージ自体でググりました。もちろん、4.1の段階でググってはいたのですが、より何件も記事を徘徊して回りました。ただ、全く前例が見つからず、成果は得られませんでした。

4.5. unminimizeを試す(Docker特有のコマンド)

過去にDockerでmanコマンドを使おうとしたら、unminimizeしろというメッセージがでたことがありました。その経験から、Dockerのコンテナに最小の構成要素しか入っていないせいでコマンドが機能しない例があるんだなという知見を得ていました。

ただ、今回のケースについては関係なさそうでした。

4.6. default gemを疑う

ここで、デフォルトでdebugが0.1.0でインストール済みであることに気づきました。なんなら、gem listで確認するとstringioもio-consoleもある。こいつらがすでにインストールされてるせいで、新たにインストールしたいバージョンと競合しているなら、こいつらをアンインストールすれば良いと考えました。

4.7. default gemのアンインストールを試す

default gemは通常ではアンインストールできないらしく、消す方法を試しましたが、諸悪の根源(!?)であるdebug (0.1.0), stringio (3.0.0), io-console (0.5.7) はアンインストールできませんでした。

(Ruby自体に使われている機能をgem化したものがdefault gemらしいので、それがアンインストールできてしまうと、Ruby自体が動かなくなる?みたいな記事を後から読みました。)

4.8 string-ioとio-consoleのバージョンアップを試す

以下のコマンドを試し、すべて実行できませんでした。

  • sudo gem install io-console -v “0.6.0”
  • sudo gem update io-console
  • sudo gem install stringio -v “3.0.8”
  • sudo gem update stringio

4.9. Rubyのバージョンアップを試す

ここでついに、Rubyのバージョンアップを試します。

[Ruby] Rubyのインストール(OSあれこれ)を参考に、インストールを進めたところ、Rubyは無事3.0.2→3.1.2とバージョンアップを果たし、gem listで確認するとdebug (1.4.0) という表記が見られ、動作確認もできました。長い道のりだった…

5. おまけ

おまけとして、Ruby (3.0.2) とRuby (3.1.2) のgem listを置いておきます。

abbrev (default: 0.1.0)
base64 (default: 0.1.0)
benchmark (default: 0.1.1)

~ (中略)

debug (default: 0.1.0)

~ (中略)

io-console (default: 0.5.7)

~ (中略)

stringio (default: 3.0.0)

~ (中略)

xmlrpc (0.3.2)
yaml (default: 0.1.1)
zlib (default: 1.1.0)

[Ruby (3.0.2) の gem list 一部抜粋]

abbrev (default: 0.1.0)
base64 (default: 0.1.1)
benchmark (default: 0.2.0)

~ (中略)

debug (1.4.0)

~ (中略)

io-console (0.6.0, default: 0.5.11)

~ (中略)

stringio (3.0.8, default: 3.0.1)

~ (中略)

weakref (default: 0.1.1)
yaml (default: 0.2.0)
zlib (default: 2.1.1)

[Ruby (3.1.2) の gem list 一部抜粋]

6. まとめ

エラーメッセージは、直接的な原因がこのあたりにあるだろうなというときに、その周辺でエラーを吐かれたときはめちゃくちゃ参考になりますよね。

逆にいうと、今回みたいなio-console?stringio?そんなところがエラーの原因じゃないだろ!みたいなときはだいたい原因ではないのですが、結局一つ一つ候補を潰していく作業が必要なのがつらいところです。

何はともあれ、無事debugが使えるようになって良かった!

7. 最後に

といった感じで、実はなぜRuby (3.0.2) のときにdebugのバージョンアップができなかったのか自体は謎のままですが、プログラミング学習から逸れすぎてもそれはそれで問題なので、今回はここで終わっておきます。

この記事が少しでもdebugのインストールで困っている方の助けとなれば幸いです。

参考記事

Discussion