基本的なことかもしれないけれども、基本すらできないので、Rubyのrequireについてしらべたことをまとめ。

requireとは

requireとは、ロードパスからファイルを探してきて自分のコードに取り込む仕組み。

requireの他にも、loadというものもある。両者の違いは別記事で以前まとめた。

たとえば、同一ディレクトリにあるhogehogeを自分のコードに取り込みたいときは、以下のようにつかう。

# requireを使う場合
requier './hogehoge'

# require_relativeを使う場合
require_relative 'hogehoge'

requireは、LOAD_PATHが通ったところをロードするため、カレントディレクトリのファイルをロードするためには、ドットをうつ。

require_relative相対パスでパスを指定できる。

余談で、rspecは実行時にlibとspecのディレクトリがロードパスに追加される。

相対パスがかっこ悪いのでなんとかする

個人的には、相対パスがかっこ悪いので、何とかしたい。

コード中でLOAD_PATHにカレントディレクトリを追加

以下の処理を書くと、コード実行時にLOAD_PATHに自分のディレクトリを追加できる。

# 簡易版
$:.unshift File.dirname(__FILE__)

# 自分でパスを追加したい場合
$:.unshift(File.dirname(File.expand_path(__FILE__)) + '起動したプログラムからの相対パス')

ruby起動時にLOAD_PATHにディレクトリを追加

ruby -I (ディレクトリ)でもパスを追加できる。起動用のシェルやbatを作成するといいかも。

#!/bin/bash

current_dir=`dirname $0`
cd ${current_dir}

ruby -I ./lib  $@