Rubyが好きなプログラマーの日記。日々の生活、開発に関するメモとか考えとか。
久しぶりに少し前のRailsアプリを触ることになって、bundle install
したところ、よくつまづく代表格であるlibv8
のインストールで失敗した。
環境は、
である。ここで関係してくるのは、macOSであることとlibv8のバージョンのみ。
調べてみると、いくつかQiitaの投稿やブログを見つけ、それらの手順はこんな感じ。
$ brew uninstall v8
$ brew tap homebrew/versions
$ brew install v8-315
$ bundle config --local build.libv8 --with-system-v8
$ bundle config --local therubyracer --with-v8-dir=/usr/local/opt/v8@3.1.5
$ bundle install
つまり、インストール済みの最新のv8をアンインストールして、古いバージョンをインストールすると、libv8とtherubyracerをインストールできるということだ。
いままで自分が見つけた解決法に関する記事の中から、上の方法でなぜ解決できるのかを書いているものを見つけられなかったので、調べてみた。
で、タイトルにあるように、バージョンの問題ということがわかった。 そして、そんなに深く調べるとか必要なく、libv8のREADMEにちゃんと書いてあった。
Versions of the libv8 gem track the version of V8 itself, adding its own point release after the main V8 version. So libv8
5.0.71.35.5
and5.0.71.35.14
both correspond to V8 version5.0.71.35
. Another way to think about it would be that5.0.71.35.14
is the 14th release of the libv8 rubygem based on V8 version5.0.71.35
つまり、libv8のバージョンは対応しているv8のバージョンと同じということ。 で、それが違う組み合わせになると、動作するかどうかは互換性が維持されてるかどうかになっていて、メジャーバージョンが違ってたりするとそれが顕著に出るということ。実際に、それまでインストールしてたv8のバージョンを調べてみると、
$ brew info v8
v8: stable 5.1.281.47 (bottled)
Google's JavaScript engine
https://github.com/v8/v8/wiki
Not installed
From: https://github.com/Homebrew/homebrew-core/blob/master/Formula/v8.rb
==> Dependencies
Optional: readline ✔
==> Requirements
Build: python ✔, git ✔
Required: macOS >= 10.7 ✔
==> Options
--with-readline
Use readline instead of libedit
ということで、やはり違うバージョンだったのでエラーが起きていたことがわかった。
もし今後、v8のインストールで失敗した時は、バージョンを確認することでサクッと解決できるかもしれないので、チェックしてみましょう。