メインコンテンツまでスキップ

`d8`の使用方法

d8はV8の独自の開発者シェルです。

d8はローカルでJavaScriptを実行したり、V8に加えた変更をデバッグする際に役立ちます。GNを使用したV8のビルドをx64用に行うと、d8バイナリがout.gn/x64.optdebug/d8に出力されます。--help引数を使用してd8を呼び出すと、使用方法やフラグの詳細情報が得られます。

コマンドラインに出力する

出力を印刷する機能は、JavaScriptファイルをインタラクティブではなく実行するためにd8を使用する場合に非常に重要です。これはconsole.logを使用して達成できます:

$ cat test.js
console.log('Hello world!');

$ out.gn/x64.optdebug/d8 test.js
Hello world!

d8には同様の動作をするグローバルなprint関数も付属しています。ただし、ウェブブラウザでも動作するため、console.logprintよりも推奨されます。

入力を読む

read()を使用してファイルの内容を変数に格納できます。

d8> const license = read('LICENSE');
d8> license
"このライセンスは、外部で管理されていないV8のすべての部分に適用されます。
V8で使用されている外部管理ライブラリは以下の通りです:
(その他)"

readline()を使用してインタラクティブにテキストを入力できます:

d8> const greeting = readline();
Welcome
d8> greeting
"Welcome"

外部スクリプトをロードする

load()は現在のコンテキストで別のJavaScriptファイルを実行します。これにより、そのファイルで宣言されたものにアクセスできます。

$ cat util.js
function greet(name) {
return 'Hello, ' + name;
}

$ d8
d8> load('util.js');
d8> greet('World!');
"Hello, World!"

フラグをJavaScriptに渡す

d8を使用して、コマンドライン引数を実行時にJavaScriptコードで利用できるようにすることが可能です。コマンドラインで--の後に渡してください。この後、スクリプトのトップレベルでargumentsオブジェクトを使用してアクセスできます。

out.gn/x64.optdebug/d8 -- hi

これでargumentsオブジェクトを使用して引数の配列にアクセスできます:

d8> arguments[0]
"hi"

その他のリソース

Kevin EnnisのD8ガイドには、d8を使用してV8を探索する方法について非常に有益な情報があります。

d8という名前の背景: 初期のV8には「sample shell」がありました。これは、V8を埋め込んでJavaScriptシェルを構築する方法を示す目的で作られたもので、意図的に最小限の設計で、その名前は単純に「shell」でした。その後、開発者向けに便利な機能を追加した「developer shell」が作られ、名前が必要になりました。「d8」という名前が選ばれた理由は歴史の中で失われていますが、「eveloper」は8文字を省略した形で、つまり「d8 shell」という名前が略称として理にかなっており、またプロジェクト名「V8」にもぴったりです。