◆ Windows Sandbox は起動やインストールが手間だし Home Edition で使えない
◆ Node.js は V8 バージョンがそこまで新しくなかった
◆ V8 を直接使う
◆ パッケージはなさそうなので自分でビルド (追記:→ jsvu で簡単インストールできた)
◆ 面倒だし要求スペック高いし時間がかかるので気軽にやるものではない

いつもは Sandbox に Chrome をインストール

Chrome に追加される新機能の動きを実際に確認したいときは beta や dev や canary を入れます
でも 普段遣いするわけではないですし ブラウザは重たいですし 直接インストールしたくないです
なので いつもは Windows Sandbox の中に Chrome をインストールして動作を確認しています

ですが Windows Sandbox って Pro エディションが必要です
Home エディションの端末を使ってるときもあります
ググると Home エディションでも Sandbox を有効化するみたいなのは見かけますけど なんか怪しさを感じますし そもそもできたとしてもそれライセンス的に大丈夫なの?という不安もあります

それに Windows Sandbox を使う場合でも Windows Sandbox の起動の遅さとメモリ使用量の多さと毎回 Chrome のインストールで時間がかかるという不満点もあります
HTML や CSS 機能ならともかく JavaScript のプログラム的な機能だけなら CLI で済ませたいです

Node.js は

となれば Node.js です
LTS ではない本当の最新バージョンならできるかもと思いました
Chrome のどのバージョン相当かを確認するため V8 バージョンを確認します

user@LAPTOP04:/$ node -v
v20.5.0
user@LAPTOP04:/$ node -p "process.versions.v8"
11.3.244.8-node.10

11.3 なので Chrome 113 相当です
少し古いですね

リリースページを見てみましたが 最新版でもこのバージョンでした
https://nodejs.org/en/download/releases

Node.js だと Chrome よりも V8 バージョンは古いようです
期待外れです

V8 を直接使う

Node.js を使えないとなると V8 エンジンを直接使うしかなさそうです
とはいえ V8 を直接インストールなんてしたことがないです
過去にやったことあるのは PHP とか C# に組み込むための特殊なものでしたし 外部プログラムから使う用途であってスタンドアローンで実行する用ではないです
そもそもパッケージとして配布されているのでしょうか?

パッケージ

探してみましたが Ubuntu22.04 と AlmaLinux9 (EPEL 含む) では見つかりませんでした
fedora だと一応あったものの v8-314 という名前です(314 って何?)
バージョンにしては現在の 11.8 とは違いすぎです

試しに入れてみました
たしかに JavaScript が動くので V8 ではあるようなのですが かなり古いのかアロー関数すら構文エラーでした

[root@9450518efdd7 /]# d8-314
V8 version 3.14.5.10 [console: readline]
d8> 1+1
2
d8> const a = 1
d8> a
1
d8> [1].map(x => x + 1)
(d8):1: SyntaxError: Unexpected token >
[1].map(x => x + 1)
^
SyntaxError: Unexpected token >

d8> [1].map(function(x) { return x + 1 })
2

配列の map メソッドはあるので ES5 は対応してそうですが ES2015 は対応してないみたいです
バージョンも 3.14 と書かれてます

なぜこんなのが残ってるの?とググってみるとこんなページがありました
https://src.fedoraproject.org/rpms/v8

V8 は、ECMA-262、第 3 版で指定されている ECMAScript を実装します。これはバージョン 3.14 で、Google によるメンテナンスは行われなくなりましたが、他の多くのソフトウェアで採用されました。

他のパッケージの依存関係で使うから残ってるということでしょうか?
それだと AlmaLinux など RHEL 系全部にありそうですが fedora だけです
一応 「dnf repoquery --whatrequires」 で調べてみましたが v8-314-devel しか出てきませんでした

よくわかりませんが なんにせよパッケージマネージャーから最新版の V8 はインストールはできなさそうです
nodesource みたいなリポジトリも見当たらないですし

ビルドする

パッケージから入れるのは無理そうなので 諦めて自分でビルドすることにします
公式サイトの手順どおりに行います
https://v8.dev/docs/build

OS は Ubuntu22.04 を使います

最初は AlmaLinux9 で試したのですが途中でエラーが出て lsb-release が入ってないと言われました
RHEL 系だと redhat-lsb-core というパッケージらしいのですが インストールしようとすると見つかりません
ググるとこういうページがありました
https://forums.centos.org/viewtopic.php?t=78779

RHEL の 8 系を最後に廃止されていて 9 系ではリリースされてないみたいです
代わりの方法に関することも書かれていたりしますが V8 が要求する以上 どうしようもないので AlmaLinux9 はやめて Ubuntu にしました

Docker イメージの Ubuntu:22.04 を使う場合 必須コマンドがいくつか入っていないので次のパッケージは最初に apt で入れておいたほうが良いです

git, curl, python3, xz-utils, lsb-release, sudo, file

入ってないと途中でエラーになって面倒が増えます

リポジトリの clone は depot_tools というのを使う必要があるようです
まずはこれをインストールします
インストール場所は /opt にしてます

cd /opt
git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git
export PATH=/opt/depot_tools:$PATH

パスを通すと fetch や gclient コマンドが使えるようになります

gclient コマンドを実行すると gclient 自身をアップデートするらしいです

gclient

clone したばかりなら最新だと思うので必要なのかは不明です
手順にあるのでとりあえずやっておきます

手順に従って v8 フォルダを作ってそこで fetch を行います
v8 フォルダが二重になるので mkdir はしなくてもいいと思います

mkdir v8
cd v8
fetch v8
cd v8

fetch は単純な git の clone だけでなく サブパッケージのダウンロードやフックの実行など追加で色々なセットアップもしてくれるようです
結構時間がかかりました
直接 git clone するとこれらが行われず次が動かないので fetch コマンドで実行する必要があります

次の手順は V8 のソースコードを最新にするためのものです

git fetch
gclient sync

git pull はブランチにいる必要があるので ブランチを作ったり移動したりしてないなら git fetch です
gclient sync では fetch コマンドで clone の後にやってくれていたセットアップをやってくれるようです
ソースコードに差分があった場合にそれの分の更新みたいです
これらも fetch コマンド直後だと不要そうな気がしますがとりあえずやっておきます

次は依存関係のインストールです

./build/install-build-deps.sh

OS のパッケージマネージャで色々なパッケージがインストールされます
700 以上あって ここでも待たされます

最後にビルド操作です

./tools/dev/gm.py x64.release

とても時間がかかります
正確に測っていませんが 30 分はかかった気がします
また メモリを多く使用します
WSL の Docker コンテナでビルドをしていたのですが 1 回目はメモリ不足で落ちました
メモリ 8GB の Windows 環境だったので WSL の最大メモリ割り当て量は 4GB です
さらにスワップが 1GB です
5GB だと足りないみたいです
メモリ 6GB + スワップ 12GB にして再挑戦すると無事ビルドできました
free コマンドを何度か実行して確認していましたが スワップは使ってるときでも 1GB ちょっとくらいでした
8GB あれば足りそうです

ちなみに WSL のメモリの設定は C:\Users\username\.wslconfig のようにユーザーフォルダの直下に .wslconfig ファイルを作ります
中身は

[wsl2]
memory=6GB
swap=12GB

みたいな感じで書きます

ビルドが終わったら成果物は out/x64.release フォルダにあります
d8 コマンドが REPL になっています
d8 コマンドの説明はここ

root@2cacf0a17ec0:/opt/v8/v8/out/x64.release# ./d8
V8 version 11.8.0 (candidate)
d8> 1+1
2
d8> [1, 2].with(0, 10)
[10, 2]

引数にファイルを渡せばファイルの実行もできます

[tes.js]
function* gen() {
let i = 0
while (true) {
yield i++
}
}

console.log(
gen().map(x => x * 3).filter(x => x % 2).drop(1).take(3).toArray()
)

root@2cacf0a17ec0:/opt/v8/v8/out/x64.release# ./d8 tes.js
9,15,21

最新の V8 なので まだ Chrome でも動かない Iterator helpers の機能が動いてます

不便な点で console.log で出力できるものの Node.js ほどリッチなものではなく 単純に文字列化されるようです
配列だと join(",") が行われて 「,」 区切りになって [] は表示されません

面倒すぎた

これで Chrome も Node.js もインストールせず最新の JavaScript 機能を試せたわけですが 手順が面倒すぎです
特にビルドは時間がかかりすぎでした
メモリが足りないので 他の起動中ソフトを全部落としたりもしましたし

これなら Windows Sandbox に毎回 Chrome をインストールしたほうがいいと思います
試すときにブラウザのコンソールを使えるというメリットもありますし

これは Windows Sandbox が使えず Chrome の dev バージョンなどを直接インストールしたくないときの最後の手段ですね

追記: jsvu

そういえば Playwright 的なもので E2E じゃなく JavaScript のエンジンを対象にテストするためのツールがありました
V8 もあったはずですし もしかしてこれなら最新の V8 エンジンを簡単に入れられる?と思って試してみました

npx jsvu

環境やインストールするエンジンを選ぶ画面になるので 使っている OS と V8 を選びます
他エンジンもデフォルトでチェックされていますが 不要なので除外します

📦 jsvu v2.1.0 — the JavaScript engine Version Updater 📦
? What is your operating system? Linux 64-bit
? Which JavaScript engines would you like to install? V8
✔ Found latest V8 version: v11.8.28.
✔ URL: https://storage.googleapis.com/chromium-v8/official/canary/v8-linux64-rel-11.8.28.zip
✔ Download completed.
❯ Extracting…
Installing library to ~/.jsvu/engines/v8/icudtl.dat…
Installing library to ~/.jsvu/engines/v8/snapshot_blob.bin…
Installing binary to ~/.jsvu/engines/v8/v8…
Installing wrapper script to ~/.jsvu/bin/v8…
✔ Extraction completed.
✔ Testing completed.
✔ V8 v11.8.28 has been installed! 🎉

インストールできたみたいです
しかも 11.8 と最新です

~/.jsvu/bin/v8 に実行ファイルがあります

[root@9151f6b3f7ed opt]# ~/.jsvu/bin/v8
V8 version 11.8.28
d8>

d8 が起動しました
これで良さそうですね

最初にこれに気づいていれば半日ほどの苦労がいらなかったのに

直接ダウンロード

ダウンロードしている URL は以下でした
https://storage.googleapis.com/chromium-v8/official/canary/v8-linux64-rel-11.8.28.zip

親フォルダにアクセスしたら一覧が見れるかなと思ったのですが エラー画面でした
https://storage.googleapis.com/chromium-v8/ までにすると一覧画面になりましたが S3 の XML 形式です
それなら prefix で絞り込めそうなので 試してみます
https://storage.googleapis.com/chromium-v8/?prefix=official/canary/v8-linux64-rel

絞り込めてはいますが canary で 64 bit Linux でリリースビルドとまで絞り込んでも 上限の 1000 件を超えています
多すぎで一覧から選んでダウンロードは向いてなさそうなので jsvu を使ったほうが良さそうですね

ところで Google なのに GCP じゃなくて AWS の S3 を使ってるのが意外でした