04 Mar 2014, 13:20

Rubyにおけるロードパス(require)のtips

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

requireとは

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

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

<div class="outline-text-3" id="text-1-1">
  <p>
    たとえば、同一ディレクトリにあるhogehogeを自分のコードに取り込みたいときは、以下のようにつかう。
  </p>

  <pre><code>

requireを使う場合

requier ‘./hogehoge’

require_relativeを使う場合

require_relative ‘hogehoge’

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

  <p>
    require_relative相対パスでパスを指定できる。
  </p>

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

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

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

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

<div class="outline-text-3" id="text-2-1">
  <p>
    以下の処理を書くと、コード実行時にLOAD_PATHに自分のディレクトリを追加できる。
  </p>

  <pre><code>

簡易版

$:.unshift File.dirname(FILE)

自分でパスを追加したい場合

$:.unshift(File.dirname(File.expand_path(FILE)) + ‘起動したプログラムからの相対パス’)

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

<div class="outline-text-3" id="text-2-2">
  <p>
    ruby -I (ディレクトリ)でもパスを追加できる。起動用のシェルやbatを作成するといいかも。
  </p>

  <pre><code>

#!/bin/bash

current_dir=dirname $0 cd ${current_dir}

ruby -I ./lib $@