著者は、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コードをすばやくテストおよび探索できます。
前提条件
このチュートリアルを完了するには、次のものが必要です。
-
Node.js installed on your development machine. このチュートリアルでは、バージョン10.16.0を使用します。 これをmacOSまたはUbuntu18.04にインストールするには、How to Install Node.js and Create a Local Development Environment on macOSの手順またはHow To Install Node.js on Ubuntu 18.04の「PPAを使用したインストール」セクションに従います。
-
JavaScriptの基本的な知識。ここで見つけることができます:How To Code in 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コードを試すことができます。