Rubyを探索するためにIRBを使用する方法

以下の文章を日本語で自然に言い換えてください。1つのオプションで構いません。

– Introduction

イントロダクション

IRB(インタラクティブ・ルビー)は、ファイルを作成することなく、Rubyプログラミング言語を探索し、コードを試すための迅速な方法です。IRBは、多くの近代的なプログラミング言語で提供されている、Read-Eval-Print Loop(REPL)というツールです。使用するには、irbの実行可能ファイルを起動し、プロンプトでRubyコードを入力します。IRBは、入力したコードを評価し、結果を表示します。

IRBは、Rubyの組み込み機能だけでなく、インストールしたライブラリやgemにもアクセスできます。さらに、IRBを設定してコマンド履歴を保存したり、コードの自動補完を有効にしたりすることもできます。

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

IRBの開始と停止

もしRubyがインストールされていれば、IRBを使えるようになります。Rubyがインストールされた任意のコンピュータで、コマンドラインインターフェースからirbというコマンドを実行することで、IRBを起動することができます。

  1. irb

 

IRBプロンプトでお出迎えされます:

IRB session

irb(main):001:0>

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

Note

注意:もしRVMでRubyをインストールしている場合、プロンプトは若干異なる可能性があります。バージョン番号が表示される代わりに、
RVM2.4.0からのIRBセッション:001>

このチュートリアル全体で表示されるプロンプトを取得するためには、irb –prompt inf-rubyでIRBを起動してください。

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

  1. 2 + 2

 

エンターキーを押すと、IRBが結果を表示します。

IRB session

=> 4

「= >」記号は、これがRuby式からの返り値であることを示しています。

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

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

IRBセッションでコードを実行する

IRBは、あなたの問題に対する良い解決策かどうかを確認するための素晴らしい方法です。Rubyではほとんどすべてが値を返し、IRBでステートメントを実行するたびに、その返り値が画面に表示されます。

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

  1. puts “Hello World”

 

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

OUTPUT

Hello 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キーを押して実行してください。

  1. birth_year = 1868

 

このステートメントの戻り値がエコーされて表示されます。

IRB session

=> 1868

変数birth_yearにはこの値が格納されていますが、Rubyのほとんどの文は値を返すため、IRBではここでも返り値が表示されます。

2つの変数を追加してください。最初に、death_yearという変数を作成してください。

  1. death_year = 1921

 

それでは、出生年から死亡年を引いて変数「age_at_death」を作成してください。

  1. age_at_death = death_year – birth_year

 

IRBは変数に値を割り当てるだけでなく、結果も表示します。

IRB session

=> 53

IRBセッションにいる場合、明示的なputsやprint文を使わなくてもかまいません。なぜなら、返り値が表示されるからです。

時には複数行にわたるコードを書きたいことがあります。IRBはこれを直感的にサポートしています。IRBは構文的に完全なコードのみを実行します。以下のRubyコードは、ネームに文字 “a” を含むネコザメだけを選択して返すために、ネコザメの配列を使用しています。このコードをIRBセッションに入力し、各行の後にENTERキーを押してください。

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

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

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を利用することができます。

ライブラリとジェムを使用する

IRBセッション内で、Rubyプログラムと同様にrequire文を使ってライブラリをインポートすることができます。これらのライブラリには、Rubyの標準ライブラリに含まれるもの、自分自身で作成したもの、またはRubygems.orgを通じて配布されるgem(Rubyライブラリ)が含まれます。

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

Rubyの標準ライブラリからNet/HTTPをインポートするためにrequireステートメントを使用します。以下のコードをIRBセッションに入力し、ENTERを押してください。

require 'net/http'

IRBは、この文が真を返すことを示しており、これはライブラリの正常な読み込みを意味します。今、icanhazip.comにリクエストして外部IPアドレスを取得するために、このコードをIRBに入力してください。

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

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

require 'httparty'

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

IRB session

LoadError: cannot load such file — httparty

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

  1. gem install httparty

 

今すぐirbを再度起動してください。

  1. irb

 

再びモジュールを読み込んでみてください。IRBセッションで、次のコードを入力してください。

require 'httparty`

今回は、IRBがtrueを表示し、ライブラリをロードできたことが分かるようになります。IRBにこのコードを入力して試してみてください。

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

画面に出力された結果を見ることができます。 (Gamen ni shutsuryoku sareta kekka o miru koto ga dekimasu.)

IRB session

=> 203.0.113.52\n

では、IRBを使って自分自身のRubyコードを探索しテストする方法を見てみましょう。

IRBに自分のコードを読み込む

IRBセッションを開始し、-rスイッチを使用すると、IRBが起動する際にロードするライブラリやジェムを指定できます。例えば、irb -r httpartyのようにすると、httpartyジェムがすでにロードされた状態でIRBセッションが起動しますので、明示的なrequire httparty文を省略することができます。

ただし、自分自身のコードを新しいセッションに読み込むためにもこれを使用することもできます。これは、それを探索したりテストしたいときに便利です。

IRBセッションを終了させるには、exitと入力するか、CTRL+Dを押して終了してください。

ip_grabber.rbという新しいRubyファイルを作成し、それにはURLを提供するとマシンの外部IPアドレスを返すgetメソッドを持つIPGrabberオブジェクトを定義します。icanhazip.comからのレスポンスを取得するためにHTTPartyライブラリを使用します。自分自身のプログラムでこのIPGrabberオブジェクトを使用することで、外部の変更からコードを保護することができます。オブジェクトを使用することで、基になるライブラリやIPアドレスを解決するために使用するサイトを変更する際に、他のコードの動作を変えずに済むようになります。

このコードをファイルに追加して、クラスを定義してください。

アイピーグラバー.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を起動して、このファイルをロードしてください。これは、ジェムや組み込みライブラリではなく、ローカルファイルなので、パスを指定する必要があります。また、ファイルの拡張子「.rb」を指定する必要もありません。

  1. irb -r ./ip_grabber

 

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

ip = IPGrabber.new
ip.get

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

IRB session

=> 203.0.113.52

自分自身のコードをIRBセッションに読み込むことで、プログラム全体に組み込む前にコードを検査し、自分自身のライブラリと作業することができます。

IRBセッションでコードを扱う方法を学んだので、IRBセッションをカスタマイズする方法を見てみましょう。

IRBのカスタマイズ

IRBセッションをカスタマイズするための設定ファイルである.irbrcを作成することができます。その後、自動補完、インデント、コマンド履歴に対応することができます。

あなたのホームディレクトリにこのファイルを作成してください。

  1. nano ~/.irbrc

 

最初に、IRBで自動補完サポートを設定します。これにより、TABキーを使用して、オブジェクト、変数名、およびメソッド名をIRBで自動補完することができます。

以下は日本語に自然な言い換えをしてください。ただし、一つのオプションだけで構いません。

「~/.irbrc」

require 'irb/completion'

次に、コマンド履歴を外部ファイルに保存するサポートを追加してください。

以下のものを日本語で自然に再表現してください。オプションは1つだけです:「~/.irbrc」
IRB.conf[:SAVE_HISTORY] = 1000

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

また、新しいIRBセッションを開く際には、履歴が自動的に読み込まれ、上下矢印キーを使用してエントリー間を移動したり、Bashシェルで行うのと同様に、逆検索を行うためにCTRL+Rを使用することができます。

もし別の履歴ファイルを指定したい場合は、設定ファイルにこれを追加してください。

~/ .irbrcを日本語で簡潔な言葉に置換する。
IRB.conf[:HISTORY_FILE] = '~/your_history_filename'

次に、クラス、メソッド、およびブロックを記述する際に便利な自動インデント機能を有効にするため、この行を設定ファイルに追加してください。

以下の文を日本語で言い換える(オプションは一つだけ必要):
~/.irbrc=> ドットアイアールビーアールシー

IRB.conf[:AUTO_INDENT] = true

設定ファイルには、追加の有効なRubyコードを含めることができます。これは、ヘルパーメソッドを定義したり、追加のライブラリをロードするためにrequireを使用したりすることができることを意味します。たとえば、IRBセッションに履歴ヘルパーを追加する場合は、.irbrcに次のコードを追加してください。

.irbrcを日本語でナイティブに言い換えてください。1つのオプションのみが必要です。

.irbrcを言い換え

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

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行だけが表示されます。

.irbrcを使用して頻繁に使用するライブラリを読み込むことができますが、読み込むライブラリが増えるたびにIRBセッションの読み込み時間が増加し、使用する際に不快に感じることも覚えておいてください。通常は、require文を使って特定のライブラリを手動で読み込む方が良い結果が得られます。

結論

IRBはRubyコードを実験する場所を提供しています。それはファイルに入れる前にプログラムの論理を確認する素晴らしい方法です。

あなたがIRBに慣れてきたので、これらのチュートリアルに従って、IRBを使用してRubyのさまざまなデータ型を探索することができます。例を実行するためにIRBを使用してください。

  • Understanding Data Types in Ruby
  • How To Work with Strings in Ruby
  • How To Work with String Methods in Ruby
  • How To Work with Arrays in Ruby
  • How To Use Array Methods in Ruby
コメントを残す 0

Your email address will not be published. Required fields are marked *