Ruby(ルビー)。 ARGVによるコマンドライン引数
背景
Rubyではメソッドに引数を渡すのと同じように、プログラム全体にも引数を渡すことができます。 これはまさにコマンドライン引数が行うことです。 Ruby プログラムを実行するたびに、異なるコマンドライン引数を送り、異なる結果を得ることができます。
なぜ学ぶのか##
Putting the Form in Formatter というタイトルの Ruby のレッスンで、gets.chomp
を使って Ruby プログラムにユーザーの入力を取り込むことができました。 コマンドライン引数を使用すると、Ruby のツールベルトに新しいツールが追加され、選択した場合にユーザーの入力をプログラムに取り込むために使用できます。
Using Command Line Arguments##
Ruby はコマンドライン引数を ARGV
という特別な配列で捕捉します。 Rubyのプログラム中に書くと、ARGV
は次のようなコマンドライン・コマンドを受け取り、ruby testing_argv.rb these are elements in the argv array
次のような配列を作成します。
さぁ、やってみましょう!
Trying out ARGV##
- Sublime Text で、ファイル > New File …
- テストファイルを作成したら、見つけやすい場所に保存して、コードを書き始めましょう!
- Set up
ARGV
to capture command line argumentsInsidetesting_argv.rb
, assignARGV
to an array calledinput_array
, which will bind the contents ofARGV
to a variable.
ARGV
は配列を作るので、input_array
に対しては通常の配列にかけられるメソッドを何でも呼び出せるようにすることです。 例えば、puts input_array.length
はユーザが渡した引数の数だけ戻ってきます。
また、ARGV
の配列の結果をputs input_array.to_s
を使って表示することができます。 完全な testing_argv.rb
ファイルは次のようになります:
ファイルをテストするには、次のようにファイル名の後に複数の引数を付けてコマンドラインでプログラムを実行してください。 ruby testing_argv.rb these are elements in the argv array
コマンドラインは、配列に7つのアイテムがあることを伝え、次のようにコンソールにプリントアウトします。
Using Splat to separate the first argument from the rest##
プログラムでは、最初のコマンドライン引数をコマンドとして使用し、残りの引数は何かを実行できるテキスト列として使用したい場合があります。 これを簡単に実現するための新しい Ruby 式を紹介します。 first_arg, *the_rest = ARGV
ここで、2つの変数を同時に代入しています! カンマで区切られ、*
はスプラットと呼ばれます。 スプラットはRubyのメソッド、ブロック、ソートのコードアカデミーレッスンでも似たような使い方をしましたね。 この*
のおかげで、RubyはARGV
をfirst_arg
に、それ以外の引数をthe_restに代入することがわかります。 それを証明しましょう。
あなたのプログラムで、書いてください。 puts first_arg
puts the_rest
そして、コマンドライン内で ruby testing_argv.rb first and all the rest!
を実行します。
##このテクニックの使い方##コマンドラインは、書いたプログラムにとって強力なインターフェイスとなりえます。 これらのメソッドを使用すると、ユーザーの入力をキャプチャし、それを有効に使用することができます。
たとえば、Ruby で ATM プログラムを作成した場合、コマンドライン引数を使用してメソッドを呼び出し、銀行口座を変更することができます。 最初のコマンドライン引数を取る ARGV 配列を書いて “withdraw” のようなメソッドを実行し、それ以降の引数 (おそらく “$20”) を使って、引き出す金額を指定できます。
コマンドラインからデータを取得して何かをさせるために、ARGV と splats を使う方法は無限にあります。 もし ARGV がどのように動作するかの真相を知りたければ、ここでその Ruby-doc をチェックしてください。