rubyのパッケージ管理に便利なgemですが、
gem install でエラーに遭遇したので、
その対処方法をまとめておきます。
症状
sudo gem install [パッケージ名]
を実行時に
ERROR: Failed to build gem native extension. /usr/bin/ruby2.2 -r ./siteconf20190523-29430-1q1obmu.rb extconf.rb mkmf.rb can't find header files for ruby at /usr/lib/ruby/include/ruby.h
というエラーが表示されて、
パッケージのインストールが中断される。
対処策
header files がないと言われているので、
次のコマンドでruby-devをインストールします。
sudo apt install ruby2.2-dev
このとき、ruby2.2のバージョン部分は、
エラーメッセージの/usr/bin/ruby2.2のバージョンに合わせておきます。
このバージョン指定を省くと引き続き同様のエラーに遭遇することがあります。
詳しくは、この解決方法に到るまでの試行錯誤と一緒に後述します。
試行錯誤
ruby-dev のインストール
同様のエラーを検索するとよくある解決方法として、
sudo apt install ruby-dev
を実行するというものがあります。
ruby-devはrubyの拡張モジュールを、
インストールするためのheader filesです。
なので、これをインストールすればエラー解決!
と思いきや、やはり、gem install で同じくcan't find header files
となります。
rubyとruby-devのバージョンを確認
インストールしたパッケージの一覧を表示して、
ruby-devのバージョンを確認して見ます。
dpkg -l | grep ruby
を実行して見ると、
ii ruby1.9.1-dev 1.9.3.484-2ubuntu1.14 amd64 Header files for compiling extension modules for the Ruby 1.9.1
なるほど、1.9.1のruby-devがインストールされたようです。
一方で、エラーメッセージに表示されているのは、
ruby2.2のheader filesが見つからないということですから、
上記の対応策のように明示的にバージョンを指定する必要があったようです。
まとめ
複数のバージョンが同時にインストールされうるようなものは、
ちゃんとバージョンを見ておく必要があるというのが、
今回の教訓でしょうか。