Rubyでは、組み込み変数のARGVを使うことで、コマンドラインから引数を指定し、実行を制御できるプログラムが作れます。
Rubyの用途はRuby on RailsによるWebシステムの開発だけではありません。サーバー管理で使える便利なスクリプト作成にも使えます。そしてRubyなら引数が使えるスクリプトの作成も可能です。今回は、Rubyの引数を実現するのに欠かせない、組み込み変数のARGVについて解説します。
- Rubyのスクリプトの引数は組み込み変数ARGVに格納される
- 組み込み変数ARGVは配列クラスのオブジェクト
- Rubyのスクリプトの引数の用途はバッチファイル
コマンドラインから実行するとは
元々、WindowsやLinuxのようなOSとは、コンピュータでプログラムを実行するための仕組みであり、かつてはコマンドラインで操作するのが一般的でした。今でも、Windowsにはコマンドプロンプトを使って、また、macOSやLinux系のOSではターミナルを利用して、コマンドラインからの操作が可能です。
次から、Rubyをコマンドラインから実行する方法について説明します。
Rubyの実行方法
最近は、Web学習サイトなどのGUIな環境でRubyを実行できる環境もありますが、通常、Rubyを実行するとしたら、コマンドプロンプトまたはターミナルなどのコマンドラインから実行します。
Rubyを実行した例 $ ruby --version ruby 2.7.1p83 (2020-03-31 revision a0c7c23c9c) [x86_64-linux-gnu] $
なお、Rubyをコマンドラインから実行する場合、多くのオプションを指定できますが、通常、プログラムを記述したテキストファイルを指定して、そのプログラムを実行します。
テキストファイルを指定してRubyを実行した例 $ cat argvex.rb p ARGV $ ruby argvex.rb [] $
プログラムのオプションを指定できる
先ほど、一般的なRubyのプログラムを実行する方法として、コマンドラインからrubyコマンドにファイル名を指定して実行する方法を紹介しました。さらに、指定したプログラム専用のオプションを、rubyコマンドの引数として指定することも可能です。
プログラムの引数を指定して実行した例 $ cat argvex.rb p ARGV $ ruby argvex.rb argv1 argv2 argv3 ["argv1", "argv2", "argv3"] $
プログラム用のオプションを使う
先ほどのRubyでプログラムを実行する際に、引数として指定したオプションを、プログラムの中で利用するための仕組みが、今回紹介するARGVです。
なお、引数のことを英語では、argumentと言います。また、C言語では、同じようなプログラムの引数を、その数とポインターを使ってプログラム中で利用できるようになっており、ポインターの方をargvで参照します。これは、argument vectorの略で、日本語では引数の配列です。
Rubyでは、C言語のargvをそのまま利用して、プログラム中で引数を参照する組み込み変数ARGVとしています。
Rubyを学びたい方におすすめのスクールはこちら
RubyにおけるARGVの基本
次から、Rubyのプログラムの引数を参照する変数であるARGVの基本と使い方について解説します。
ARGVは引数を格納した配列
ARGVは、Rubyでプログラムを実行した際に指定された引数を格納した配列です。なお、rubyコマンドとプログラムファイル名が除かれているので、純粋な引数のみが格納されています。
また、rubyがコマンドラインから実行された場の引数の参照方法は次のとおりです。
$ruby argvlist.rb argv1 argv2 argv3 1番目の引数は、ARGV[0]で、その値はargv1 2番目の引数は、ARGV[1]で、その値はargv2 3番目の引数は、ARGV[2]で、その値はargv3 ARGVを表示するスクリプトの例 puts "1番目の引数は、ARGV[0]で、その値は" + ARGV[0] puts "2番目の引数は、ARGV[1]で、その値は" + ARGV[1] puts "3番目の引数は、ARGV[2]で、その値は" + ARGV[2]
ARGVは配列として扱える
Rubyの引数を格納した配列は、一般的な配列を同じです。そのため、複数の引数があった場合、eachメソッドが利用できるなど、一般的な配列と同じ扱いでプログラムが書けます。
eachを用いた引数を表示する例 $cat argeach.rb ARGV.each { |arg| puts arg } $ruby argeach argv1 argv2 argv3 argv1 argv2 argv3 $
eachは、配列の各要素を評価するメソッドなので、この例では、全ての引数をブラック内のputsで表示します。
findを用いた引数の例 $cat argfind.rb mail = ARGV.find{ |arg| arg.match('mail=') } puts mail $ruby argfind mail=test log=yes sw=1 mal=test" $
findは、配列の要素を全て評価し、最初に真になった要素を返すメソッドなので。この例ではmail=を含む最初の要素を表示します。
引数を格納した配列の操作例
先ほど説明したように、Rubyのスクリプトを実行する際の引数は、ARGVという配列に格納されて、プログラム内で使用できます。さらに、配列用の多くのメソッドも利用可能です。
例えば、コマンドラインなどから使える多くのコマンドでは、引数の指定が必須であり、それを怠ると、メッセージが表示されます。そして、この機能は、配列の要素の数を数えることで実現可能です。
また、引数をチェックする場合、shiftメソッドを使って順に引数を取り出す方法もよく使われます。shitメソッドを使った例は、次の通りです。
shiftメソッドを使った例 if ATGV.length < 3 then puts "オプションが足りません" else argv1 = ARGV.shift argv2 = ARGV.shift argv3 = ARGV.shift puts argv1 puts argv2 puts argv3 end
引数付きのプログラムを実行する機会
かつて、全てのプログラムは、コマンドラインから実行されていました。しかし、今は、WindowsやMacではアイコンをクリックするだけで実行できるので、コマンドプロンプトを使う機会は無いかもしれません。
また、Linuxはターミナルで操作することがありますが、ターミナルを利用するのはサーバー管理者のみで、一般の方には馴染みが無い操作方法です。
このように、一般的にコマンドラインからプログラムを実行することはありません。では、RubyでARGVを使ったプログラムを利用する機会として、どのようなケースが考えられるのでしょうか。
バッチファイルは今でも有効
クラウドでは、多くのLinuxサーバーが稼働していますが、その多くはリモートで監視されたサーバーセンターで稼働しています。そして、リモートで監視できるように、インフラエンジニアなどによって多くのプログラムが設定されています。
なお、そのようなサーバー管理用のプログラムと採用されているのが、RubyやPythonのような作成効率の良い、スクリプトプログラムです。
このようなスクリプトファイルは、管理者がsshコマンドのような簡単な端末ソフトで接続し、サーバーに合わせたARGVの引数でまとまった処理を実行できます。
今回紹介しているARGVは、そのような管理者が手作業でやる操作を自動化する処理に向いている機能です。
決まった時刻に動作する処理
バッチファイルは、各種サーバーで決まった時刻に自動実行される処理の指定にも向いた機能です。例えば、定期的にバックアップを実行したり、溜まったキャッシュをクリアするなど、いろいろな用途で使われます。
このバッチファイルでRubyのスクリプトを活用するなら、どのサーバーでも使えるようにプログラムを作成し、ARGVで指定する引数によって制御させることも可能です。
Rubyを学びたい方におすすめのスクールはこちら
まとめ
RubyのARGVの機能は、昔、全ての操作をコマンドラインから実行していたころには、よく使われていた機能でした。今では、人がコマンドライン実行する機会が無いかもしれません。
しかし、ARGVは今でもバッチファイルなどで活用できる、便利な機能です。そして、配列と同じように扱えるので、いろいろな使い方ができます。ぜひ、ARGVの使い方をマスターし、Rubyをいろいろな用途で活用してください。
また、Rubyについてもっと詳しく学びたい方は、ポテパンキャンプの利用を検討されてはいかがでしょうか。
Rubyを学びたい方におすすめのスクールはこちら