pandazx's blog

データ分析など雑多な技術ブログ

rubyで別ディレクトリのscriptをrequire

作ったスクリプトが増えてくると、昔、作ったスクリプトを使いまわしたいことがあると思います。

ただ、そのスクリプトAが同ディレクトリの別のスクリプトBをrequireしていると、他のディレクトリからスクリプトAをrequireすると パスが違うのでエラーになります。

スクリプトをコピーして持って来れば、実行はできますが、同一ファイルが散在することになるので、あまりやりたくありません。 (その後、更新があるとバージョン違いが存在して、カオスになります)

この場合、以下のようにすれば解決できます。

current_dir = Dir::pwd
Dir.chdir "../other"
require './script_A.rb'
Dir.chdir current_dir

これはrequireで独自スクリプトをrequireしてきてしまった時の話で、独自スクリプトの場合は必ず、require_relativeを使うようにしておけば、この問題は発生しません。後から、何とかしたい時用です。 (追記:何とかしたいと言っても、requireをrequire_relativeに変えるだけなので、そっちの方がいいと思いますが。。。)

ちなみに、ささたつさんのブログの方が、requireの動きについて、もっとちゃんと書いてあります。 requireとrequire_relativeの違いとは? - (゚∀゚)o彡 sasata299's blog