行動すれば次の現実

ほどよくモダンなシステム開発を目指しています。メインテーマは生産性、Ruby、Javascriptです。

Railsでよくbuildエラーになるlibv8、therubyracer、mini_racerあたりをまとめてみた

Railsアプリを構築しようとするときにbuildエラーになるライブラリの代表にlibv8、mini_racerなどが上げられると思います。(個人的感覚)

毎回gemを最新化することでなんとなく解決していたのですが、これではその場凌ぎしかなく応用が効きません。 しっかり理解しておく必要があると思ったので、libv8周りのことを調べてみました。

そもそもv8とは

  • GoogleのオープンソースハイパフォーマンスJavaScriptエンジンです

v8.dev

libv8とは

  • v8ランタイムのソースとバイナリが格納されたgemです
  • linux,os x, windowsプラットフォームにおける様々なCPUにサポートしています
  • libv8のバージョンによってサポートされているCPUが異なるので、適切なバージョンを使用する必要があります
    • そのためよくbuild時にエラーが起こりがち

github.com

therubyracerとは

  • RubyでJavascriptを実行できるようにするgemです
  • libv8に依存しており、libv8を使用してv8エンジンをインストールしています
  • もともとはRails本体の依存ライブラリでしたが、2017年より開発がストップしてRails本体からも切り離されました

github.com

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エラーになってしまう

github.com

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エラーから開放される

github.com