3秒でわかる
入力を読み、評価し、結果を表示する動作を繰り返す対話型の実行環境。ファイルを作らずに一行ずつ試せるため、動作確認の最短ルートになります。
もう少し詳しく
どういうものか
Read(入力を読む)、Eval(評価する)、Print(結果を表示する)、Loop(最初へ戻る)の 4 段階を繰り返す実行環境で、頭文字を取って REPL と呼ばれます。プロンプトが表示され、そこへ式を打ち込むと、その場で評価されて値が返ってきます。
主な言語にはそれぞれ用意されています。Python は python、Node.js は node、Ruby は irb、Java は JDK 9 以降に同梱されている jshell で起動します。ブラウザの開発者ツールにあるコンソールも、JavaScript の REPL です。
なぜ必要か
コードを書くとき、頭の中の想定と実際の挙動がずれる場面は絶えず起きます。この文字列メソッドは元の値を書き換えるのか、この関数は何を返すのか、といった疑問を、ファイルを新規作成して保存して実行して、という往復なしに数秒で確かめられます。
ドキュメントを読んで分かった気になるより、返り値を自分の目で見るほうが速くて確実です。学習中はもちろん、実務でも初めて触るライブラリの挙動確認は REPL から始めるのが定番になっています。
具体例
Python の REPL では、式を打つと戻り値がそのまま表示されます。
$ python
>>> words = "apple,banana,cherry".split(",")
>>> words
['apple', 'banana', 'cherry']
>>> sorted(words, key=len)
['apple', 'cherry', 'banana']
>>> words # sorted は元のリストを変えない
['apple', 'banana', 'cherry']
>>> words.sort() # sort は元を書き換えて None を返す
>>> print(words.sort())
None破壊的なメソッドと非破壊的なメソッドの違いは、説明を読むより、この 5 行を打つほうが早く身に付きます。
つまずきやすいところ
print() を書かないと何も出ないと思い込む人が多いのですが、REPL は式の評価結果を自動で表示します。逆に、値を返さない代入文やループは何も表示されないため、「動いていない」と誤解しやすい部分です。
もうひとつは状態が残ることです。前に定義した変数や関数が生き続けるため、コードを直して読み込み直したつもりでも古い定義が使われることがあります。挙動が説明できなくなったら、いったん終了して起動し直すのが早い解決になります。
インデントが必要な言語では、複数行の入力中はプロンプトの見た目が変わり、空行を入れるまでブロックが閉じない点にも慣れが必要です。
似た用語との違い
スクリプト実行は、書いたファイルを頭から最後まで一括で走らせて終了します。REPL は 1 つの式ごとに結果を返し、状態を保ったまま次の入力を待ちます。Jupyter Notebook は REPL の考え方をセル単位に広げ、結果や図を保存できるようにしたものだと捉えると位置付けがはっきりします。