gem install時の"can't find header files"エラーの解決

# はじめに
EC2インスタンス上のマシンでbundle install実行時に`can't find header files`エラー。解決した方法をメモとして残す。

# 環境
- EC2インスタンス
    - ubuntu 18.04LTS
- ruby 2.5.1

# bundle install時のエラー

```
$ bundle install --path .bundle
[DEPRECATED] The `--path` flag is deprecated because it relies on being remembered across bundler inv
ocations, which bundler will no longer do in future versions. Instead please use `bundle config set p
ath '.bundle'`, and stop using this flag
Fetching gem metadata from https://rubygems.org/.......
Using bundler 2.1.4
Using multipart-post 2.1.1
Using ruby2_keywords 0.0.2
Using faraday 1.1.0
Using faraday_middleware 1.0.0
Using gli 2.19.2
Using hashie 4.1.0
Using websocket-extensions 0.1.5
Fetching websocket-driver 0.7.3
Installing websocket-driver 0.7.3 with native extensions
Gem::Ext::BuildError: ERROR: Failed to build gem native extension.

current directory:
/home/ubuntu/slack_bots/.bundle/ruby/2.5.0/gems/websocket-driver-0.7.3/ext/websocket-driver
/usr/bin/ruby2.5 -r ./siteconf20201215-14622-s23dju.rb extconf.rb
mkmf.rb can't find header files for ruby at /usr/lib/ruby/include/ruby.h

extconf failed, exit code 1

Gem files will remain installed in
/home/ubuntu/slack_bots/.bundle/ruby/2.5.0/gems/websocket-driver-0.7.3 for inspection.
Results logged to
/home/ubuntu/slack_bots/.bundle/ruby/2.5.0/extensions/x86_64-linux/2.5.0/websocket-driver-0.7.3/gem_make.out

An error occurred while installing websocket-driver (0.7.3), and Bundler cannot continue.
Make sure that `gem install websocket-driver -v '0.7.3' --source 'https://rubygems.org/'` succeeds
before bundling.

In Gemfile:
  slack-ruby-client was resolved to 0.15.1, which depends on
    websocket-driver

```
`websocket-driver (0.7.3)`というgemをインストール時にエラーになった模様。
メッセージに表示されているように`gem install websocket-driver -v '0.7.3' --source 'https://rubygems.org/'`を単体で実行してみたところ、今度は以下のようなエラーが発生。

```
$ sudo gem install websocket-driver -v '0.7.3' --source 'https://rubygems.org/'
Building native extensions. This could take a while...
ERROR:  Error installing websocket-driver:
	ERROR: Failed to build gem native extension.

    current directory: /var/lib/gems/2.5.0/gems/websocket-driver-0.7.3/ext/websocket-driver
/usr/bin/ruby2.5 -r ./siteconf20201215-14722-9uc5to.rb extconf.rb
mkmf.rb can't find header files for ruby at /usr/lib/ruby/include/ruby.h

extconf failed, exit code 1

Gem files will remain installed in /var/lib/gems/2.5.0/gems/websocket-driver-0.7.3 for inspection.
Results logged to /var/lib/gems/2.5.0/extensions/x86_64-linux/2.5.0/websocket-driver-0.7.3/gem_make.out
```
メッセージ`mkmf.rb can't find header files for ruby at /usr/lib/ruby/include/ruby.h`にあるようにruby用のヘッダファイルが見つからないのが原因のよう。
自分では解決策がわからなかったので素直にエラーメッセージでぐぐったら、同じような問題に遭遇している方がいらっしゃったので参考にさせてもらった。

- [gem install で "can't find header files" になる場合](https://clean-copy-of-onenote.hatenablog.com/entry/gem_install_error)

# 解決方法
自身の使っているrubyのバージョンに合わせた`ruby-dev`をインストールすることで解決。
今回は`ruby2.5`だったので`ruby2.5-dev`をインストール。

```
$ sudo apt install ruby2.5-dev
```

その後`bundle install`を実行するとできた。

```
$ bundle install --path .bundle
[DEPRECATED] The `--path` flag is deprecated because it relies on being remembered across bundler invocations, which bundler will no longer do in future versions. Instead please use `bundle config set path '.bundle'`, and stop using this flag
Fetching gem metadata from https://rubygems.org/.......
Using bundler 2.1.4
Using multipart-post 2.1.1
Using ruby2_keywords 0.0.2
Using faraday 1.1.0
Using faraday_middleware 1.0.0
Using gli 2.19.2
Using hashie 4.1.0
Using websocket-extensions 0.1.5
Fetching websocket-driver 0.7.3
Installing websocket-driver 0.7.3 with native extensions
Fetching slack-ruby-client 0.15.1
Installing slack-ruby-client 0.15.1
Bundle complete! 1 Gemfile dependency, 10 gems now installed.
Bundled gems are installed into `./.bundle`
```

# おわりに
gemのインストール時に表示される`with native extensions`っていうのは、そのgemがc言語のライブラリに依存していて別途コンパイルが必要だということ。今回は`websocket-driver`をコンパイルするためのライブラリがマシンにインストールされていなかった。

- [bundle installした時のwith native extensionsってなんだ？](https://kossy-web-engineer.hatenablog.com/entry/2019/01/23/202225)