Ruby入門

Rubyはちょっとした処理をするのにも向いているプログラミング言語。その学習コストも低いので初学者や教育機関にもオススメ。


    Rubyのインストール

    まずは端末を開く。

    下記のようにRubyのバージョンを確認をしてみる。rubyコマンドが使えないならRubyのインストールを。

    ruby --version
    ruby 2.0.0p598 (2014-11-13) [x86_64-linux]
    

    CentOS7の例

    CentOS7でRubyを実行・開発する環境は、ruby-develパッケージをインストールする。root権限で、

    yum install ruby-devel

    Ubuntuの例

    UbuntuでRubyを実行・開発する環境は、rubyパッケージをインストールする。

    sudo apt-get install ruby

    Rubyの実行方法

    プログラミングの作業は、「コーディング(コードを書く)→実行(プログラムを動かす)してみる」の繰り返し。

    詳しく…


    Hello, World!

    下記1行だけのファイルも立派なプログラム。putsメソッドを使って、「Hello, World!」と出力。

    puts "Hello, world!"

    コメント

    ソースコードの中にプログラムの実行に関係しないコメントを残すことができる。

    # この行はコメント
    puts "こんにちは" #から行末まではコメント、その前は実行される
    =begin
    この中もコメントなので下記は実行されない
    puts "こんばんは"
    =end

    コマンドライン引数

    rubyコマンドで実行する際、プログラムに情報を渡すことができる。これをコマンドライン引数という。引数が複数ならスペースを空けて、

    ruby ファイル.rb "引数0" "引数1" …

    そのコマンドライン引数はプログラム側では配列になっているので、次のようにインデックスは0から順番にARGV[0]ARGV[1]…というようにして参照する。

    puts ARGV[0]
    puts ARGV[1]

    メソッド

    何か処理したいときはメソッドを呼び出す。メソッドは自作できるが、基本的な機能ならば予め用意されている。

    メソッドの呼び出し

    メソッドの呼び出しは下記のようにする。()は省略できる。メソッドに渡す情報を引数という。引数が複数ある場合は,で区切る。

    メソッド名
    メソッド名(引数)
    メソッド名 引数
    メソッド名 引数1, 引数2

    メソッドの作成

    メソッドは次のようにdefendで囲って定義する。処理の部分はインデント(おススメは半角スペース2つ)すると見やすい。

    def メソッド名(引数1, 引数2, …)
      処理
    end
    # 定義
    def hello
      puts "こんにちは"
    end
    
    # 呼び出し
    hello

    putsメソッド

    putsメソッドは文字列を出力する。

    puts "Hello, world!"

    引数が複数ならそれぞれ改行しながら出力となるので、下記は1行目に「Hello」、2行目に「world!」となる。

    puts "Hello", "world!"

    printメソッド

    putsと似ているが、printメソッドは最後に改行しない。下記は1行で「HelloWorld!」と出力。

    print "Hello"
    print "World", "!"

    文字列

    文字列は"'で囲む。"(ダブルクォート)内では特殊文字を解釈するが、 '(シングルクォート)内では\'を除いて特殊文字を解釈しない。

    例えば\nは改行を意味する特殊文字であり、下記は1行目に「Hello」、改行して2行目に「world!」と出力。

    puts "Hello\nworld!"

    特殊文字の解釈をしたくない(エスケープという)場合、\を直前に付ける。

    ヒアドキュメント

    改行がたくさんあるなど長い文字列は、ヒアドキュメントを使って変数に代入するとソースコードが見やすくなる。

    変数 = <<-"EOB"
    改行、
    しまくりの、
    文字列。
    EOB

    変数の展開

    "(ダブルクォート)で囲んだ文字列中に#{変数名}という書式で変数を入れておくと、変数に代入されている文字列を結果として出力できる。これを展開という。

    name = "アリス"
    puts "こんにちは、#{name}さん"

    上記は「こんにちは、アリスさん」と出力。

    詳しく…


    数値

    数値として処理する場合は"'で囲まない。下記1行目は文字列になって「2 * 2」と出力だが、2行目は計算結果の「4」が出力される。

    puts "2 * 2"
    puts 2 * 2

    四則演算

    掛け算は*、割り算は/、剰余は%、べき乗は**を使う。下記はすべて「2」と出力。

    puts 1 + 1
    puts 3 - 1
    puts 1 * 2
    puts 4 / 2
    puts 5 % 3 # 5を3で割った余り
    puts (10 ** 2) / 50 # 10の2乗を50で割る

    モジュール

    メソッドはたくさんあり、自作もできるので名前が衝突することがある。そうなっても区別できる仕組みを名前空間といい、Rubyではモジュールがその役割。

    各モジュールに色々なメソッドが含まれており、そのメソッドを呼び出すには、

    モジュール名.メソッド名(引数)

    例えば、数学に関するMathモジュールには平方根を求めるsqrtメソッドなどが含まれている。

    Math.sqrt(100) # 100の平方根

    名前の衝突がない場合、いったんモジュールをincludeすれば、モジュール名を省略できる。

    include モジュール名
    include Math
    # モジュール名省略
    puts sqrt(100) # 10.0

    ライブラリの利用

    プログラムは、他のファイルに書かれているプログラムも利用できる。特にそれを前提としたプログラムをライブラリという。

    自作するライブラリの拡張子は.rbにする。ライブラリの利用側はrequireメソッドでファイル名を指定する。その際、拡張子.rbは省略できる。

    requireメソッド

    require "ファイル名"

    例えば下記のようなライブラリを作り、

    # ライブラリ.rb
    def hello
      puts "こんにちは"
    end

    それと同じディレクトリにプログラムを作る場合は、こうする。

    # プログラム.rb
    require "./ライブラリ" # 「./」は現在のディレクトリを指す
    hello # こんにちは

    変数

    文字列や数値など個々のデータをオブジェクトという。生成したオブジェクトを使い捨てにせず、後の方で再利用する場合には、そのオブジェクトに変数で名前を付けておく。これを「変数にオブジェクトを代入する」と表現する。

    代入

    変数名 = オブジェクト
    # 生成した数値オブジェクトをxという名前の変数に代入。
    x = 10
    # 変数を使うと何度も再利用できる
    puts(x*x) # 100

    条件式

    条件式は、例えば二つのオブジェクトを比較するなどした結果、true(比較が正しい)かfalse(比較が間違っている)の値になる式。主にif文やwhile文など、条件を判断するときに使う。

    数値や文字列が等しいか調べるのは==、異なるかは!=、数値の大小は>(大なり)、>=(以上)、<(小なり)、<=(未満)を使う。

    2 == 2 # true
    2 > 3 # false

    複数の条件をまとめて一つの条件とする場合は、&&(かつ)、||(または)、()(条件を括る)を使って条件式を追加していく。

    # 条件式1がtrueのとき、または、条件式2と条件式3が両方trueのとき、全体がtrue
    条件式1 || (条件式2 && 条件式3)

    詳しく…


    条件分岐

    if文

    条件によって処理をしたり、しなかったりするには、if文を使う。

    if 条件式1 then
      処理 # 条件式1がtrueなら実行し、if文から抜ける
    elsif 条件式2 then
      処理 # 条件式2がtrueなら実行し、if文から抜ける
    else
      処理 # どの条件式もfalseなら実行
    end

    詳しく…


    繰り返し

    何か処理を繰り返すなら、while文やtimesメソッド、eachメソッドを使う。

    while 条件式1 do
      処理
      if 条件式2
        next # 次の回の繰り返しへ(条件式1の判断へ)
      end
      if 条件式3
        break # 繰り返し全体の終了
      end
    end
    回数.times do |変数| 
      処理
    end

    詳しく…


    配列

    配列は順番に並んだオブジェクトを入れるコンテナ(容器)。次のように[](角括弧)を用いて変数に代入する。配列に含まれている個々のオブジェクトを要素という。

    変数 = [オブジェクト0, オブジェクト1, …]

    配列に含まれている要素を参照するには、インデックス(要素の番号)を使う。一番目のインデックスは0となる。

    配列名[インデックス]

    配列の要素を順次処理していくにはeachメソッドを使う。下記の変数には順番に配列の要素が代入されるので、処理中に参照できる。

    配列名.each do |変数|
      処理
    end

    詳しく…


    Rubyのハッシュ

    ハッシュはユニークなキーが付いたオブジェクトを入れるコンテナ(容器)で、次のように{}(波括弧)を用いて変数に代入する。

    変数 = {キー1 => オブジェクト1, キー2 => オブジェクト2, …}
    fruits = {"banana" => "バナナ", "apple" => "りんご", "orange" => "オレンジ"}
    puts fruits["apple"] # りんご

    キーをシンボルにしたハッシュ

    キーをシンボルにしたハッシュの場合、シンボル名の末尾に:を付けた次の書式も使える。

    変数 = {シンボル名: オブジェクト, シンボル名: オブジェクト, …}
    # どちらでもいい
    fruits = {:banana => "バナナ", :apple => "りんご", :orange => "オレンジ"}
    fruits = {banana: "バナナ", apple: "りんご", orange: "オレンジ"}
    puts fruits[:apple] # [apple:]はダメ

    詳しく…


    乱数

    乱数の生成ならrandメソッド。引数に整数を入れると、0からその数未満の整数が得られる。

    puts rand # 引数がない場合、0以上1未満の乱数
    puts rand(10) # 0から9の整数の乱数
    n = rand(10) + 1 # 1から10までの乱数
    n.times do |i|
     print "羊が", i+1, "匹…\n"
    end

    ファイル操作

    ファイル・ディレクトリの操作は、Fileクラス、Dirクラス、FileUtilsモジュールを使う。

    詳しく…