開発者ドキュメント

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

序章

Interactive Rubyの略であるIRBは、Rubyプログラミング言語を探索し、ファイルを作成せずにコードを試すための簡単な方法です。 IRBは、 Read-Eval-Print Loop 、または REPL であり、多くの最新のプログラミング言語で提供されているツールです。 これを使用するには、irb実行可能ファイルを起動し、プロンプトでRubyコードを入力します。 IRBは、入力したコードを評価し、結果を表示します。

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

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

IRBの開始と停止

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

  1. irb

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

IRB session
irb(main):001:0>

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

:RubyとRVMをインストールした場合、プロンプトが少し異なって表示され、代わりにバージョン番号が表示される場合があります。

IRB session from RVM
2.4.0 :001 >

このチュートリアル全体で表示されるプロンプトを表示するには、irb --prompt inf-rubyを使用してIRBを起動します。

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

  1. 2 + 2

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

IRB session
=> 4

=>シンボルは、これがRuby式からの戻り値であることを示します。

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

IRBを使用してコードを探索する方法を見て、IRBをもう少し深く掘り下げてみましょう。

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

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

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

  1. puts "Hello World"

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

OUTPUT
Hello World => nil

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

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

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

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

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

  1. birth_year = 1868

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

IRB session
=> 1868

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

さらに2つの変数を追加します。 まず、death_yearという変数を作成します。

  1. death_year = 1921

次に、death_yearからbirth_yearを引いて、変数age_at_deathを作成します。

  1. age_at_death = death_year - birth_year

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

IRB session
=> 53

IRBセッションに参加しているときは、戻り値が表示されるので、必要がない場合は明示的なputsまたはprintステートメントを使用する必要はありません。

複数行にまたがるコードを記述したい場合があります。 IRBはこれを直感的にサポートします。 IRBは、構文的に完全なコードのみを実行します。 次のRubyコードは、サメの array を使用し、 select メソッドを使用して、名前に文字「a」を含むサメのみを返します。 このコードをIRBセッションに入力し、各行の後にENTERを押します。

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

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

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

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

IRB session
=> ["Great White"]

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

ライブラリと宝石の使用

Rubyプログラムの場合と同じように、requireステートメントを使用して、ライブラリをIRBセッションにインポートできます。 これらのライブラリは、Rubyの標準ライブラリに含まれているもの、自分で作成したもの、または[X109X]gemを使用してインストールするRubygems.orgを介して配布されるgemsのRubyライブラリです。 ] 指図。

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

requireステートメントを使用して、Rubyの標準ライブラリから Net /HTTPをインポートします。 次のコード行をIRBセッションに入力し、ENTERを押します。

require 'net/http'

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

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

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

IRB session
irb(main):010:0> uri = URI.parse("http://icanhazip.com") => #<URI::HTTP http://icanhazip.com> irb(main):011:0> response = Net::HTTP.get_response uri => #<Net::HTTPOK 200 OK readbody=true> irb(main):012:0> response.body => 203.0.113.52\n

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

require 'httparty'

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

IRB session
LoadError: cannot load such file -- httparty

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

  1. gem install httparty

ここで、irbを再度起動します。

  1. irb

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

require 'httparty`

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

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

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

IRB session
=> 203.0.113.52\n

それでは、IRBを使用して独自のRubyコードを調査およびテストする方法を見てみましょう。

コードをIRBにロードする

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

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

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

ip_grabber.rbという名前の新しいRubyファイルを作成します。このファイルはIPGrabberオブジェクトをgetメソッドで定義し、URLを指定するとマシンの外部IPアドレスを返します。 HTTPartyライブラリを使用して、icanhazip.comから応答をフェッチします。 このIPGrabberオブジェクトを独自のプログラムで使用して、コードを外部の変更から隔離します。 オブジェクトを使用すると、残りのコードの動作を変更することなく、基盤となるライブラリと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拡張子を指定する必要はありません。

  1. irb -r ./ip_grabber

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

ip = IPGrabber.new
ip.get

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

IRB session
=> 203.0.113.52

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

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

IRBのカスタマイズ

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

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

  1. 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] = '~/your_history_filename'

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

〜/ .irbrc
IRB.conf[:AUTO_INDENT] = true

構成ファイルには、追加の有効なRubyコードを含めることができます。つまり、ヘルパーメソッドを定義するか、requireを使用して追加のライブラリをロードできます。 たとえば、履歴を表示するhistoryヘルパーをIRBセッションに追加するには、次のコードを.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 = history_array.length - count
    history_array = history_array[from..-1] 
  end

  print history_array.join("\n")
end

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

.irbrcを使用して、頻繁に使用するライブラリをロードできますが、ロードするライブラリごとにIRBセッションのロード時間が長くなり、使い勝手が悪くなる可能性があることに注意してください。 多くの場合、requireステートメントを使用して特定のライブラリを手動でロードする方がよいでしょう。

結論

IRBは、Rubyコードを試す場所を提供します。 これは、ファイルに入れる前にプログラムロジックを理解するための優れた方法です。

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

モバイルバージョンを終了