1. ホーム
  2. スクリプト・コラム
  3. ルビートピックス

Rubyにおけるrequireの使用例

2022-02-04 17:07:45

同じディレクトリにあるファイル、例えば /usr/local/ruby/foo.rb と /usr/local/ruby/bar.rb.
foo.rbに直接記述する場合

require 'bar'


実行すると、bar.rbが見つからないというエラーが報告されます。
を実行するためです。

/home/oldsong$ ruby /usr/local/ruby/foo.rb


この場合、bar.rb は ruby インストールの lib ディレクトリと /home/oldsong/ にあるものを探します。rbファイルがある/usr/local/ruby/というディレクトリは探さないことになります。
つまり、システムrbへの参照を除いて、requireで相対パスを使うことはできないのです。

以下は、個人的な経験も合わせて、1つのandディレクトリにある全てのrbを参照する方法をいくつか紹介します。
1. ファイルの参照

例 現在のrbと同じディレクトリにあるfile_to_require.rbを参照する。
まずは3つのメソッドから

require File.join(__FILE_, '. /file_to_require').
require File.expand_path('. /file_to_require', __FILE__)
require File.dirname(__FILE__) + '/file_to_require'


File.expand_pathがRailsでよく使われるところ。
__FILE__ は現在のファイルへの絶対パスを表す定数で、例えば /home/oldsong/test.rb のようなものです。

方法4.

$LOAD_PATH.unshift(File.dirname(__FILE__))
require 'bar'


まずLOAD_PATH変数にディレクトリを追加し、その後ファイル名を直接参照できるようにします。
2、ディレクトリ内の全ファイルの参照

Rubyには、Javaのimport java.io.*がありません。
参照時にワイルドカードは使えないので、後のバージョンで追加することは可能かと思います。

例 現在のrbと同じディレクトリのlib/ファイルの下にあるすべての*.rbファイルを参照します。
方法1.

Dir[File.dirname(__FILE__) + '/lib/*.rb'].each {|file| require file }


方法2.
1つのgemで完結する

https://rubygems.org/gems/require_all