REPLを使ってデバッグする。プログラマーに必須の対話型ツール

ファンブリューの金井です。

プログラミングをしていると、「ここの処理ってどうなってるんだっけ」とか、「あの文法忘れた」とか、そういったことがよくあります。

複数のプロジェクトを渡り歩いていると、それぞれ違う技術を使っていることも多いので、細かい文法を忘れてしまうことはよくあることです。

そんな時によくやるのが

  1. ネットで調べ直す
  2. ちょっとコードを書いて確かめる

なのですが、意外と2つ目の「ちょっとコードを書く」が手間な時があります。

というのも、近年のシステム開発は何かしらのフレームワークを使っていることが多く、文法を試すにも一旦、

「controllerに一つテスト用のファイルを作って…」

とやらなければなりません。

実際にそこに処理をチェックするには、ウェブブラウザからアクセスして…とやらなければならず、意外と手間です。

それなら、ネットで調べるだけではいいのでは?と思うわけですが、そうもいきません。

ネットで調べた内容をそのまま使えればOKですが、大概は実現したい内容に合わせて微調整する必要があります。

さて前置きはこれぐらいにして、そんな時におすすめなのがREPL(レプル)です。

これは入力したコードが即座に実行されて結果が返ってくるので、文法のチェックなどでお世話になっている人も多いかもしれません。

逆に「使い捨てのコードを毎回入力するのが手間」と考えている人もいるかもしれません。

今回はREPLとは何かを説明しながら、REPLをおすすめする理由をご紹介します。

目次

REPLとは何か?

まずはREPLとは何かについてですが、「Read-Eval-Print Loop」の略で、コードをその場で書いて実行できる環境のことを言います。

REPL上でプログラムの一部を書いてEnterを押せば、即座に結果を確認できるので、プログラムの実験やデバッグに非常に便利です。

多くのプログラミング言語で備わっており、新しい言語を習得するときもこのREPLがある学びが早くなるでしょう。

REPLを使うことのメリット

ところで、REPLを使うと何が嬉しいのでしょうか。

先にも書いていますが、ちょっとした動作確認がしたい時、システムの中にあるデータを覗き見したい時など、様々な使い方があります。

コマンドになっていないプログラムを呼び出して、バッチ処理のように使うこともできます。

せっかくなので1つずつ例を挙げてみていきましょう。

まずはREPLを試して実感する

REPLを使っている人を見ると、その場でバリバリコードを打ち込んでいく人がいますが、別にそのような使い方をしなくても大丈夫です。(そういうエンジニアさんは普段からバリバリ使ってる人です)

まずは簡単なコードを実行するだけで構いません。

私がPHPをよく使うのでPHPで例を挙げますが、例えば、array_pushについて調べたいとき、このように書けば即座に結果が確認できます。

php artisan tnker # Laravel Tinkerを使って動作確認(REPLの起動)
> $arr = ['りんご', 'バナナ']
= [
    "りんご", 
    "バナナ",
  ]

> array_push($arr, 'いちご')
= 3

> $arr
= [
    "りんご", 
    "バナナ",
    "いちご",
  ]

これだけだと、少しわかりづらいかもしれませんが、実際にLaravel Tinkerで確認すると、まず、変数を宣言してEnterを押した時点で、配列の中身を表示して宣言が完了したことを教えてくれます。

そこからarray_pushで配列に新しいアイテムを追加したことによって、配列のサイズが返ってきます。

最後に変数$arrを入力してEnterをするだけで、現在の中身を表示してくれます。

このように、一行ずつ自分の書いたコードをつぶさに確認することができます。

不具合の再現を行うのに便利

システム開発をしていると様々なバグに見舞われますが、再現さえできれば、そこから修正方法を考えられます。

そこでREPLを使うことで、毎回コードを書いて実行する手間が省くことができます。

不具合の再現をしているときは試行錯誤をすることがほとんどです。

その度にエディターで編集して、コマンドを実行してでは時間がかかってしまいます。

それも慣れると微々たる時間ではあるのですが、塵が積もればというやつで、開発体験としても良くありません。

またプロジェクトの方針にもよりますが、本番環境でしか起こらないようなバグの確認にも利用できます。

機能の一部を実行したいとき

システム開発をしているとシステムの一部を実行させたいことがたまに発生します。

例えば、画面のあるボタンを押すとメールが飛ぶという機能があったとき、何らかの理由でメールだけを送信させたい、といった場合があります。

そんな時は、その処理をimportし(これはプログラミング言語によって違いますが)、指定の関数なりを呼び出せば実行できます。

ここでうまく処理を切り出して実行できないようであれば、プログラムの部品化ができていないかもしれません。

もし処理が1つの機能にうまくまとまっていれば、上記のようにライブラリを読み込んで実行するということができます。

ライブラリの検証に利用する

REPLを使うとすぐに結果が確認できるため、新しく採用を検討しているライブラリの動作検証にも使えます。

プロジェクトのソースコードに組み込む前に検証しておくことで、使い方の確認もできますし、また他に影響を与えることなくチェックできるので、動作確認だけに集中できます。

REPLで検証した結果を、プロジェクトのソースコードに徐々に移植するといった使い方もできるでしょう。

システムにない機能を実行させる

例えば、本来ではあれば画面上から行うパスワードリセットの機能があったとします。

何らかの理由でそれが実行できないとき、REPLを使ってパスワードリセットを行うこともできるでしょう。

本番環境でのデータメンテは慎重に行わないといけませんが、緊急時にはこういった使い方も可能です。

そのために普段からREPLに慣れて、保守対応時には素早く扱えるにしておく必要があるでしょう。

最後に

REPLとは何か、どう言った時に使えるのかを書いてみました。

使わなくてもシステム開発はできますが、うまく使いこなせばバグ修正などに非常に役に立ちます。

もしまだ使ったことないという方がいましたら、ぜひ試してみてください。

ここまでお読みいただきありがとうございました。

未経験でエンジニアを目指すなら

ファンブリューではエンジニアになりたい人を支援しています。

現在こんなお悩みがあれば、ぜひ一度ご相談ください。

  • プログラミングを学習したいが、何から始めたらいいかわからない。
  • IT業界に就職するために必要な知識が何かわからない。
  • 実務経験がなくて現場に入れない

金井 泰樹のアバター 金井 泰樹 FUNBREW代表

FUNBREWの代表。
新卒からIT系の企業に勤め、SES、スマホアプリ開発、自社開発の会社で経験を積んで独立。
新卒時代にエンジニアとしてのキャリアを積むのに失敗し、その後に苦労した経験から、現在教育事業の立ち上げを準備中。
強みはウェブシステム開発全般と迅速なレスポンスです。

目次