`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.log
がprint
よりも推奨されます。
入力を読む
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」にもぴったりです。