スライドショー

【Ruby入門】引数の使い方まとめ【コマンドライン オプション】

こんにちは! フリーエンジニアの長瀬です。

Rubyを使ったプログラミングをしていて、「引数の種類が多すぎて分からない!」「そもそもどんな引数があるのか分からないので知りたい!」そんなことを思った経験はないでしょうか?

今回はそんなRubyの引数に関する疑問に答えていきます。

この記事では、rubyの引数について

・ 普通の引数
・ 括弧なしの引数
・ デフォルト引数
・ キーワード引数
・ 可変長引数
・ オプション引数
・ コマンドライン引数
・ ブロック引数

という基本的な内容から、

・ コマンドラインにオプションを作成する
・ -h、–-helpオプションを使って、定義されているオプションを確認する
・ コマンドラインのオプションに引数を渡す

といった応用的な内容についても解説していきます。

Rubyにおける引数

普通の引数

一番よく使用される引数です。何個でも付けることができますが、引数の数が多過ぎるとソースコードが読みにくくなるため、書き方については考える必要があります。

ハッシュ配列を引数として渡すときも、変換の必要はありません。

以下、サンプルコードです。

class Hoge
  def self.foo(msg)
    p msg
  end
end

Hoge.foo('hoge')

[実行結果]

"hoge"

括弧なしの引数

普通の引数から括弧を取り除いた形です。p, putsなどによる出力、アクセサ指定、returnなどの時は括弧を省略することが推奨され、自分で作成したメソッドの場合は括弧を省略せずに書くことが推奨されています。

また、Railsではviewのメソッド(link_to, form_forなど)で括弧を省略するのが推奨されています。

以下のサンプルコードのように、メソッド呼び出し時に括弧を省略することができます。

class Hoge
  def self.foo(msg)
    p msg
  end
end
Hoge.foo 'hoge'

[実行結果]

"hoge"

デフォルト引数

デフォルト引数を使うと、引数が無かった場合、あらかじめ設定された値を入れることができます。デフォルト引数は、引数が空になると困る時に設定します。

また、デフォルト引数を複数持つ場合はハッシュを引数として渡すのがよいでしょう。

以下、サンプルコードです。

class Hoge
  def self.piyo(msg='fuga')
    p msg
  end
end

Hoge.piyo
Hoge.piyo('fugafuga')

[実行結果]

"fuga"
"fugafuga"

引数なしでHoge.piyoメソッドを呼び出したとき、デフォルト引数の「fuga」が出力されています。

キーワード引数

キーワード引数を使うと、引数をハッシュで渡すことができます。ハッシュなので、順番を気にせず渡すことができるというメリットがあります。1つだけ渡すよりは複数渡すときに、よりメリットを感じやすいでしょう。

class Hoge
  def self.piyo(msg: 'hello', name: 'Yamada')
    p "#{msg}, #{name}"
  end
end

Hoge.piyo
Hoge.piyo(msg: 'Hi', name: 'Sato')
Hoge.piyo( name: 'Sato', msg: 'Hi')

[実行結果]

"hello, Yamada"
"Hi, Sato"
"Hi, Sato"

msgとnameの順番を入れ替えても問題なく実行することができています。

可変長引数

可変長引数は、引数が何個渡るか不明な場合に指定します。渡した引数は配列で格納されます。

以下、サンプルコードです。

class Hoge
  def self.piyo(*msg)
    p msg
  end
end

Hoge.piyo('fuga')
Hoge.piyo('huga','hugahuga')
Hoge.piyo('a','b','c','d','e')

["fuga"]
["huga", "hugahuga"]
["a", "b", "c", "d", "e"]

「*」を付けることで引数を複数個設定することができます。

[実行結果]

["fuga"]
["huga", "hugahuga"]
["a", "b", "c", "d", "e"]

オプション引数

オプション引数は引数の数、名前に関係なくハッシュで引数を渡すことができる仕組みです。渡す引数の数が分からない時に便利です。

「*」を2つ付けるとオプション引数になります。オプション引数はハッシュとして受け取られます。

class Hoge
  def self.piyo(**msg)
    p msg
  end
end

Hoge.piyo(msg: 'fuga')
Hoge.piyo(msg: 'huga', name: 'hugahuga')

[実行結果]

{:msg=>"fuga"}
{:msg=>"huga", :name=>"hugahuga"}

コマンドライン引数

コマンドライン引数は、ターミナルから実行時に引数を読み込むことができる仕組みです。
プログラム内のコマンドライン引数は以下の変数に代入されます。
$0:コマンド名
ARGV[引数番号]:コマンドに渡した引数名

以下のサンプルコードは、実行したプログラムのファイル名とコマンドライン引数を出力するものです。

puts "$0:#{$0}"
ARGV.each_with_index do |arg, i|
    puts "ARGV[#{i}]:#{arg}"
end

実行例

$ ruby sample1.rb hoge foo

[実行結果]

$0: Sample1.rb
ARGV[0]:hoge
ARGV[1]:foo

ブロック引数

ブロック引数を使うと、ブロックを引数で渡すことができます。yieldと同じ意味で、どちらかというとyieldの方がよく使用されます。

class Hoge
  def self.piyo(&block)
    block.call
  end
end

Hoge.piyo{ p 'fuga' }

[実行結果]

"fuga"

また、yieldを使って書き直すと

class Hoge
  def self.piyo
    yield
  end
end

Hoge.piyo{ p 'fuga' }

[実行結果]

"fuga"

このようにyieldを使って書き換えても同じ結果になります。

詳しくはこちらのyieldの記事を一読することをおすすめします。

【Ruby入門】yieldの使い方まとめ
更新日 : 2019年4月24日

コマンドラインでオプションを設定する(optparse)

コマンドラインにオプションを作成する

optparseというライブラリーを使えば、簡単にコマンドライン引数にオプションを設定することできます。

実際に自分で作ってみます。

今回は-oと-bというオプションを設定してみます。(オプションは自由に作成できます)
sample.rbという名前で任意のディレクトリに保存します。

[sample.rbの内容]

require 'optparse'

op = OptionParser.new
op.on('-は','--hello','puts hello'){puts 'Hello, world'}
op.on('-ぐ','--goodbye','puts goodbye '){puts 'Goodbye'}
op.parse(ARGV)

このように、optparseをまず始めにrequireします。

そしてOptionParser.newでoptparseのインスタンスを作成してから、onというインタンスメソッドでオプションを設定します。

onの引数にはハイフン+(一文字)で省略形を設定できて、ハイフン+(複数文字)で省略形でないオプション名をつけることができます。

オプション名は複数つけることができて、順番は問いません。

また、最後の引数にはそのオプションの説明を設定してください。(今回はputs helloが説明の部分です)

ただ、-hや--helpはoptparseが読み込んだ時点でデフォルトで設定されているコマンドなのでこの名前のオプション名はつけないようにしましょう。

では、sample.rbをオプション付きで実行してみましょう。
ターミナルや、コマンドプロンプトを開いて次のsample.rbを指定してオプションを渡します。

ruby sample.rb -は

[実行結果]

Hello, world"
ruby sample.rb -は --goodbye

[実行結果]

Hello, world
Goodbye

このように、複数のオプションも同時に指定することができます。

-h、--helpオプションを使って、定義されているオプションを確認する

このデフォルトで設定されている-h--helpオプションを使えば、現在どんなオプションが設定されているのか確認できます。

試しに確認してみましょう。
ターミナルや、コマンドプロンプトを開いて次のsample.rbを指定して-hを指定してみましょう。

ruby sample.rb --help

[実行結果]

 -は, --hello                      puts hello
-ぐ, --goodbye                puts goodbye

このように、定義されているオプションとその説明を確認できました。

コマンドラインのオプションに引数を渡す

オプションに引数を設定することも簡単にできます。

さきほどのコードを少し修正します。

require 'optparse'

op = OptionParser.new
op.on('-は','--hello ARG','puts hello'){|a| puts "引数は#{a}です"}
op.on('-ぐ','--goodbye ARG','puts goodbye '){|a| puts "Goodbye,#{a}"}
op.parse(ARGV)

このように、ARGなどの任意の文字をオプションの後ろに設定すると、引数を受け取れる状態になります。

ターミナルや、コマンドプロンプトを開いて次のsample.rbにオプションとともに引数を指定してみましょう。

ruby sample.rb -は 100
ruby sample.rb -ぐ Nagase

[実行結果]

引数は100です
Goodbye,Nagase

このように、オプションに引数に渡せることを確認できました。

まとめ

いかがでしたでしょうか?

今回は、たくさん種類があるRubyの引数についてまとめました。

多種多様な引数がありますが、それぞれの特徴や用途をしっかりと理解しておけば怖がる必要はありません。

引数はメソッドの基礎でもありますから、きちんと理解を深めましょう。

また、コマンドラインにオブションを設定できるoptparseは便利ですね。

知っていると応用の幅が広がります。

もし引数について忘れてしまったらこの記事を確認してくださいね!

LINEで送る
Pocket

ITエンジニアへ転職したい方におすすめ

自分を評価してくれる企業に転職して年収を上げたい! 自分のスキルにあった独自案件を知りたい!
エンジニアは今もっとも注目されている職業の1つ。エンジニアになって年収を増やしたい方や、あなたのスキルに見合った企業へ転職したいエンジニアの方も多いですよね。

しかし、大手の転職媒体は扱う求人数が多くても、誰もが登録しているので競争率もかなり高くなっています。そのため、あなたの条件に見合った企業を見つけても転職するためには、相応の努力とスキルが必要となります。

こういった媒体では、未経験からエンジニアを目指す方やエンジニア歴2〜3年で転職を考えている方にとって、最適な転職環境とはいえません。

そこでオススメしたいのが、未経験者や若手エンジニア向けの独自案件を多く掲載している「侍ワークス」です。

侍ワークスは、独自案件を多く掲載しているだけでなく、

・応募から就業まで一貫したサポート

・就業後もアフターフォロー

といった経験の浅い方や初めてエンジニアを目指す方にも安心のフォロー体制が整っています。もちろん登録は完全無料!しかも案件を見るだけなら登録も不要です。

まずは、お気軽にどんな求人があるか見てみてください。あなたにピッタリの企業がきっと見つかりますよ! 侍ワークスの求人情報を見る

書いた人

長瀬来

長瀬来

Unityを使ったiOSアプリのリリース、フリマサイト運営の経験があります。

経験した言語はC、C#、Javascript、R、Python、Ruby、PHPなど

言語が好きで、英語や中国、ドイツ語を勉強しました。
将来的には海外で生活したいです。

現在はRuby on Rails5やCocos2dxの勉強を主にしています。

ライターとしては
できるだけ初心者にわかりやすい文章になるように心がけています。

趣味は語学、読書です。