無料で使えるシステムトレードフレームワーク「Jiji」 をリリースしました!

・OANDA Trade APIを利用した、オープンソースのシステムトレードフレームワークです。
・自分だけの取引アルゴリズムで、誰でも、いますぐ、かんたんに、自動取引を開始できます。

実行しているプログラムのパスを取得する

組み込み変数「$PROGRAM_NAME」と疑似変数の「__FILE__」が使えそうです。

  • 疑似変数の「__FILE__」は現在実行しているプログラムのパスを返します。requireしたソース内で実行すると、「requireしたソースのパス」となります。
  • 組み込み変数「$PROGRAM_NAME」は、現在実行中のRubyスクリプトの名前を返します。requireしたソース内で実行してもメインプログラムのパスを返します。

ファイル構成:

├a
│ └b.rb
├additional-load-path
│ └x
│   └y.rb
└script-path.rb

script-path.rb:

# "./additional-load-path"を検索パスに追加。
$: << "./additional-load-path"

require "a/b"
require "x/y"

puts "\nroot ---"
puts __FILE__
puts $PROGRAM_NAME

a/b.rb

puts "\na/b ---"
puts __FILE__
puts $PROGRAM_NAME

additional-load-path/x/y.rb

puts "\nadditional-load-path/x/y ---"
puts __FILE__
puts $PROGRAM_NAME

出力:

a/b ---
./a/b.rb
xxx/script-path.rb

additional-load-path/x/y ---
./additional-load-path/x/y.rb
xxx/script-path.rb

root ---
xxx/script-path.rb
xxx/script-path.rb
requireしたモジュールと同じディレクトリにあるファイルを読み込む

やりたかったのはコレ。

  • requireしたモジュールから、モジュールと同じディレクトリにあるファイル(リソース的なもの)を読む。
  • モジュールの利用者は読むファイルを知らない。(内部に隠蔽して、知らなくても使えるようにしたい。)

以上より、疑似変数の「__FILE__」をつかうと実現できそうです。

# モジュールと同じディレクトリにある"test.txt" をロードする。
puts IO.read( File.dirname(__FILE__) + "/test.txt" )