IRBを使用してRubyを探索する方法

前書き

Interactive Rubyの略であるIRBは、Rubyプログラミング言語を探索し、ファイルを作成せずにコードを試す簡単な方法です。 IRBはhttps://en.wikipedia.org/wiki/Read%E2%80%93eval%E2%80%93print_loop[Read-Eval-Print Loop]、または_REPL_であり、多くの最新のプログラミング言語で提供されています。 それを使用するには、 `+ irb +`実行可能ファイルを起動し、プロンプトでRubyコードを入力します。 IRBは、入力したコードを評価し、結果を表示します。

IRBを使用すると、Rubyのすべての組み込み機能に加えて、インストールしたライブラリやgemにアクセスできます。 さらに、IRBを構成してコマンド履歴を保存し、コードの自動補完を有効にすることもできます。

このチュートリアルでは、IRBを使用してコードを実行し、その出力を検査し、外部ライブラリを取り込み、IRBセッションをカスタマイズします。

IRBの開始と停止

Rubyインストール済みがある場合、IRBがあります。 。 コマンドラインインターフェイスからコマンド `+ irb +`を実行することで、Rubyがインストールされている任意のコンピューターで起動できます。

irb

IRBプロンプトが表示されます。

IRB sessionirb(main):001:0>

このプロンプトは、IRBを実行していることと、実行するものはすべてRubyプログラムのトップレベルのデフォルトコンテキストである `+ main +`コンテキストで実行されることを示しています。 行番号も表示されます。

IRBは、プロンプトで入力できるRuby構文を受け入れます。 2つの数字を一緒に追加して試してください。

2 + 2

`+ ENTER +`キーを押すと、IRBに結果が表示されます。

IRB session=> 4

`+ ⇒ +`シンボルは、これがRuby式からの戻り値であることを知らせます。

IRBを終了するには、プロンプトで「+ exit 」と入力するか、「 CTRL + D +」を押します。 シェルプロンプトに戻ります。

IRBを使用してコードを探索する方法を見て、IRBについてもう少し詳しく見てみましょう。

IRBセッションでのコードの実行

IRBは、コードを試して問題の良い解決策であるかどうかを確認するのに最適な方法です。 Rubyのほとんどすべてが何らかの値を返します。IRBでステートメントを実行するたびに、その戻り値が画面に出力されます。

これを実証するには、新しいIRBセッションで次のステートメントを実行します。

puts "Hello World"

「+ ENTER +」キーを押すと、IRBから2つの結果が表示されます。

OUTPUTHello World
=> nil

最初の結果は `+ puts `メソッドからの出力で、指定した文字列を出力し、その後に改行が続きます。 ` puts `メソッドは、テキストを標準出力デバイス(画面)に出力します。 しかし、 ` puts `メソッドには戻り値があります。これは、Rubyのすべてのメソッドに戻り値があるためです。 ` puts `メソッドは ` nil +`を返します。これがIRBが示しているものです。

ステートメントを実行するたびに、プロンプトが変わり、新しい行番号を示します。

irb(main):001:0> puts "Hello World"
Hello World
=> nil
irb(main):002:0>

これは、エラーメッセージが行番号を参照するため、IRBセッションでより複雑な式を実行するときにステートメントをデバッグするのに役立ちます。

スタンドアロンのRubyプログラムで行うのと同じように、IRBセッションで変数に値を割り当てることができます。 IRBセッションで入力し、 `+ ENTER +`を押して、このステートメントを実行します。

birth_year = 1868

このステートメントの戻り値がエコーバックされます。

IRB session=> 1868

変数 `+ birth_year +`はこの値を保持しますが、Rubyのほとんどのステートメントは値を返すため、IRBはここにも戻り値を表示します。

さらに2つの変数を追加します。 最初に、 `+ death_year +`という変数を作成します:

death_year = 1921

次に、 `+ death_year `から ` birth_year `を減算して、変数 ` age_at_death +`を作成します。

age_at_death = death_year - birth_year

IRBは変数に値を割り当てますが、結果も表示します。

IRB session=> 53

IRBセッションでは、戻り値が表示されるため、不要な場合は明示的な「+ puts 」または「 print +」ステートメントを使用する必要はありません。

場合によっては、複数行にわたるコードを作成する必要があります。 IRBはこれを直感的にサポートします。 IRBは、構文的に完全なコードのみを実行します。 次のRubyコードはhttps://www.digitalocean.com/community/tutorials/how-to-work-with-arrays-in-ruby[array]のサメを使用し、https://www.digitalocean.comを使用します/ community / tutorials / how-to-use-array-methods-in-ruby#finding-and-filtering-elements [select]メソッドを使用して、名前に文字「a」を含むサメのみを返します。 IRBセッションに次のコードを入力し、各行の後に「+ ENTER +」を押します。

["Tiger", "Great White", "Angel"].select do |shark|
  shark.include?("a")
end

IRBでは複数行のコードを入力できますが、コードが構文的に完全であると判断した場合にのみコードを実行します。 プロンプトが変化して、アスタリスク( + * +)を使用してIRBがまだコードを評価していないことを示し、最後のゼロを1に変更して別のスコープを示していることに注意してください。

IRB sessionirb(main):005:0> ["Tiger", "Great White", "Angel"].select do |shark|
irb(main):006:    shark.include?("a")
irb(main):007:> end

最初の行には「+ do 」キーワードが含まれているため、IRBは「 end +」キーワードが見つかるまで何も実行しようとしません。 次に、結果が表示されます。

IRB session=> ["Great White"]

IRBを使用すると、コードの一部をテストして、独自のプログラムに組み込む前にどのように機能するかを確認できます。 IRBを使用して外部ライブラリを操作することもできます。

ライブラリと宝石の使用

Rubyプログラムで行う場合と同様に、 `+ require `ステートメントを使用してライブラリをIRBセッションにインポートできます。 これらのライブラリは、Rubyの標準ライブラリに含まれるもの、自分で作成したもの、または_gems_、http://rubygems.org [Rubygems.org]を介して配布されるRubyライブラリで、 ` gem +`コマンドを使用してインストールできます。

Rubyの標準ライブラリには、ウェブリクエストを行い、結果を取得するためのモジュールが含まれています。 Rubyプログラムの場合とまったく同じように、IRBセッションでそれらを使用できます。

`+ require `ステートメントを使用して、Rubyの標準ライブラリからhttp://ruby-doc.org/stdlib-2.4.2/libdoc/net/http/rdoc/Net/HTTP.html[Net/HTTP]をインポートします。 IRBセッションに次のコード行を入力し、 ` ENTER`を押します。

require 'net/http'

IRBは、このステートメントが「+ true 」を返すことを示し、ライブラリが正常にロードされたことを示します。 次に、このコードをIRBに入力して、外部IPアドレスを取得するために ` icanhazip.com +`にリクエストを行います。

uri = URI.parse("http://icanhazip.com")
response = Net::HTTP.get_response uri
response.body

各行を入力すると、IRBは戻り値を表示するため、各ステップをデバッグできます。

IRB sessionirb(main):010:0> uri = URI.parse("http://icanhazip.com")
=>
irb(main):011:0> response = Net::HTTP.get_response uri
=>
irb(main):012:0> response.body
=>

ライブラリが見つからない場合は、別の応答が表示されます。 HTTPartyライブラリをインポートしてみてください。これにより、HTTPリクエストの処理が少し簡単になります。

require 'httparty'

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

IRB sessionLoadError: cannot load such file -- httparty

このメッセージは、必要なライブラリが利用できないことを示しています。 HTTPartyはgemとして配布されるため、インストールする必要があります。 + CTRL + D +`でIRBセッションを終了するか、 `+ exit +`を入力してプロンプトに戻ります。 次に、 `+ gem +`コマンドを使用して `+ httparty + gemをインストールします。

gem install httparty

ここで、もう一度「+ irb +」を起動します。

irb

モジュールを再度ロードしてください。 IRBセッションで、次のコードを入力します。

require 'httparty`

今回、IRBは `+ true +`を表示し、ライブラリをロードできたことを知らせます。 次のコードをIRBに入力して試してください。

response = HTTParty.get("http://icanhazip.com")
response.body

画面に出力が印刷されます:

IRB session=>

次に、IRBを使用して独自のRubyコードを探索およびテストする方法を見てみましょう。

コードをIRBに読み込む

IRBセッションを開始し、「-r +」スイッチを使用する場合、IRBの開始時にロードするライブラリまたはgemを指定できます。 たとえば、 ` irb -r httparty `は、既にロードされている ` httparty ` gemでIRBセッションを起動します。つまり、明示的な ` require httparty +`ステートメントをスキップできます。

ただし、これを使用して独自のコードを新しいセッションにロードすることもできます。これは、探索したりテストしたりするときに役立ちます。

「+ exit 」と入力するか、「 CTRL + D +」を押して、IRBセッションを終了します。

URLが提供されるとマシンの外部IPアドレスを返す `+ get `メソッドで ` IPGrabber `オブジェクトを定義する ` ip_grabber.rb `という新しいRubyファイルを作成します。 HTTPartyライブラリを使用して、 ` icanhazip.com `から応答を取得します。 独自のプログラムでこの ` IPGrabber +`オブジェクトを使用して、外部の変更からコードを隔離します。 obectを使用すると、コードの残りの動作を変更することなく、基になるライブラリとIPアドレスを解決するために使用するサイトを切り替えることができます。

このコードをファイルに追加して、クラスを定義します。

ip_grabber.rb

require 'httparty'
class IPGrabber

 def initialize()
   @url = "http://icanhazip.com"
 end

 def get
   response = HTTParty.get(@url)
   response.body.chomp  # remove the \n if it exists
 end
end

ファイルを保存し、エディターを終了します。

次に、IRBを起動してこのファイルをロードします。 gemや組み込みライブラリではなくローカルファイルであるため、パスを指定する必要があります。 また、ファイルの拡張子「+ .rb +」を指定する必要もありません。

irb -r ./ip_grabber

IRBセッションがロードされ、次のようにセッションでこの新しいオブジェクトの使用を開始できます。

ip = IPGrabber.new
ip.get

次の出力が表示されます。

IRB session=>

独自のコードをIRBセッションにロードすることにより、コードを検査し、独自のライブラリを操作してから完全なプログラムに組み込むことができます。

IRBセッションでコードを操作する方法がわかったので、IRBセッションをカスタマイズする方法を見てみましょう。

IRBのカスタマイズ

IRBセッションをカスタマイズできる「+ .irbrc +」という設定ファイルを作成できます。 その後、オートコンプリート、インデント、およびコマンド履歴のサポートを追加できます。

このファイルをホームディレクトリに作成します。

nano ~/.irbrc

まず、IRBでオートコンプリートのサポートを構成します。 これにより、 `+ TAB +`キーを使用して、IRBのオブジェクト、変数名、メソッド名をオートコンプリートできます。

〜/ .irbrc

require 'irb/completion'

次に、コマンド履歴を外部ファイルに保存するためのサポートを追加します。

〜/ .irbrc

IRB.conf[:SAVE_HISTORY] = 1000

これを有効にすると、入力した最後の1000ステートメントがホームディレクトリの `+ .irb_history +`ファイルに記録されます。

さらに、新しいIRBセッションを開くと、履歴が自動的に読み込まれ、 `+ Up `および ` Down `矢印キーを使用してこれらのエントリを移動したり、 ` CTRL + R +`を使用してBashシェルの場合と同じように、逆検索。

別の履歴ファイルを指定する場合は、これを構成ファイルに追加します。

〜/ .irbrc

IRB.conf[:HISTORY_FILE] = '~/'

次に、次の行を構成ファイルに追加して、自動インデントを有効にします。これは、クラス、メソッド、およびブロックを記述するときに便利です。

〜/ .irbrc

IRB.conf[:AUTO_INDENT] = true

設定ファイルには、追加の有効なRubyコードを含めることができます。つまり、ヘルパーメソッドを定義したり、 `+ require `を使用して追加のライブラリをロードしたりできます。 たとえば、履歴を表示するIRBセッションに「 history 」ヘルパーを追加するには、次のコードを「 .irbrc +」に追加します。

irbrc
def history
 history_array = Readline::HISTORY.to_a
 print history_array.join("\n")
end

IRBセッションをロードしたら、「+ history 」と入力してIRB履歴を表示します。 かなりの量があるかもしれないので、 ` history`コマンドを変更して、表示するためにオプションの行数を取ることができます。 `+ history `関数のコードをこのコードに置き換えます。このコードは、 ` count +`というオプションの引数を取り、表示するエントリを制限するために使用します。

irbrc
# history command
def history(count = 0)

 # Get history into an array
 history_array = Readline::HISTORY.to_a

 # if count is > 0 we'll use it.
 # otherwise set it to 0
 count = count > 0 ? count : 0

 if count > 0
   from = hist.length - count
   history_array = history_array[from..-1]
 end

 print history_array.join("\n")
end

ファイルを保存し、新しいIRBセッションを開始します。 次に、「+ history 2+」と入力すると、履歴の最後の2行のみが表示されます。

`+ .irbrc `を使用して頻繁に使用するライブラリをロードできますが、ロードする各ライブラリはIRBセッションのロード時間を増加させるため、使用が不愉快になる可能性があることに注意してください。 多くの場合、 ` require`ステートメントを使用して特定のライブラリを手動でロードする方が適切です。

結論

IRBは、Rubyコードを試す場所を提供します。 ファイルに入れる前にプログラムロジックを計算するのに最適な方法です。

IRBに慣れてきたので、これらのチュートリアルに従ってIRBを使用して例を実行することにより、IRBを使用してRubyのさまざまなデータ型を調べることができます。