Satoryu's Diary

Rubyが好きなプログラマーの日記。日々の生活、開発に関するメモとか考えとか。


2017年09月23日

_ libv8 のバージョンについて知る。

久しぶりに少し前のRailsアプリを触ることになって、bundle installしたところ、よくつまづく代表格であるlibv8 のインストールで失敗した。

環境は、

  • macOS 10.12.6
  • Rails 4.2.8
  • Ruby 2.2.2
  • libv8 3.16.14.3

である。ここで関係してくるのは、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 and 5.0.71.35.14 both correspond to V8 version 5.0.71.35. Another way to think about it would be that 5.0.71.35.14 is the 14th release of the libv8 rubygem based on V8 version 5.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のインストールで失敗した時は、バージョンを確認することでサクッと解決できるかもしれないので、チェックしてみましょう。


最近の投稿

翻訳しました(ちょっとだけ)

follow us in feedly