Railsアプリを構築しようとするときにbuildエラーになるライブラリの代表にlibv8、mini_racerなどが上げられると思います。(個人的感覚)
毎回gemを最新化することでなんとなく解決していたのですが、これではその場凌ぎしかなく応用が効きません。 しっかり理解しておく必要があると思ったので、libv8周りのことを調べてみました。
そもそもv8とは
- GoogleのオープンソースハイパフォーマンスJavaScriptエンジンです
libv8とは
- v8ランタイムのソースとバイナリが格納されたgemです
- linux,os x, windowsプラットフォームにおける様々なCPUにサポートしています
- libv8のバージョンによってサポートされているCPUが異なるので、適切なバージョンを使用する必要があります
- そのためよくbuild時にエラーが起こりがち
therubyracerとは
- RubyでJavascriptを実行できるようにするgemです
- libv8に依存しており、libv8を使用してv8エンジンをインストールしています
- もともとはRails本体の依存ライブラリでしたが、2017年より開発がストップしてRails本体からも切り離されました
- そのため使用しているlibv8のバージョンもかなり古い
- Replace therubyracer with mini_racer by SamSaffron · Pull Request #29285 · rails/rails · GitHub
- 代わりに現在はmini_racerが使用されている
mini_racerとは
- RubyでJavascriptを実行できるようにするgemです
- 2017年にtherubyracerに代わってRails本体に組み込まれました
- 0.3.1まではlibv8を使用しており、0.4.0からlibv8-nodeを使用するように変更されました
- GitHub - rubyjs/libv8-node: Package libv8 from Node
- 2022/01/05 現在まだリリースタグが打たれていないかつ、build失敗のissueも上がっているので不安要素がある
- 元に筆者のci環境(docker)ではbuildエラーになってしまう
execjs
- RubyでJavascriptを実行できるようにするgemです
- Javascriptを実行するために最適なランタイムを自動で選択します(下記ランタイムをから選択される)
- therubyrhino
- Duktape.rb
- Node.js
- Apple JavaScriptCore
- Microsoft Windows Script Host
- Google V8
- mini_racer
- 大抵の環境にはNode.jsがインストールされていると思うので、それが選択されると思います
- そのためmini_racerのlibv8、libv8-nodeあたりのbuildエラーから開放される