Node.js REPLの使用方法

著者は、Write for DOnationsプログラムの一部として寄付を受け取るためにOpen Internet/Free Speech Fundを選択しました。

前書き

Node.jsRead-Eval-Print-Loop(REPL)は、Node.js式を処理する対話型シェルです。 シェルreadsユーザーが入力したJavaScriptコード、evalはコード行の解釈の結果を発行し、printsはユーザーに結果を送信し、loopsはユーザーが終了するように合図するまで。

REPLはすべてのNode.jsインストールにバンドルされており、ファイルに保存せずにNode環境内でJavaScriptコードをすばやくテストおよび探索できます。

前提条件

このチュートリアルを完了するには、次のものが必要です。

[[step-1 -—- starting-and-stopping-the-repl]] ==ステップ1—REPLの開始と停止

nodeがインストールされている場合は、Node.jsREPLもあります。 開始するには、コマンドラインシェルにnodeと入力するだけです。

node

これにより、REPLプロンプトが表示されます。

>

>記号は、JavaScriptコードを入力してすぐに評価できることを示します。

たとえば、次のように入力して、REPLに2つの数値を追加してみてください。

> 2 + 2

ENTERを押すと、REPLは式を評価し、次を返します。

4

REPLを終了するには、.exitと入力するか、CTRL+Dを1回押すか、CTRL+Cを2回押すと、シェルプロンプトに戻ります。

邪魔にならないように開始および停止する場合、REPLを使用して簡単なJavaScriptコードを実行する方法を見てみましょう。

[[step-2 -—- executing-code-in-the-node-js-repl]] ==ステップ2— Node.jsREPLでコードを実行する

REPLは、ファイルを作成せずにJavaScriptコードをテストする簡単な方法です。 ほとんどすべての有効なJavaScriptまたはNode.js式は、REPLで実行できます。

前の手順で、すでに2つの数字の加算を試しました。次に、除算を試してみましょう。 そのためには、新しいREPLを開始します。

node

プロンプトで次を入力します。

> 10 / 5

ENTERを押すと、期待どおりに出力が2になります。

2

REPLは、文字列に対する操作も処理できます。 次のように入力して、REPL内の次の文字列をConcatenateします。

> "Hello " + "World"

もう一度、ENTERを押すと、文字列式が評価されます。

'Hello World'

[.note]#Note:出力で二重引用符ではなく一重引用符が使用されていることに気付いたかもしれません。 JavaScriptでは、文字列に使用される引用符はその値に影響しません。 入力した文字列が一重引用符を使用している場合、REPLは出力で二重引用符を使用するのに十分賢いです。

関数を呼び出す

Node.jsコードを作成する場合、グローバルconsole.logメソッドまたは同様のfunctionを介してメッセージを出力するのが一般的です。 プロンプトで次を入力します。

> console.log("Hi")

ENTERを押すと、次の出力が得られます。

Hi
undefined

最初の結果はconsole.logからの出力であり、stdoutストリーム(画面)にメッセージを出力します。 console.logは文字列を返す代わりに文字列を出力するため、メッセージは引用符なしで表示されます。 undefinedは関数の戻り値です。

変数を作成する

JavaScriptでリテラルを操作することはほとんどありません。 REPLでの変数の作成は、.jsファイルでの作業と同じように機能します。 プロンプトで次を入力します。

> let age = 30

ENTERを押すと、次のようになります。

undefined

以前と同様に、console.logの場合、このコマンドの戻り値はundefinedです。 age変数は、REPLセッションを終了するまで使用できます。 たとえば、ageに2を掛けることができます。 プロンプトで次のように入力し、ENTERを押します。

> age * 2

年です。結果:

60

REPLは値を返すため、画面に出力を表示するためにconsole.logまたは同様の関数を使用する必要はありません。 デフォルトでは、返された値はすべて画面に表示されます。

複数行ブロック

複数行のコードブロックもサポートされています。 たとえば、特定の数値に3を加算する関数を作成できます。 次を入力して機能を開始します。

> const add3 = (num) => {

次に、ENTERを押すと、プロンプトが次のように変更されます。

...

REPLは開いた中括弧に気づいたため、インデントする必要がある複数行のコードを記述していると想定しています。 読みやすくするために、REPLは次の行に3つのドットとスペースを追加するため、次のコードはインデントされているように見えます。

関数の2行目と3行目を一度に1つずつ入力し、それぞれの後にENTERを押します。

... return num + 3;
... }

中括弧を閉じた後にENTERを押すと、undefinedが表示されます。これは、変数への関数割り当ての「戻り値」です。 ...プロンプトはなくなり、>プロンプトは次を返します。

undefined
>

ここで、値に対してadd3()を呼び出します。

> add3(10)

予想どおり、出力は次のとおりです。

13

REPLを使用して、プログラムに組み込む前にJavaScriptコードの一部を試すことができます。 REPLには、そのプロセスを簡単にする便利なショートカットも含まれています。

[[step-3 -—- mastering-repl-shortcuts]] ==ステップ3—REPLショートカットのマスタリング

REPLは、可能な場合、コーディング時間を短縮するためのショートカットを提供します。 入力されたすべてのコマンドの履歴を保持し、それらを循環させて、必要に応じてコマンドを繰り返すことができます。

たとえば、次の文字列を入力します。

"The answer to life the universe and everything is 32"

これは次のようになります。

'The answer to life the universe and everything is 32'

文字列を編集して「32」を「42」に変更する場合は、プロンプトで、UPの矢印キーを使用して前のコマンドに戻ります。

> "The answer to life the universe and everything is 32"

カーソルを左に移動し、3を削除し、4と入力して、もう一度ENTERを押します。

'The answer to life the universe and everything is 42'

UP矢印キーを押し続けると、現在のREPLセッションで最初に使用されたコマンドまで履歴をさらに遡ります。 対照的に、DOWNを押すと、履歴内のより新しいコマンドに向かって繰り返されます。

コマンド履歴の操作が終了したら、最近のコマンド履歴を使い果たしてプロンプトが再び表示されるまで、DOWNを繰り返し押します。

最後に評価された値をすばやく取得するには、アンダースコア文字を使用します。 プロンプトで、_と入力し、ENTERを押します。

> _

以前に入力した文字列が再び表示されます:

'The answer to life the universe and everything is 42'

REPLには、関数、変数、およびキーワードのオートコンプリートもあります。 Math.sqrt関数を使用して数値の平方根を検索する場合は、次のように最初の数文字を入力します。

> Math.sq

次に、TABキーを押すと、REPLは関数をオートコンプリートします。

> Math.sqrt

オートコンプリートに複数の可能性がある場合、利用可能なすべてのオプションが表示されます。 たとえば、次のように入力します。

> Math.

そして、TABを2回押します。 可能なオートコンプリートが表示されます:

> Math.
Math.__defineGetter__      Math.__defineSetter__      Math.__lookupGetter__
Math.__lookupSetter__      Math.__proto__             Math.constructor
Math.hasOwnProperty        Math.isPrototypeOf         Math.propertyIsEnumerable
Math.toLocaleString        Math.toString              Math.valueOf

Math.E                     Math.LN10                  Math.LN2
Math.LOG10E                Math.LOG2E                 Math.PI
Math.SQRT1_2               Math.SQRT2                 Math.abs
Math.acos                  Math.acosh                 Math.asin
Math.asinh                 Math.atan                  Math.atan2
Math.atanh                 Math.cbrt                  Math.ceil
Math.clz32                 Math.cos                   Math.cosh
Math.exp                   Math.expm1                 Math.floor
Math.fround                Math.hypot                 Math.imul
Math.log                   Math.log10                 Math.log1p
Math.log2                  Math.max                   Math.min
Math.pow                   Math.random                Math.round
Math.sign                  Math.sin                   Math.sinh
Math.sqrt                  Math.tan                   Math.tanh
Math.trunc

シェルの画面サイズに応じて、異なる行数と列数で出力が表示される場合があります。 これは、Mathモジュールで使用できるすべての関数とプロパティのリストです。

CTRL+Cを押すと、現在の行にあるものを実行せずに、プロンプトの新しい行に移動します。

REPLショートカットを知っていると、使用する際の効率が向上します。 ただし、REPLが生産性の向上に提供するもう1つのもの、The REPL commandsがあります。

[[step-4 -—- using-repl-commands]] ==ステップ4—REPLコマンドの使用

REPLには、その動作の制御に役立つ特定のキーワードがあります。 各コマンドはドット.で始まります。

。助けて

使用可能なすべてのコマンドを一覧表示するには、.helpコマンドを使用します。

> .help

多くありませんが、REPLで物事を成し遂げるのに役立ちます。

.break    Sometimes you get stuck, this gets you out
.clear    Alias for .break
.editor   Enter editor mode
.exit     Exit the repl
.help     Print this help message
.load     Load JS from a file into the REPL session
.save     Save all evaluated commands in this REPL session to a file

Press ^C to abort current expression, ^D to exit the repl

コマンドを忘れた場合は、いつでも.helpを参照してコマンドの機能を確認できます。

.break/.clear

.breakまたは.clearを使用すると、複数行の式を簡単に終了できます。 たとえば、次のようにfor loopを開始します。

> for (let i = 0; i < 100000000; i++) {

次の行を入力する代わりに、これ以上行の入力を終了するには、.breakまたは.clearコマンドを使用して次のように区切ります。

... .break

新しいプロンプトが表示されます:

>

REPLは、CTRL+Cを押すのと同様に、コードを実行せずに新しい行に移動します。

.saveおよび.load

.saveコマンドは、REPLの開始以降に実行したすべてのコードをファイルに保存します。 .loadコマンドは、REPL内のファイルからすべてのJavaScriptコードを実行します。

.exitコマンドまたはCTRL+Dショートカットを使用してセッションを終了します。 ここで、nodeを使用して新しいREPLを開始します。 これで、作成しようとしているコードのみが保存されます。

果物を含む配列を作成します。

> fruits = ['banana', 'apple', 'mango']

次の行には、REPLが表示されます。

[ 'banana', 'apple', 'mango' ]

この変数を新しいファイルfruits.jsに保存します。

> .save fruits.js

確認のメッセージが表示されます。

Session saved to: fruits.js

ファイルは、Node.js REPLを開いたディレクトリと同じディレクトリに保存されます。 たとえば、ホームディレクトリでNode.js REPLを開いた場合、ファイルはホームディレクトリに保存されます。

セッションを終了し、nodeで新しいREPLを開始します。 プロンプトで、次のように入力してfruits.jsファイルをロードします。

> .load fruits.js

これは次のようになります。

fruits = ['banana', 'apple', 'mango']

[ 'banana', 'apple', 'mango' ]

.loadコマンドは、JavaScriptインタープリターの期待どおりに、コードの各行を読み取り、実行します。 これで、fruits変数を、現在のセッションで常に使用可能であるかのように使用できます。

次のコマンドを入力して、ENTERを押します。

> fruits[1]

REPLは以下を出力します。

'apple'

保存したアイテムだけでなく、.loadコマンドを使用して任意のJavaScriptファイルをロードできます。 好みのコードエディターまたはコマンドラインエディターであるnanoを開いて、peanuts.jsという名前の新しいファイルを作成して簡単に説明しましょう。

nano peanuts.js

ファイルが開いたので、次を入力します。

console.log('I love peanuts!');

CTRL+Xを押して、nanoを保存して終了します。

peanuts.jsを保存したのと同じディレクトリで、nodeを使用してNode.jsREPLを開始します。 セッションにpeanuts.jsをロードします。

> .load peanuts.js

.loadコマンドは、単一のconsoleステートメントを実行し、次の出力を表示します。

console.log('I love peanuts!');

I love peanuts!
undefined
>

REPLの使用が予想よりも長くなる場合、または共有する価値のある興味深いコードスニペットがあると思われる場合、またはより深く調査する場合は、.saveコマンドと.loadコマンドを使用して両方の目標を実現できます。

結論

REPLは、最初にファイルに書き込む必要なくJavaScriptコードを実行できるインタラクティブな環境です。

REPLを使用して、他のチュートリアルのJavaScriptコードを試すことができます。