Ruby勉強

インターネットの企画職な人がプログラミングを勉強するブログ

Rubyのコマンドラインオプション

MacのTerminalでシェル(bash)実行

-C

指定したディレクトリでスクリプトを実行

# hoge.rb
puts("あなたの名前は何ですか?")
$ ruby -C ~/Documents/test/ hoge.rb

-e

Rubyスクリプトを実行する

$ ruby -e 'puts "Hello, Ruby!"' #=> Hello, Ruby!

複数のオプションを続けて実行する場合、一行に記載可能

$ ruby -e 'puts "Ruby"' -e 'puts "World"' #=> Ruby\nWorld

-c

文法チェック。例えばif文のendをちゃんと記載していなかったりすると

$ ruby -c 'Documents/hoge.rb'
Documents/hoge.rb:3: syntax error, unexpected end-of-input

-n

while gets
rubyスクリプト
end

のような、入力受け付けと実行を繰り返すようなイメージ。

読み込みたいrubyプログラムをファイルで用意します

# hoge.rb
puts "#{$_.strip}の天ぷらつくりますね!"
puts
puts "食べたい食材を入力してください"
$ ruby -n 'Documents/hoge.rb'
かぼちゃ
かぼちゃの天ぷらつくりますね!

食べたい食材を入力してください
さつまいも
さつまいもの天ぷらつくりますね!

食べたい食材を入力してください

while ~ endはイメージなだけなので 手元の検証ではbreakなどはできなかった

-p

-nと同じだが、実行後最後に"$_" (getsで得た入力値)を出力

-I

大文字のアイ。読み込みパスを追加できる。 組み込み変数 $: で確認できる

現状の読み込みパス

$ ruby -e 'puts $:'
/usr/local/Cellar/rbenv/1.0.0/rbenv.d/exec/gem-rehash
/Users/anon_user/.rbenv/versions/2.1.5/lib/ruby/site_ruby/2.1.0
/Users/anon_user/.rbenv/versions/2.1.5/lib/ruby/site_ruby/2.1.0/x86_64-darwin14.0
/Users/anon_user/.rbenv/versions/2.1.5/lib/ruby/site_ruby
/Users/anon_user/.rbenv/versions/2.1.5/lib/ruby/vendor_ruby/2.1.0
/Users/anon_user/.rbenv/versions/2.1.5/lib/ruby/vendor_ruby/2.1.0/x86_64-darwin14.0
/Users/anon_user/.rbenv/versions/2.1.5/lib/ruby/vendor_ruby
/Users/anon_user/.rbenv/versions/2.1.5/lib/ruby/2.1.0
/Users/anon_user/.rbenv/versions/2.1.5/lib/ruby/2.1.0/x86_64-darwin14.0

ロードパスを追加し、パスを出力

$ ruby -I '/Users/anon_user/Documents/test' -e 'puts $:'
/Users/anon_user/Documents/test
/usr/local/Cellar/rbenv/1.0.0/rbenv.d/exec/gem-rehash
/Users/anon_user/.rbenv/versions/2.1.5/lib/ruby/site_ruby/2.1.0
/Users/anon_user/.rbenv/versions/2.1.5/lib/ruby/site_ruby/2.1.0/x86_64-darwin14.0
/Users/anon_user/.rbenv/versions/2.1.5/lib/ruby/site_ruby
...

-r

該当するライブラリやファイルをrequireする

ランダム文字列を吐くためSecureRandomを読み込み場合の例

$ ruby -r 'SecureRandom' -e 'puts SecureRandom.hex'
f360e9d82b344812f6502c5a48e65212

-v

バージョンを出力、冗長モード(警告などを逐一出力すること)をtrueにする

-version

バージョンを出力

-verbose

冗長モード(警告などを逐一出力すること)をtrueにする

-W0

冗長モードをnilとする。警告一切なし

-W1

冗長モードをfalseとする。重要な警告のみ出力(デフォルト)

-W2

冗長モードをtrueとする。警告出力

重要ではない警告の場合W2で初めて吐かれる例

$ ruby -W0 -e '1/0'
-e:1:in `/': divided by 0 (ZeroDivisionError)
    from -e:1:in `<main>'
$ ruby -W1 -e '1/0'
-e:1:in `/': divided by 0 (ZeroDivisionError)
    from -e:1:in `<main>'
$ ruby -W2 -e '1/0'
-e:1: warning: possibly useless use of / in void context
-e:1:in `/': divided by 0 (ZeroDivisionError)
    from -e:1:in `<main>'

重要な警告の場合W1で吐かれる例

$ ruby -W0 -e 'A=1; A=2'
$ ruby -W1 -e 'A=1; A=2'
-e:1: warning: already initialized constant A
-e:1: warning: previous definition of A was here
$ ruby -W2 -e 'A=1; A=2'
-e:1: warning: already initialized constant A
-e:1: warning: previous definition of A was here