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##

  1. Sublime Text で、ファイル > New File …
  2. テストファイルを作成したら、見つけやすい場所に保存して、コードを書き始めましょう!
  3. Set up ARGV to capture command line argumentsInside testing_argv.rb, assign ARGV to an array called input_array, which will bind the contents of ARGV to a variable.

ARGV-Example-1

ARGVは配列を作るので、input_arrayに対しては通常の配列にかけられるメソッドを何でも呼び出せるようにすることです。 例えば、puts input_array.lengthはユーザが渡した引数の数だけ戻ってきます。

また、ARGVの配列の結果をputs input_array.to_sを使って表示することができます。 完全な testing_argv.rb ファイルは次のようになります:

ARGV-Example-2

ファイルをテストするには、次のようにファイル名の後に複数の引数を付けてコマンドラインでプログラムを実行してください。 ruby testing_argv.rb these are elements in the argv array

コマンドラインは、配列に7つのアイテムがあることを伝え、次のようにコンソールにプリントアウトします。

ARGV コンソール出力例 1

Using Splat to separate the first argument from the rest##

プログラムでは、最初のコマンドライン引数をコマンドとして使用し、残りの引数は何かを実行できるテキスト列として使用したい場合があります。 これを簡単に実現するための新しい Ruby 式を紹介します。 first_arg, *the_rest = ARGV

ここで、2つの変数を同時に代入しています! カンマで区切られ、*はスプラットと呼ばれます。 スプラットはRubyのメソッド、ブロック、ソートのコードアカデミーレッスンでも似たような使い方をしましたね。 この*のおかげで、RubyはARGVfirst_argに、それ以外の引数をthe_restに代入することがわかります。 それを証明しましょう。

あなたのプログラムで、書いてください。 puts first_argputs the_rest

そして、コマンドライン内で ruby testing_argv.rb first and all the rest! を実行します。

##このテクニックの使い方##コマンドラインは、書いたプログラムにとって強力なインターフェイスとなりえます。 これらのメソッドを使用すると、ユーザーの入力をキャプチャし、それを有効に使用することができます。

たとえば、Ruby で ATM プログラムを作成した場合、コマンドライン引数を使用してメソッドを呼び出し、銀行口座を変更することができます。 最初のコマンドライン引数を取る ARGV 配列を書いて “withdraw” のようなメソッドを実行し、それ以降の引数 (おそらく “$20”) を使って、引き出す金額を指定できます。

コマンドラインからデータを取得して何かをさせるために、ARGV と splats を使う方法は無限にあります。 もし ARGV がどのように動作するかの真相を知りたければ、ここでその Ruby-doc をチェックしてください。