質問: 環境はMacとCentOSを考えています。 `~/hoge/ruby.rb`というプログラムをターミナルから実行するには、通常`$ruby ~/hoge/ruby.rb`とする必要がありますが、 これを`$hoge -option`という感じで実行することはできますか? 可能であればどのような手順、知識が必要なのか、またそうすること自体に問題があるかどうか教えてください。
回答: rails のコマンドは rails new とか、rails generate model のように実行をします。 実は この rails のコマンドの実体は ruby スクリプトです。 $ which rails とすると、ファイル名がわかります。 そのファイル名を cat するなり、editor で開くなどしてみてください。 こんなふうになっているはずです。 以下は MacOS X に rbenv で ruby をいれている私のマシンでの場合です。 ``` $ which rails /Users/katoy/.rbenv/shims/rails $ cat /Users/katoy/.rbenv/shims/rails #!/usr/bin/env bash set -e [ -n "$RBENV_DEBUG" ] && set -x program="${0##*/}" if [ "$program" = "ruby" ]; then for arg; do case "$arg" in -e* | -- ) break ;; */* ) if [ -f "$arg" ]; then export RBENV_DIR="${arg%/*}" break fi ;; esac done fi export RBENV_ROOT="/Users/katoy/.rbenv" exec "/usr/local/Cellar/rbenv/0.4.0/libexec/rbenv" exec "$program" "$@" ``` こんなふうにして、ruby プログラムを通常のコマンドのように実行できるようにしているのです。 rails 以外にも、このような方法で、 ruby スクリプトを 通常のコマンドのように実行できるようにしているものはたくさんあります。 (rake, rspec, bundle, coffee-script, ...) もし本格的に ruby でコマンドラインアプリケーションを作るなら、次の書籍がお勧めです。 Build Awesome Command-Line Applications in Ruby 2