言語
日本語
English

Caution

お使いのブラウザはJavaScriptが無効になっております。
当サイトでは検索などの処理にJavaScriptを使用しています。
より快適にご利用頂くため、JavaScriptを有効にしたうえで当サイトを閲覧することをお勧めいたします。

  1. トップページ
  2. IT用語 & 歴史辞典
  3. Ruby

Ruby

Rubyは1993年に開発を開始し、1995年にまつもとゆきひろさん(Matz)が公開した日本生まれのプログラミング言語です。設計の軸は「プログラマーの幸福(Programmer Happiness)」。コンピュータの都合より人間の書きやすさを優先した設計は、日本発の言語が国際標準(ISO/IEC 30170)に認定される結果をもたらしました。

名前の由来

言語の名前「Ruby(ルビー)」は、宝石のルビーから取られています。先行する言語 Perl(パール=真珠)にちなんだ命名です。Perl の次の世代を担う言語として、同じ宝石の名前を選びました。名前のルールも、設計者が持つ遊び心の表れです。

まつもとゆきひろさんは 1990 年代前半から複数の言語を日常的に使い、「なぜこれほど書きにくいのか」という不満を抱き続けていました。Perl の表現力は好きだが文法が複雑すぎる、Python は整然としているが楽しくない — そういった観察の先に、「自分が使いたい言語を作ろう」という決断がありました。

1993〜1995年: Rubyの誕生

1993 年 2 月 24 日、まつもとゆきひろさんは仕事の合間に Ruby の開発を始めました。この日付は後に Ruby の誕生日として記念されています。

開発環境は NECの PC-9800 シリーズ上の MS-DOS でした。設計にあたってまつもとゆきひろさんが参照した言語は多岐にわたります。

影響を受けた言語Rubyが受け継いだもの
Perlテキスト処理の強力さ、正規表現の組み込み、「TMTOWTDI(やり方はひとつじゃない)」の精神
Smalltalk全てがオブジェクトという純粋なオブジェクト指向。数値にもメソッドを呼べる設計
Lispブロックとクロージャの考え方
CLUブロック付きメソッド呼び出し(イテレータ)の原型
Eiffel契約による設計の概念(命名規約に痕跡がある)

1995 年 12 月、Ruby 0.95 がネットニュースで公開されました。その後まもなく Ruby 1.0 が公開され、日本語のメーリングリスト(ruby-list)を中心にコミュニティが形成されていきました。

1993年 開発開始 1995年 Ruby 1.0 公開 2004年 Rails 公開 2012年 ISO/IEC 30170 認定

まつもとゆきひろさんの設計思想

Ruby の設計哲学で最もよく知られるのは 「最小限の驚き(Principle of Least Surprise)」です。ただし、まつもとゆきひろさん本人が強調するのは「自分(Matz)にとって驚きが少ないこと」です。「全プログラマー共通の驚き」ではなく、設計者自身が自然だと感じる挙動を選ぶという意味です。

もう一つの軸は 「プログラマーの幸福」です。まつもとゆきひろさんは「コンピュータは人間の奴隷であるべきで、その逆ではない」という立場から、型宣言の省略、括弧の省略可能な文法、複数の書き方の許容を設計の中核に据えました。

設計原則具体的な現れ
最小限の驚き配列の要素数は length でも size でも取得できる(どちらか一方しか使えないと「驚き」が生じる)
人間中心型宣言不要、括弧省略可、複数の書き方を許容
全てはオブジェクト42.times のように数値にもメソッドを呼べる
楽しさは生産性書いていて楽しい言語はミスが減るという考え方

言語の系譜と影響

Ruby は単独で生まれたわけではなく、1960〜90 年代に存在した複数の言語の長所を観察し、それを統合する形で設計されました。

Perl Smalltalk Lisp / CLU Eiffel Ruby 1995〜 Ruby on Rails 2004〜 JRuby JVM上のRuby実装 mruby 組み込み向け軽量版

派生・関連位置づけ
Ruby on Rails2004年にDavid Heinemeier Hanssonが公開したWebフレームワーク。Rubyの普及に最も貢献
JRubyJava 仮想マシン(JVM)上で動く Ruby 実装。Java ライブラリと連携可能
mrubyまつもとゆきひろさんが主導した組み込み向けの軽量 Ruby 実装
CrystalRubyにインスパイアされた静的型付けコンパイル言語(Ruby との互換性はない)

マイルストーン

出来事
1993まつもとゆきひろさんが Ruby の開発を開始(2月24日)
1995Ruby 0.95 をネットニュースで公開。Ruby 1.0 リリース
1999英語での情報発信が本格化。英語メーリングリスト ruby-talk 開設
2004Ruby on Rails 公開。Web フレームワークとして急速に普及
2007Ruby 1.9 リリース。YARV(Yet Another Ruby VM)導入で実行速度が向上
2012ISO/IEC 30170:2012 として国際標準化。日本人設計の汎用言語として初の認定
2013Ruby 2.0 リリース(20周年記念)。キーワード引数、Refinements の導入
2020Ruby 3.0 リリース。JIT コンパイラ、Ractor、RBS の 3 本柱
2023Ruby 3.3 リリース。YJIT を本格採用、パーサーを Prism に刷新

同時代の言語との比較

Ruby が登場した 1990 年代中盤から 2000 年代にかけて、動的型付けのスクリプト言語が複数登場しました。

言語公開年設計の主眼Rubyとの違い
Perl1987テキスト処理・Unix ツール文法が複雑で「やり方はひとつじゃない」を極めた。Ruby はそこから表現力だけを引き継ぎ、整頓された
Python1991読みやすさ・教育インデントで構造を表し「唯一の正しい書き方」を推奨。Ruby は複数の書き方を許容する方向
Ruby1995プログラマーの幸福書いていて楽しいことを最優先。「最小限の驚き」と全てがオブジェクトが特徴
PHP1995Web 向け手続き型スクリプトHTML への埋め込みが容易。Web バックエンドに特化した実用主義

現代での使われ方

Ruby は Web バックエンド開発で広く使われています。特に Ruby on Rails を用いた開発は、スタートアップやプロトタイピングの場面でよく採用されます。GitHub、Shopify、Basecamp、Cookpad といったサービスが Rails で構築されました。

また、まつもとゆきひろさんが主導する mruby は組み込みシステム向けの軽量実装として、IoT 機器や組み込み Linux 環境で使われています。

Ruby 3.x での JIT 導入・YJIT の本格採用・Ractor による並行処理の強化によって、パフォーマンスと並行性への対応が進んでいます。

よくある誤解

「Ruby は Rails のためだけに存在する」

Ruby on Rails の普及により「Ruby = Rails」のイメージが強まりましたが、Ruby は Rails がなくても成立する汎用言語です。CLIツール、自動化スクリプト、組み込みシステム(mruby)、DSL(ドメイン固有言語)設計など、Rails 以外の用途でも使われています。

「最小限の驚き = 全員の直感に合う」

まつもとゆきひろさん自身が説明しているように、「最小限の驚き」は設計者(Matz)本人の直感を基準にした原則です。他の言語に慣れたプログラマーには、Ruby の挙動が直感に反することもあります。万人共通の「驚かない設計」ではありません。

「Ruby は遅い」

Ruby 1.8 世代(YARV 導入前)の評価が「Ruby = 遅い言語」という印象を定着させました。Ruby 1.9 以降の YARV 導入、Ruby 3.x での YJIT 採用(MRI の 1.5〜3 倍以上の速度向上が報告されている)により、性能は大きく改善されています。

関連用語

用語説明
Ruby on RailsRuby 製の Web アプリケーションフレームワーク。2004年に David Heinemeier Hansson が公開
Matzまつもとゆきひろさんのハンドルネーム。Ruby の設計者・BDFL(慈悲深き終身独裁者)
YARVYet Another Ruby VM。Ruby 1.9 で導入されたバイトコード仮想マシン
YJITRuby 3.1 以降で本格採用された JIT コンパイラ。Shopify が開発
RactorRuby 3.0 で導入された並行処理の仕組み。GIL(グローバルインタープリタロック)に縛られない並列実行を目指す
RBSRuby 3.0 で導入された型情報の記述言語。実行時の型チェックは行わないが、静的解析ツールと連携できる
mruby組み込みシステム向けの軽量 Ruby 実装。まつもとゆきひろさんが主導
GemRuby のパッケージ管理単位。RubyGems.org で公開・配布されている
Bundlerプロジェクトごとの Gem バージョンを管理するツール
irbInteractive Ruby。ターミナルで Ruby を対話的に実行できる REPL