Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
37
Help us understand the problem. What are the problem?

More than 3 years have passed since last update.

はじめに

この記事は書籍「プロを目指す人のためのRuby入門」に掲載できなかったトピックを著者自らが紹介するアドベントカレンダーの4日目です。
本文に出てくる章番号や項番号は書籍の中で使われている番号です。

今回は自分が書いたRubyプログラムをirb上で読み込む方法を説明します。

必要な前提知識

「プロを目指す人のためのRuby入門」の第5章まで読み終わっていること。

自分が書いたRubyプログラムをirb上で読み込む方法

「プロを目指す人のためのRuby入門」では、各章に例題があり、その例題をMinitestを使ってテスト駆動開発(TDD)で実装しています。

たとえば以下は第5章の例題で作成するプログラムとテストコードです(問題やコードの説明はサンプルページのPDFを参照)。

# lib/convert_length.rb
UNITS = { m: 1.0, ft: 3.28, in: 39.37 }
def convert_length(length, from: :m, to: :m)
  (length / UNITS[from] * UNITS[to]).round(2)
end
# test/convert_length_test.rb
require 'minitest/autorun'
require './lib/convert_length'

class ConvertLengthTest < Minitest::Test
  def test_convert_length
    assert_equal 39.37, convert_length(1, from: :m, to: :in)
    assert_equal 0.38, convert_length(15, from: :in, to: :m)
    assert_equal 10670.73, convert_length(35000, from: :ft, to: :m)
  end
end

TDDで実装していくのも楽しいのですが、完成したプログラムをirb上であれこれ引数を変えながら動かすのもまた面白いです。

自分で書いたプログラムをirb上で動かすのは難しくありません。
次のように自分が書いたコードをrequireすれば、irb内でも自作のクラスやメソッドが利用できるようになります。

$ irb
irb(main):001:0> require './lib/convert_length'
=> true
irb(main):002:0> convert_length(1, from: :m, to: :in)
=> 39.37
irb(main):003:0> convert_length(15, from: :in, to: :m)
=> 0.38
irb(main):004:0> convert_length(35000, from: :ft, to: :m)
=> 10670.73

requireで指定するパスに注意する

2.12.7項でも説明したとおり、自分で書いたプログラムを読み込むときはRubyを実行しているディレクトリからの相対パス(または絶対パス)を指定する必要があります。

パスが間違っていたり、./で書き始めていなかったりすると読み込みに失敗します。

# 相対パスの指定が間違っているケース
require './convert_length'
#=> LoadError: cannot load such file -- ./convert_length

# "./"で書き始めていないケース
require 'lib/convert_length'
#=> LoadError: cannot load such file -- lib/convert_length

プログラムを書き直したらloadする

irb上で自分が書いたプログラムを動かす場合、単純に書き直すだけだったり、再度requireしたりしても、プログラムの変更内容はirbには反映されません。

プログラムをもう一度読み込み直すときはloadメソッドを使います。

load './lib/convert_length.rb'

詳しくは「2.12.8 load」を参照してください。

次回予告

次回はMinitestでテストをスキップする方法を紹介します。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
37
Help us understand the problem. What are the problem?