序章
Interactive Rubyの略であるIRBは、Rubyプログラミング言語を探索し、ファイルを作成せずにコードを試すための簡単な方法です。 IRBは、 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
コンテキストで実行されることを示しています。 行番号も表示されます。
注:RubyとRVMをインストールした場合、プロンプトが少し異なって表示され、代わりにバージョン番号が表示される場合があります。
IRB session from RVM2.4.0 :001 >
このチュートリアル全体で表示されるプロンプトを表示するには、irb --prompt inf-ruby
を使用してIRBを起動します。
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
メソッドは、画面である標準出力デバイスにテキストを印刷します。 ただし、Rubyのすべてのメソッドには戻り値があるため、puts
メソッドには戻り値があります。 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コードは、サメの array を使用し、 select メソッドを使用して、名前に文字「a」を含むサメのみを返します。 このコードをIRBセッションに入力し、各行の後にENTER
を押します。
["Tiger", "Great White", "Angel"].select do |shark|
shark.include?("a")
end
IRBでは複数行のコードを入力できますが、コードが構文的に完全であると判断した場合にのみコードを実行します。 アスタリスク(*
)を使用し、最後のゼロを1に変更して別のスコープを示すことにより、IRBがまだコードを評価していないことを示すプロンプトが変化することに注意してください。
IRB sessionirb(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 sessionirb(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 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=> 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アドレスの解決に使用するサイトを切り替えることができます。
次のコードをファイルに追加して、クラスを定義します。
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=> 203.0.113.52
独自のコードをIRBセッションにロードすることにより、コードを検査し、完全なプログラムに組み込む前に独自のライブラリを操作できます。
IRBセッションでコードを操作する方法がわかったので、IRBセッションをカスタマイズする方法を見てみましょう。
IRBのカスタマイズ
.irbrc
という構成ファイルを作成して、IRBセッションをカスタマイズできます。 その後、オートコンプリート、インデント、およびコマンド履歴のサポートを追加できます。
このファイルをホームディレクトリに作成します。
- nano ~/.irbrc
まず、IRBでオートコンプリートのサポートを構成します。 これにより、TAB
キーを使用して、IRBのオブジェクト、変数名、およびメソッド名をオートコンプリートできます。
require 'irb/completion'
次に、コマンド履歴を外部ファイルに保存するためのサポートを追加します。
IRB.conf[:SAVE_HISTORY] = 1000
これを有効にすると、最後に入力した1000個のステートメントがホームディレクトリの.irb_history
ファイルに記録されます。
さらに、新しいIRBセッションを開くと、履歴が自動的に読み込まれ、Up
およびDown
矢印キーを使用してこれらのエントリ間を移動したり、CTRL+R
を使用したりできます。 ] Bashシェルの場合と同じように、逆検索を実行します。
別の履歴ファイルを指定する場合は、これを構成ファイルに追加します。
IRB.conf[:HISTORY_FILE] = '~/your_history_filename'
次に、この行を構成ファイルに追加して、自動インデントを有効にします。これは、クラス、メソッド、およびブロックを作成するときに便利です。
IRB.conf[:AUTO_INDENT] = true
構成ファイルには、追加の有効なRubyコードを含めることができます。つまり、ヘルパーメソッドを定義するか、require
を使用して追加のライブラリをロードできます。 たとえば、履歴を表示するhistory
ヘルパーをIRBセッションに追加するには、次のコードを.irbrc
に追加します。
def history
history_array = Readline::HISTORY.to_a
print history_array.join("\n")
end
IRBセッションをロードするときに、history
と入力して、IRB履歴を確認します。 かなりの量があるかもしれないので、history
コマンドを変更して、表示するのにオプションの行数が必要になるようにすることができます。 history
関数のコードを次のコードに置き換えます。このコードは、count
というオプションの引数を取り、それを使用して表示されるエントリを制限します。
# 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のさまざまなデータ型を調べることができます。