- 1. 概要
- 2. 実行中のモジュールのパスを調べる
- 3. 実行中のモジュールに実行時のパスを追加する
1. 概要
もともとはパスを調べたり、インクルードパスを追加する機能が欲しかっただけ・・・。
結局は、「File」クラスというものを使うのでした。
一連のモジュールを作成しているときに、定義ファイルを読みこむ仕組みは作成したものの。
実行中のモジュールのパスに置いておくようにしたのですが、実行するたびにそのモジュールのパスまで移動しなければならないのが面倒くさい。
調べてみるとできそうだったのでやってみます。
本項は、以下のサイトを参考にさせていただきました。
「class File (Ruby 2.5.0)」
2. 実行中のモジュールのパスを調べる
実行時のモジュール名は $0 でとれるわけだな。
diranme メソッドの方が、わたしの目的に合っている。
てなわけで
/home/hogehoge/lang/ruby/file/expand_path.rb
というファイル名の下記のようなソースを書いて
#!/usr/bin/env ruby
puts("#{File.expand_path($0)}")
puts("#{File.dirname($0)}")
実行すると下記の結果が得られます
/home/hogehoge/lang/ruby/file/expand_path.rb
/home/hogehoge/lang/ruby/file
3. 実行中のモジュールに実行時のパスを追加する
と、前項までやってみましたが・・・。
あんまり見栄えがよろしくないなぁ・・・と。
で「Ruby - Ruby グローバル変数$LOAD_PATHにパスを追加したい|teratail」を読んで、実行時のパスを通すようにしてみました。
$LOAD_PATH という ruby の実行環境パスがあってそれに追加してやればいいらしい。
/home/hogehoge/lang/ruby/file/path.rb
というファイル名の下記のようなソースを書いて
#!/usr/bin/env ruby
puts("使用前")
puts("#{$LOAD_PATH}")
$LOAD_PATH << File.dirname(File.expand_path(__FILE__))
puts("使用後")
puts("#{$LOAD_PATH}")
実行すると下記の結果が得られます
使用前
["/usr/local/lib/ruby/site_ruby/3.3", "/usr/local/lib/ruby/site_ruby/3.3/amd64-freebsd14", "/usr/local/lib/ruby/site_ruby", "/usr/local/lib/ruby/vendor_ruby/3.3", "/usr/local/lib/ruby/vendor_ruby/3.3/amd64-freebsd14", "/usr/local/lib/ruby/vendor_ruby", "/usr/local/lib/ruby/3.3", "/usr/local/lib/ruby/3.3/amd64-freebsd14"]
使用後
["/usr/local/lib/ruby/site_ruby/3.3", "/usr/local/lib/ruby/site_ruby/3.3/amd64-freebsd14", "/usr/local/lib/ruby/site_ruby", "/usr/local/lib/ruby/vendor_ruby/3.3", "/usr/local/lib/ruby/vendor_ruby/3.3/amd64-freebsd14", "/usr/local/lib/ruby/vendor_ruby", "/usr/local/lib/ruby/3.3", "/usr/local/lib/ruby/3.3/amd64-freebsd14", "/home/hogehoge/lang/ruby/file"]
|