Ruby

Ruby（ルビー）は、まつもとゆきひろ（通称: Matz）により開発されたオブジェクト指向スクリプト言語（スクリプト言語とはプログラミング言語の一分類）。
日本で開発されたプログラミング言語としては初めて国際電気標準会議（IEC）で国際規格に認証された事例となった。
概要.
Ruby は1993年2月24日に生まれ、1995年12月にfj上で発表された。名称の Ruby は、プログラミング言語 Perl が6月の誕生石である Pearl（真珠）と同じ発音をし、「Perlに続く」という意味で、6月の次の誕生石（7月）のルビーから名付けられた。競合言語として Perl の他に Python があり、「Matz（まつもと） が Python に満足していれば Ruby は生まれなかったであろう」と公式のリファレンスの用語集で言及されている。
機能として、クラス定義、ガベージコレクション、強力な正規表現処理、マルチスレッド、例外処理、イテレータ、クロージャ、Mixin、利用者定義演算子などがある。Perl を代替可能であることが初期の段階から重視されている。Perlと同様にグルー言語としての使い方が可能で、C言語プログラムやライブラリを呼び出す拡張モジュールを組み込むことができる。
Ruby 処理系は、インタプリタとコンパイラが存在する（詳しくは#実装を参照）。
可読性を重視した構文となっている。Ruby においては整数や文字列なども含めデータ型はすべてがオブジェクトであり、純粋なオブジェクト指向言語といえる。
長らく言語仕様が明文化されず、まつもとによる実装が言語仕様に準ずるものとして扱われて来たが、2010年6月現在、JRuby や Rubinius といった互換実装の作者を中心に機械実行可能な形で明文化する RubySpec という試みが行われている。公的規格としては2011年3月22日にJIS規格（JIS X 3017）が制定され、その後2012年4月1日に日本発のプログラム言語では初めてISO/IEC規格（ISO/IEC 30170）として承認された
フリーソフトウェアとしてバージョン1.9.2までは Rubyライセンス（Ruby License や Ruby'sと表記されることもある。GPLかArtisticに似た独自ライセンスを選択するデュアルライセンス）で配布されていたが、バージョン1.9.3以降は2-clause BSDLとのデュアルライセンスで配布されている。
ゆかりのある地域.
Rubyは日本の国産言語として知られており、特にRubyとゆかりのある地域はRubyの聖地と呼ばれている。
設計思想.
開発者のまつもとゆきひろは、「Rubyの言語仕様策定において最も重視しているのはストレスなくプログラミングを楽しむことである ("enjoy programming")」と述べている。
ただし、まつもとによる明文化された言語仕様は存在しない。Perlのモットー「やり方はいろいろある ("There's More Than One Way To Do It; TMTOWTDI")」は「多様性は善 ("Diversity is Good")」というスローガンで Ruby に引き継がれてはいるものの最重要なものではないとも述べており、非推奨な手法も可能にするとともに、そのような手法を言語仕様により使いにくくすることによって自粛を促している。
また、まつもとは『まつもとゆきひろ コードの世界 スーパー・プログラマになる14の思考法』でもRubyの開発理由を次のように述べている。
また、英語圏の開発者の間ではMINASWAN (Matz is nice and so we are nice. 和訳: まつもとがナイスだから我々もナイスであろう) の標語が用いられている。
「Python、PHP、Perlでは静的型を導入しているため、Rubyも型を導入するべきでは」と長年言われているが、まつもとは「Rubyに型を取り入れたくない。DRY (Don't repeat yourself)ではないから⁠」⁠「⁠型宣言することはコンピュータに使われているような気になる」と否定的であり、2019年5月現在Rubyに静的型が導入される予定はない。
クラス名はアルファベットの大文字から始めるという制約があり、日本語などの非ASCII文字のみでクラス名を定義する方法がない。この件についてまつもとは以下のように語っており、英語を共通言語として使うべきであるという立場を表明している。
実装.
公式な実装.
Rubyの公式な実装には、以下の二種類が存在する。
例.
基本的なコード
-199.abs # 199
"ruby is cool".length # 12
"Rick".index("c") # 2
"Nice Day Isn't It?".split(//).uniq.sort.join # " '?DINaceinsty"
コレクション.
配列の作成と使用法
a = [1, 'hi', 3.14, 1, 2, [4, 5]]
a[2] # 3.14
a.reverse # file.puts 'Wrote some text.'
end # file.txtはここで自動的に閉じられる
これは次の例と同様の処理を行う（codice_1 については[[#例外処理|例外処理]]の項を参照）
begin
 file = File.open('file.txt', 'w+b')
 file.puts 'Wrote some text.'
ensure
 file.close
end
本処理を後から指定.
実際に行いたい処理をブロックで記述する。前項の後処理の省力化もこれの一例といえる。
def bfs(list) #配列をツリーに見立てた処理
 until list.empty?
 unit = list.shift
 yield unit #ブロックの内容を実行
 unit.each{|v| list.push v} if defined? unit.push
 end
end
この例は、ツリーから要素と分枝をつぎつぎと取り出して取り出したものになんらかの処理を行うものである。メソッドの利用者は、なんらかの処理のみを記述すればよく、取り出しのアルゴリズムなど、本質的でない内容に意識を向ける必要がなくなる。
クロージャ.
クロージャとなるようなブロックの引数渡し
def remember(&p)
 @block = p
end
@block.call("John")
メソッドからクロージャを返す例
def create_set_and_get(value = 0)
end
setter, getter = create_set_and_get
setter.call(21)
getter.call # => 21
クラス.
次のコードはcodice_2という名前のクラスである。その中、まずcodice_3はオブジェクトを初期化するコンストラクタである。ほかに2つのメソッドがあり、1つは比較演算子であるcodice_4をオーバーライドしておりcodice_5によりプロパティcodice_6でソートすることができる。もう1つのオーバーライド箇所のcodice_7メソッドは codice_8 での表示の形式を整える。codice_9は Ruby におけるメタプログラミングの例であり、codice_10 はインスタンス変数の入出力を司る、いわゆる値を取得する codice_11 メソッドや値を設定する codice_12 メソッド（アクセサ）を定義する。codice_9は codice_11 メソッドのみの定義である。なおメソッド中では最後に評価された式が返り値となり、明示的なcodice_15は省略できる。
class Person
 def initialize(name, age)
 @name, @age = name, age
 end
 def <=>(person)
 @age <=> person.age
 end
 def to_s
 "#{@name} (#{@age})"
 end
 attr_reader :name, :age
end
group = [ Person.new("John", 20),
 Person.new("Markus", 63),
 Person.new("Ash", 16)
puts group.sort.reverse
結果は3つの名前が年の大きい順に表示される
 Markus (63)
 John (20)
 Ash (16)
例外処理.
例外はなにか不具合が起こったときcodice_16の呼び出しで発生させることができる。Ruby での例外は codice_17 クラスか、そのサブクラスのインスタンスである。
例外にはメッセージを追加することもできる
 raise "This is a message"
さらに例外のタイプも指定できる
 raise ArgumentError, "Illegal arguments!"
例外はcodice_18節で処理することができ、次のようにコードにcodice_18を付加するだけである
begin
 # 通常処理
rescue
 # 例外処理。引数を省略すると、StandardErrorのサブクラスの例外のみ処理する
rescue SomeError
 # 例外処理。SomeErrorの例外のみ処理する。
ensure
 # 例外の発生に関わらず必ず実行される処理
else
 # 例外が発生しなかったときに実行される処理
end
エピソード.
Ruby ではブロック構造を codice_20 で終える構文が採用されているが、開発者のまつもとゆきひろは他の構文が採用される可能性があったことを述べている。当時、Emacs 上で codice_20 で終える構文をオートインデントさせた例はあまりなく、Ruby 言語用の編集モードにオートインデント機能を持たせられるかどうかが問題になっていたためである。実際には数日の試行でオートインデント可能であることがわかり、現在の構文になった。C言語のようなcodice_22を使った構文も検討されていたが、結局これは採用されなかった。
「Rubyは死んだ」.
「Rubyはよく『死んだ』って言われる言語である」とまつもとは認識しておりTwitterがRuby on RailsからJava仮想マシン用言語のScalaに移行した話などを例に出し「Rubyは死んだ」みたいに言われることが増えたとしているほか、オランダのTIOBEという会社が発表しているプログラミング言語の人気ランキングでRubyが上位に入らないことをもってして「Rubyは死んだ」「Rubyは凋落している」と見られることがあるが、「RubyとかRuby on Railsだと、さまざまなジャンルで実際の適用例があるので、なにか困ったとき同じ問題に直面した人を探せたり、あるいはその問題を解決するRubyGemsを見つけられる。そういう点でいうと、トータルの生産性はかなり高いことがある」「実際に仕事として、あるいは自分のプロダクトを作るときに、どんな言語を選択してどういうふうに開発したらいいのかを考えると、Rubyの持っているビジネス上の価値はそんなに下がっていないと思います。たとえ順位が下がって、表面上Rubyの人気が凋落したように見えても、ある意味『まだまだ大丈夫』が1つの見識だと思います」とまつもとは述べている。
Ruby on RailsがPythonで作られなかった理由.
デイヴィッド・ハイネマイヤー・ハンソンがRuby on Railsを構築するのにPythonを選ばなかった理由として「私の場合は、恋に落ちたのがRubyなのです。私はRubyに恋をしていますし、もう14年間もそうなのです。（中略）『最適なツール』などというものは存在しないのです。あなたの脳をちょうどいい具合に刺激するパズルがあるだけなのです。今日では、ほぼなんでも作ることができます。そして、それを使って、さらに何でも作れてしまうのです。これは素晴らしいことです。表現や言語、そして思考の多様性に乾杯しましょう！」と質問サイトのQuoraで本人が回答している。
まつもとゆきひろが書いたコードの割合.
2020年9月8日現在、RubyのCコード509,802行のうち、まつもとがコミットしたのは36,437行で1割以下になっている。