知らなくても良さそう。
情報源
環境変数
| 環境変数 | 概要 |
|---|---|
RUBYOPT |
Rubyインタプリタにデフォルトで渡すオプションを指定します。 |
RUBYPATH |
Rubyインタプリタのスクリプトファイル探索パスに加える。その優先度はPATHより上。 |
RUBYLIB |
Rubyライブラリの探索パス$:のデフォルト値の前にこの環境変数の値を付け足します。 |
RUBYSHELL |
この環境変数はmswin32版、mingw32版のrubyでのみ有効。Kernel.#systemでコマンドを実行するときに使用するシェルを指定します。この環境変数が省略されていればCOMSPECの値を使用します。 |
PATH |
Kernel.#systemなどでコマンドを実行するときに検索するパス。設定されていないときは/usr/local/bin:/usr/ucb:/usr/bin:/bin:.で検索されます。 |
RUBY_GC_* |
GC/チューニングのための環境変数 を参照。 |
RUBYPATH
テスト用rakefileの環境変数に追加すれば思い通りの相対パスにできるかと思ったが、できなかった。
rakefileをtest/ディレクトリ直下にも作って試してみた。
DIR_PJ = "#{File.dirname(File.dirname(__FILE__))}" ENV['RUBYPATH'] = "#{DIR_PJ}:#{ENV['RUBYPATH']}" ... t.test_files = Dir["**/test_*.rb"] ...
test_lib.rb
require '../src/lib.rb'
以下で実行する。
cd ./test rake
テスト用コードtest_lib.rbではテスト対象コード./src/lib.rbをロードする。このときのパスは相対パスである。基準になる位置はコマンド実行したカレントディレクトリである。今回はrakeコマンドにてテストを実行したのでそのパスとなる。rakeコマンドはカレントディレクトリ直下にあるrakefileを探して実行する。つまり./testである。それがそのままテスト用コードの相対パスの基準パスになる。
先述のコードではENV['RUBYPATH'] = ...によってプロジェクトのルートを追加した。もし本当にそこを基準に探してくれたなら、テスト用コードのrequireは./src/lib.rbでよかったはずだ。しかしそのパスで実行すると以下のようなエラーになる。
... File does not exist: ./src/lib.rb ...
RUBYPATHの説明をよくみると「-Sオプション指定時」とある。そのオプションがないどころか、rubyコマンドでなくrakeコマンドだから効果がなかったのだろう。
たしか-Sオプションはシバンが効かない環境の対策だった。使いどころはほとんどなさそう。
対象環境
- Raspbierry pi 4 Model B
- Raspberry Pi OS buster 10.0 2020-08-20 ※
- bash 5.0.3(1)-release
- Ruby 3.0.2
$ uname -a Linux raspberrypi 5.10.52-v7l+ #1441 SMP Tue Aug 3 18:11:56 BST 2021 armv7l GNU/Linux