Ruby TIPS
Rubyとは? ― オブジェクト指向のスクリプト言語
Rubyとは何か。入門者向けに、その概要と特徴を紹介し、基本的な文法を使った簡単なコード例を示す。
Ruby(ルビー)をひと言で説明すると、「オブジェクト指向プログラミングを実現できるスクリプト言語」ということになる。まつもとゆきひろ(通称:Matz)氏により1993年から開発が開始され、1995年に公式に発表されたRuby。すでに20年以上の歴史があるが、中でも「Ruby on Rails」(RoR、Rails)というWebアプリケーションフレームワークのバージョン1.0が2005年に登場したことにより、とりわけWeb開発者の間で大人気となり、現在ではTIOBE Index(プログラミング言語ランキング)で10位以内にランクインするほど人気を博している。
Rubyがエンジニアに愛される理由の一つが、エンジニアフレンドリーな言語設計であるという点だ。Ruby言語はJavaやC#のようなクラスベースのオブジェクト指向を採用しており、クラス/継承/メソッドといったオブジェクト指向プログラミングの便利な特徴を使って効率的にプログラミングができる一方で、一般的なオブジェクト指向言語だと「わずらわしい」と感じられるかっこの多さや回りくどい記述方法などがRubyでは軽減されている。そのため、プログラミング内容そのものに意識を集中させられるようになり、エンジニアは気持ちよくコードを書いていける。この状態を「Ruby=楽しい」と表現する、コアなRuby開発者は少なくない。
まずは、Rubyがどんなものなのか、少しだけ基本的なコードを見てみよう。その後でRubyの特徴をまとめる。
Ruby言語のコード例
# コメントはこんな感じで書ける
num = 22 # 数字
str = "abc" # 文字列
ary = [100, 200, 300] # 配列
p num + str.length + ary[2] #=> 325
p "#{str}def" #=> "abcdef"
3.times do
print "." #=> ...
end
# メソッド
def sum (x, y) # 「(」「)」は省略可
return x + y # 「return」は省略可
end
if num == 22
p sum(num, 12) #=> 34
end
# クラス定義
class Sample
attr_reader :name # プロパティ定義
def initialize(name) # コンストラクター定義
@name = name # プロパティに代入
end
def say # メソッド定義
p "Hello #{@name}!" # 「#{}」は文字列内での変数展開
end
end
messenger = Sample.new("Ruby") # オブジェクト生成
messenger.say #=> "Hello Ruby!"
|
Rubyの特徴
Rubyの特徴を以下に簡単にまとめよう。
オブジェクト指向言語:
クラス、継承、メソッドなどの基本的なオブジェクト指向言語の機能を有する。整数といったデータ型を含めて、全てをオブジェクトとして扱う。もちろんガベージコレクション機能もあり、メモリは自動的に管理される。
スクリプト言語:
Rubyのコードは、事前にコンパイルしてプログラムを生成する必要がなく、インタプリターにより動的に解釈・実行される。
シンプルかつマルチパラダイムな文法:
代表的な言語仕様の一つに動的型付けがあり、つまり変数の型がなく、どのような型のデータも変数に格納できる。また、宣言なしに変数を使用できる。Rubyはこのような言語仕様に基づきシンプルに記述できる一方で、各種プログラミング言語から良い面を取り入れており、関数型や手続き型のプログラミングなどを織り交ぜたマルチパラダイムなコードを記述できる。なお、Rubyの言語仕様は、2011年3月にJIS規格となり、2012年3月にはISO/IEC 30170として国際規格にも承認されている。
強力な文字列操作と正規表現機能:
正規表現や文字列操作は、Rubyが得意とするところだ。そのため、Web上のデータを収集・加工するWebスクレイピングでRubyが活用されることも多い。
巨大なエコシステム:
(執筆時点で)7000以上のライブラリ/フレームワークが、「RubyGems」という管理システムを使って利用できる。これを活用することで、効率的に開発を進めることができる。
Ruby on Rails
Rubyには、Webエンジニアに大人気のフレームワークが存在し、これを利用できることも魅力の一つだ。
Puppet/Chef
Rubyは、DevOpsフレームワーク向けのプログラミング言語としても人気がある。
マルチプラットフォーム対応:
Mac OS Xだけでなく、WindowsやLinux/UNIX上で動作し、コードも基本的にそのまま各OSに持っていける。ただし「Windowsには弱い」と評される場合もある。
複数のインタプリター実装:
Ruby言語処理系となるインタプリターにはいくつかの実装がある。代表的なものは以下の通り。
- Matz's Ruby Interpreter(MRI): C言語で記述された公式実装で、Ruby独自の仮想マシン(バージョン1.9からはYARV)を使用する。CRubyとも呼ばれる。通常のRubyプログラミングではこれを使う。
- JRuby: Javaによる実装で、Java仮想マシンを使用する。メジャーな代替の実装。Javaのプログラムと連携する場合に便利。
- Rubinius: Ruby言語による実装で、LLVMを使ったC++バイトコードの仮想マシンを使用しており、高速。メジャーな代替の実装。
- mruby: 組み込みデバイスなどのCコードと連携できるように設計された、軽量のRuby実装。近年、注目度が高い。
- Opal: WebブラウザーからRubyコードをJavaScriptコードにコンパイルできるインタプリター。
IronRuby: .NETによる実装。.NETのプログラムと連携する場合に便利。(開発が停止している)MacRuby: Mac向けのRuby実装。OS Xのプログラムと連携する場合に便利。(開発が停止している)
まとめ
以上、Rubyについて簡単にまとめたが、興味を持った方は公式リファレンスマニュアルも参照してみてほしい。
※以下では、本稿の前後を合わせて5回分(第1回~第5回)のみ表示しています。
連載の全タイトルを参照するには、[この記事の連載 INDEX]を参照してください。
2. 文の途中で改行する/if文も値を返す ― コーディングミスを防ぐには?(1)
Rubyプログラミングでミスしやすい意外な落とし穴を紹介。「式の取り扱い」に関して、改行で陥りやすいワナやif文などの制御構造が返す値を取り上げる。
3. 関数で複数の返り値を返す/関数の引数は値渡し ― コーディングミスを防ぐには?(2)
Rubyプログラミングでミスしやすい意外な落とし穴を紹介。関数を使って複数の値を返す方法と、引数による値の受け渡しに関するポイントを説明する。値渡しの関連として、非破壊的な変更と破壊的な変更についても取り上げる。
4. Rubyをインストール/アップデートするには?(Windows編)
Windows上でのRubyプログラミングを始める入門者向けに、Ruby環境の構築方法、複数バージョンのインストール方法、バージョンのアップデート方法を説明する。
5. 代入により決まる変数のデータ型/丸め誤差が発生する浮動小数点数の比較― コーディングミスを防ぐには?(3)
初心者向けにRubyプログラミングの落とし穴を紹介。代入する値により変数のデータ型が決まることに関する注意点と、浮動小数点数の比較における丸め誤差の問題と回避方法について説明する。