概要
rubyで書いたプログラムをターミナルからlsやvimのようにコマンドとして呼び出すための手順メモ。洗練されてないかもしれないのでより良い手順を知っている人がいれば教えて下さい。
説明で使用している環境
OSX, ruby 2.1.0p0
コマンドをエイリアスとして定義する
まず最初にrubyファイルを実行するコマンドを.bash_profile/bashrcなどの設定ファイルにエイリアスとして追加する。エイリアスはコマンドの別名を登録するコマンドの一種で、別名とコマンドのペアで登録する(一般にコマンドの省略を意図して使われる)。rubyのスクリプトを実行する場合なら以下のように書ける。
alias neko='ruby /Users/owl/nekoneko/cat.rb'
これでbash_profileの変更を反映させれば、ターミナルにnekoと入力するだけでcat.rbが実行される。
コード上で変更を必要とするかもしれない点
実際に実行してみるとrubyがパス関係のエラーを吐くことがある。例えば実行したrubyコード内で同じディレクトリ上にあるファイルを相対パスでrequireしていたりFile.openしていると『cannot load such file』となる。
原因の1つが『rubyファイルがあるディレクトリのファイルのつもり』で require './neko.rb' のように指定しているケース。この書き方はrubyファイルのディレクトリではなく、呼び出したターミナルのカレントディレクトリを参照する。
もしrubyファイルが置かれたディレクトリを参照してrequireやFileを使いたいなら、コード内で明示的にディレクトリを参照先やカレントディレクトリとして指定する必要がある。
$LOAD_PATH.push File.dirname(__FILE__) #requireの参照先へ追加
Dir.chdir File.dirname(__FILE__) #カレントディレクトリの移動
追記
コメントで教えて頂いた通り、require の代わりに相対パスを指定する require_relative を使うことでも解決できる。$LOAD_PATHに追加するよりもこちらの方が綺麗かも。