Chrome V8とは?

Chrome V8は、JavaScriptコードを実行します。Node.jsは、Chrome V8上に構築されていて、サーバーレスJavaScriptの関数を実行するために広く使用されている実行環境です。しかし、関数を直接V8上で実行することにはメリットがあります。

学習目的

この記事を読み終えると、以下のことができるようになります。

  • JavaScriptエンジンを定義する
  • Chrome V8とNode.jsについて理解する
  • Chrome V8がサーバーレスアーキテクチャで果たす役割を理解する

記事のリンクをコピーする

Chrome V8とは?

Chrome V8はJavaScriptエンジンですのでJavaScriptコードを実行します。JavaScriptはもともとはWebブラウザーによって実行されるように書かれました。Chrome V8(または単にV8)は、ブラウザー内またはブラウザ外でJavaScriptコードが実行できるので、 サーバー側のスクリプティングが可能になります。

車のV8(V型8気筒)エンジンと同様に、Chrome V8は高速で強力なエンジンです。V8はJavaScriptコードをマシンコード*に直接変換するので、コンピューターはコードを実際に理解できて、翻訳済みのコードまたはコンパイル済みのコードを実行します。V8はJavaScriptの実行も最適化します。

*マシンコードとは、CPUが理解できる言語のことです。純粋にデジタルであり、数字の羅列です。

コンパイルとはどういう意味か?

コンパイルとは、コードをあるプログラミング言語から別のプログラミング言語に翻訳するプロセスのことです。通常、コンパイラーは、高レベルの抽象化から低レベルの抽象化へと、人間が読めるJavaScriptのようなコードをコンピューターが読めるマシンコードに変換します。

Chrome V8は、実行時コンパイラーと呼ばれることを実行します。JavaScriptを事前にコンパイルするのではなく、コードの実行時にコードをコンパイルします。

サンドボックス化とは?

Chrome V8のサンドボックス機能

「サンドボックス」とは、同じコンピューター上にあるものであっても、ほかの環境から分離してパーティション化したソフトウェアを実行するための環境のことです。

サンドボックス機能は、Chrome V8の主要な機能です。各プロセスはサンドボックス化されるので、JavaScript関数が個別に実行されて、1つのコードの実行がほかのコードに影響することはありません。(分離された仮想マシン内で実行可能ファイルを開いて実行する多くの企業向けサンドボックス製品とは異なり、V8のサンドボックス機能はパフォーマンスを低下させることはありません。)

Node.jsとは?

Node.jsとは、JavaScriptコードを実行するための実行環境*であり、Chrome V8エンジン上に構築されています。非同期実行であるため、別のプロセスが開始される前にプロセスが終了するのを待つ必要がありません。V8と同様に、Node.jsは無料のオープンソースです。V8とは異なり、Node.jsにはサンドボックス機能は内蔵されていません。

(JavaScriptに精通している人は、「.js」というファイル拡張子に気付くと思います。ただし、これは純粋に実行環境の名前がJavaScriptとの関連性を示すようにする審美的な選択であり、Node.jsがJavaScriptファイルであるという意味ではありません。)

*実行環境とは、コードが実行されるソフトウェア環境のことです。

V8とNode.jsがサーバーレスコンピューティングにとって重要な理由

サーバーレス関数は、トリガーされたときに実行する方法を必要とします。いくつかのサーバーレスコンピューティングベンダーは、サーバーレスJavaScript関数の実行環境としてNode.jsを提供しています(ほかの実行環境はほかの言語のために使用されます)。

しかし、Cloudflare WorkersはV8上で直接実行されます。これには、いくつかの理由があります。その1つは、最近使用されていない関数の実行速度です。コールドスタートはサーバーレスコンピューティングにおける問題ですが、V8上で関数を実行することで、通常、5ミリ秒以内に関数を呼び出して実行できます。(Node.jsは、オーバーヘッドが高く、通常は数ミリ秒多くかかります。)もう1つの理由は、V8はJavaScript関数を自動的にサンドボックス化するので、セキュリティを強化できます。