Help us understand the problem. What is going on with this article?

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

More than 1 year has 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でテストをスキップする方法を紹介します。

jnchito
SIer、社内SEを経て、ソニックガーデンに合流したプログラマ。 「プロを目指す人のためのRuby入門」の著者。 http://gihyo.jp/book/2017/978-4-7741-9397-7 および「Everyday Rails - RSpecによるRailsテスト入門」の翻訳者。 https://leanpub.com/everydayrailsrspec-jp
https://blog.jnito.com/
sonicgarden
「お客様に無駄遣いをさせない受託開発」と「習慣を変えるソフトウェアのサービス」に取り組んでいるソフトウェア企業
http://www.sonicgarden.jp
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
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  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
ユーザーは見つかりませんでした