10-3-3 より実践的なRubyの書き方を学ぼう

変数ARGV

変数ARGVとは、コマンドライン上でプログラム実行時に引数を指定することによって、プログラム内で引数の値を利用するための仕組みです。

ARGVには、引数に指定した値が半角スペース区切りで配列として代入されます。

ruby プログラム名 引数1 引数2...のようにすると、引数1ARGV[0]に、引数2ARGV[1]に代入されます。

前ページ「10-3-2 ファイルを読み込んで正規表現で置換して別のファイルに書き出そう」の例では、インプットファイルを1つ目の引数に、アウトプットファイル名を2つ目の引数に指定しているので、プログラム内でインプットファイル名を取得するにはARGV[0]を、アウトプットファイル名を取得するにはARGV[1]を使用しています。

配列の要素を変数にまとめて代入する方法

前ページ「10-3-2 ファイルを読み込んで正規表現で置換して別のファイルに書き出そう」のプログラムで、name, sex_code, tel = content.split(',')という記述があります。

contentはCSVファイルの1行のデータが入っており、カンマでsplitした右辺は氏名・性別コード・携帯電話番号の3つのデータの配列として評価されます。

この配列の各要素を順番にまとめて代入しているのが左辺です。

nameにはcontent.split(',')[0]が、sex_codeにはcontent.split(',')[1]が、telにはcontent.split(',')[2]が、それぞれ代入されます。

メソッドチェーン

前ページ「10-3-2 ファイルを読み込んで正規表現で置換して別のファイルに書き出そう」のプログラムで、contents.map do 〜 end.join("\n")とする記述があります。

mapメソッドの後に、さらにドット(.)をつないでjoinメソッドを使用しています。"\n"は特殊な文字列で改行を表しています。

このように、メソッドをドットで数珠つなぎのようにして使うことをメソッドチェーンと呼びます。

Rubyはプログラムを書いていて気持ちの良いプログラミング言語だと言われることが多いのですが、このようにメソッドチェーンを利用してまるで人間が読んで違和感のない英語を記述しているかのようにプログラミングできる特徴がその理由の1つと言えます。

プログラミングの試行錯誤

プログラミングするにあたり、処理のかたまりをクラスやメソッドにどのようにして実装するか?ということをあらかじめ考えることを設計と呼びます。

最適なプログラムの設計を考えることは簡単ではなく、一朝一夕で最適な設計ができる訳ではありません。

前ページ「10-3-2 ファイルを読み込んで正規表現で置換して別のファイルに書き出そう」では、クラスやメソッドの設計をあらかじめ考えて大枠から実装を行っています。

最初から適切な設計ができるとは限らないので、実際にはどういう設計が良いのか、手を動かしながら変えていく、試行錯誤が必要といえるでしょう。

より実践的なRubyの書き方のまとめ

  • 変数ARGVを使うとコマンドライン引数を取得してプログラム内部で使用できる
  • 配列の要素を変数にまとめて代入することができる
  • メソッドチェーンで英語を書くようにプログラミングできるのがRubyの大きな特徴といえる