これはなに
Rails で開発されているプロダクトで libv8 が使われており違いや浅く歴史について調べたので簡単にまとめました
TL;DR
- therubyracer と libv8 と libv8-node すべて JavaScript Engine V8 を実行バイナリである
- 最初は therubyracer が開発されていたが、 実行環境の差分追従などが困難になり libv8 の開発を開始、その後再び困難になったことから libv8-node の開発が行われている
-
therubyracer, libv8, libv8-node の何れかの利用が求められたら、現在は
libv8-node
を使うことが望ましい
therubyracer について
therubyracer は JavaScript Engine V8 実行を行う binary を提供している Gem です
2018 年を最後に更新されておらず、 未対応の Platform 対応を希望する Issue も何度か作成されていますが、
後述する libv8 や libv8-node に更新することを推奨されています
therubyracer には過去苦しめられた思い出も沢山ありますが今回は割愛するとともに、
therubyracer については以下記事やタグを参照してみてください
libv8 について
libv8 は therubyracer 同様に JavaScript Engine V8 実行を行う binary を提供している Gem です
README にも記載されているとおり、 libv8 は therubyracer で V8 Engine の upgrade 追従が困難になったタイミングでスピンオフされたものです
libv8 は mini_racer 等多くの Gem に利用されています
About
This project spun off of therubyracer which depends on having a specific version of V8 to compile and run against. However, actually delivering that version reliably to all the different platforms proved to be a challenge to say the least.
We got tired of waiting 5 minutes for V8 to compile every time we installed that gem.
Node.js の v14 系までの実行は libv8 を利用することが多かった印象です
こちらも 2020 年を最後に更新されておらず、 未対応の Platform 対応を希望する Issue も何度か作成されていますが、
後述する libv8-node に更新することを推奨されています
libv8-node について
libv8-node は libv8 や therubyracer 同様に JavaScript Engine V8 実行を行う binary を提供している Gem です
README にも記載されているとおり、 libv8-node は libv8 の時と同様に V8 Engine の upgrade 追従が困難になったタイミングでスピンオフされたものです
About
This project spun off of libv8, which itself spun off of therubyracer which depends on having a specific version of V8 to compile and run against. However, actually delivering that version reliably to all the different platforms proved to be a challenge to say the least.
Node.js の v16 系と同等の実行環境を求められる場合は libv8-node を利用しましょう
現在サポートしている Platform も x86_64 系の CPU arch だけでなく arm 系も対応されています
結局何を使えば良いか
- libv8-node を使いましょう
- libv8 や therubyracer を使っている場合は頑張って upgraede しましょう
Reference