RubyとはWhat is Ruby

プログラミング言語Rubyは、その誕生から30年を迎えようとしています。
Rubyは現在、世界中で人気を集めており、Webからインフラ・組み込みなど多くの領域で使われています。
ここでは、その特徴を簡単に振り返ってみましょう。

◆ Rubyは、まつもと ゆきひろ(通称 Matz)により1993年2月から開発が始められ、1995年12月にネットニュース(fj.sources)上で発表されました。Matzを中心に開発されているCRuby(Matz' Ruby ImplementationことMRIとも呼ばれる)を始めとして、Javaで動作するJRubyや組み込み向けのmrubyなど、いくつかの実装があります。
◆ Rubyはエンジニアにとっての読みやすさと書きやすさを重視した文法を備えており、様々なプログラミング言語の利点を絶妙に調和させたプログラミング言語です。開発者のMatzは、「Rubyの言語仕様策定において最も重視しているのはストレスなくプログラミングを楽しむことである(enjoy programming)」と述べています。
◆ Rubyはオブジェクト指向プログラミング言語です。クラスベースのオブジェクト指向、動的な型付け、強力な文字列操作と正規表現処理、マルチスレッド、例外処理、イテレータ、クロージャ、Mixin、再定義可能な演算子といった機能を持っています。さらに、効率的な開発を支えるための巨大なエコシステムを持ち、17万ほどのライブラリがパッケージマネージャー「RubyGems」で利用できます。

(Rack, lib/rack/common̲logger.rbより一部抜粋)# frozen_string_literal: true
require_relative 'constants'
require_relative 'utils'
require_relative 'body_proxy'require_relative 'request'
module Rack
class CommonLogger# Common Log Format: http://httpd.apache.org/docs/1.3/logs.html#common
FORMAT = %{%s - %s [%s] "%s %s%s%s %s" %d %s %0.4f\n}
def initialize(app, logger = nil)@app = app@logger = loggerend
def call(env)began_at = Utils.clock_time
status, headers, body = response = @app.call(env)◆ Rubyの開発は、Matzを中心としたコミュニティベースで進められています。インターネット上で、いくつかのツール(Redmine、GitHub、メーリングリストなど)を利用して、機能拡張・性能向上・バグ修正を進めています。

response[2] = BodyProxy.new(body) { log(env, status, headers, began_at) }responseend◆ Rubyはオープンソースソフトウェア・フリーソフトウェアです。誰でも無償で利用できて、その動作を研究したり、ソースコードをコピーしたり、修正したり、再配布したりといったことが、自由にできます。CRubyは、2条項BSDライセンスとRubyライセンスのデュアルライセンスにより提供されています。

# Log the request to the configured logger.
def log(env, status, response_headers, began_at)
request = Rack::Request.new(env)length = extract_content_length(response_headers)◆ Rubyは2011年3月にJIS規格(JIS X 3017)として仕様化され、その後、2012年4月に日本発のプログラム言語として初めてISO/IEC規格(ISO/IEC 30170)として承認されました。
1【Rubyのコード例】

private

参考： ・Rubyとは・Ruby - Wikipedia

www.ruby-lang.org/ja/about/ja.wikipedia.org/wiki/Ruby

2

2003 / 07 / 22
RubyForge.org公開

2023

2003 / 06 / 21
European Ruby Conference(EuRuKo) 2003開催

2

2001 / 10 / 12
RubyConf 2001開催

2 02

2000 / 11
Dave Thomas and Andy Hunt
『Programming Ruby』刊行

20 21

1999 / 10
まつもとゆきひろ、石塚圭樹『オブジェクト指向スクリプト言語Ruby』刊行

コミッターたち,
RubyKaigi 20172009 / 09 / 07
RubyWorld Conference 2009開催

2004 / 03 / 14
RubyGems公開

1999 / 09 / 04
日本UNIXユーザ会主催による
Ruby Workshop開催

2019

1997 / 10
TRY!PC 11月号に「ちょーわかりやすい！Perl & ruby 入門」掲載

20171996 / 12 / 25
Ruby 1.0公開

2016

1995 / 12 / 21
Ruby 0.95をfj.sourcesにて配布、ruby-list ML開始

2014

1994 / 12
クローズドα配布開始

2012

2010

2008

2006

2005

2004

2003

2002

2001

2000

1999

1998

1997

1996

1995

1994

1993

1993 / 02 / 24
「Ruby」と命名、Ruby誕生

2009 / 02 / 27
第1回フクオカRuby大賞
発表

Evan Phoenix と Matz,
RubyConf 2012

David Heinemeier Hansson,
RailsConf 2006

Ruby開発開始
当時のMatz3

2007

作り始めました。

2009

自分の思い描く理想のプログラミング言語を2011

バブル崩壊で余った時間を使って、2013

一人の自称「プログラミング言語オタク」
が、

2015

1993年、社内向けツールを開発していた2018

History2020

Rubyの短い歴史

2004 / 07 / 25
Rails 0.5.0公開
2004 / 08 / 08
日本Rubyの会設立
2004 / 09 / 10
Rubyist Magazine vol.1発行
2005 / 12 / 14
Rails 1.0リリース
2006 / 06 / 10
RubyKaigi(日本Rubyカンファレンス)2006開催
2006 / 06 / 22
RailsConf 2006開催
2006 / 07 / 31
Ruby City MATSUE
プロジェクトの一環で松江オープンソースラボオープン

2010 / 03 / 23
rubygems.org公開
2010 / 05 / 14
Rubinius 1.0リリース2010 / 08 / 29
Bundler 1.0.0リリース
2011 / 03 / 22
JIS X 3017 プログラム言語Ruby
2012 / 03 / 31
ISO/IEC 30170:20122013 / 02 / 24
Ruby 2.0.0リリース
2014 / 01 / 10
mruby 1.0.0リリース
2015 / 07 / 22
JRuby 9.0.0.0リリース
2020 / 10 / 03
Kaigi on Rails 2020
STAY HOME Edition開催
2020 / 12 / 25
Ruby 3.0.0リリース

2007 / 06 / 12
JRuby 1.0リリース

2021 / 12 / 15
Rails 7.0.0リリース

2007 / 07 / 27
Rubyアソシエーション設立

2022 / 11 / 14
Rails Foundation設立
4

Rubyの実装

Implementation

Rubyの人気と評価が高まると共に、いくつかの実装が登場しました。

ライブラリとツール

Libraries and Tools

様々なライブラリやツールによるエコシステムが、Rubyの効率的な開発を支えています。

CRuby

www.ruby-lang.org「MRI」(Matz' Ruby Implementation)とも呼ばれる
CRubyは、Matzを中心に開発されているRuby実装で、最も広く使われています。CRubyの「C」はプログラミング言語Cによって実装されていることに由来します。以前は、ソースコードを構文木に変換して実行していましたが、現在はバイトコードに変換して実行するYARV(Yet Another Ruby VM)が採用されています。

JRuby

TruffleRuby github.com/oracle/trufﬂeruby

Java仮想マシン(JVM)で動作するRuby実装です。エンタープライズ分野で幅広く利用されているJavaのエコシステムと高い親和性を持っています。2001年、Jan Arne Petersenが開発を始め、近年はCharles Nutter、Thomas Eneboらが開発を進めています。

TrufﬂeフレームワークとGraalVMを利用して動作するRuby実装で、JITを使った高速な実行速度が特徴です。Chris
SeatonがOracle Labsのインターンシップで開発したRuby実装が元になっており、Benoit Dalozeが中心となって開発が行われています。

mruby
mruby/cpicoruby

Opal

実行環境のサイズが小さく、特定のOSやデバイスに依存しないRubyの軽量実装です。デジタル家電やアプリ・ゲームなどに組み込むことを想定しています。
プログラムはバイトコードに変換されて、専用の仮想マシンにより実行されます。
5

rubygems.org

Ruby用ライブラリの作成・配布・導入を支援するパッケージ管理システムです。
gemと呼ばれる配布用フォーマットを使用しており、RubyGems.orgから配布することができます。

jruby.org

mruby.org
github.com/mrubyc/mrubyc
github.com/picoruby/picoruby

RubyGems

opalrb.com

RubyのスクリプトをJavaScriptのコードに変換するAltJS言語で、変換したコードをWebブラウザ上で直接実行することができます。opal.jsとopal-parser.jsをWebページに組み込んでおくと、RubyのスクリプトをWebブラウザ上で実行できるようになります。

Bundlerbundler.io

gemフォーマットで提供されるライブラリのバージョンと依存関係を管理するツールです。Rubyアプリケーションの開発プロジェクトで必要となる、バージョンを指定して複数のライブラリを導入することを可能にします。

6

開発とサポート

Development / Support

Rubyの開発は、多くの人たちに支えられています。

CRubyの開発体制

リリースサイクル

Rubyの開発コミュニティは、インターネット上のソースコードリポジトリでコードを履歴管理しています。このコードを修正して、ソースコードリポジトリに登録することを「コミット」と呼びます。
そして、ソースコードを直接登録できる人たちは「コミッター」と呼ばれています。コミッターを中心にして、Rubyの品質改善や機能向上が日々行われています。またフルタイムコミッターとして、日常の業務としてRubyの開発に携わっている方もいます。

現在、Rubyはマイナーアップデートを年1回の頻度で行っています。
そして、次のようにメンテナンスを行っています。通常メンテナンスでは、一般的なバグ修正とセキュリティ修正を行います。一定期間が経過すると、セキュリティメンテナンスとして、1年間だけセキュリティ修正を行います。最後に、end-of-life(EOL)として、メンテナンスが終了して、公式のセキュリティ修正も提供されなくなります。
CRubyのリリースサイクル

課題登録、
議論

クローン、プルリクエスト
コミッター

2020

バージョン

コミット

Redminebugs.ruby-lang.org

配布サイト

リポジトリ

リポジトリ

cache.ruby-lang.org 等

Git

GitHubgit.ruby-lang.org
リリース

github.com/ruby/ruby
ミラー

3.0 系

2023

状態（2023初頭）
通常

2022.12.25

Release通常

2021.12.25

Release通常

2020.12.25

2.7 系

EOL 予定

2.6 系

入手

2022
Release

3.2 系
3.1 系

課題管理

2021

セキュリティ修正のみ
メンテナンス終了

EOL

参考：Ruby Releases www.ruby-lang.org/en/downloads/releases

課題登録、
議論

クローン、
プルリクエスト
利用者
参考：Rubyコア開発 www.ruby-lang.org/ja/dev

7

Ruby Reference Manual
docs.ruby-lang.org

コラム

コミュニケーション
課題管理システム

メーリングリスト

Rubyに対するバグ報告、機能追加や修正の要望は、Redmineによる課題管理システムに記録されています。多くの方々が日々レポートをしています。

ユーザー同士の情報交換や、開発に関するディスカッションのためにメーリングリス
トが用意されています。

bugs.ruby-lang.org

ドキュメントwww.ruby-lang.org/ja/community/mailing-lists

Rubyの機能に関する情報は、Ruby Reference Manualとして提供されています。
また、ソースコード内のコメントにも役に立つ情報が記載されています。

Rubyの開発に参加するならRubyの開発に参加したいと思ったら、ぜひbugs.ruby-lang.orgや開発メーリングリストを購読して、開発の議論に参加してください。バグの報告、仕様の改善案、機能の追加案、パッチの投稿などはいつでも受け付けています(実際に採用されるかどうかは内容によります)。また、比較的マイナーなプラットフォームでの動作報告、修正、継続的なメンテナンスの提供なども募集しています。Rubyの開発に興味を持ったら、まずは開発メーリングリストにその旨を投稿して下さい。
8数字で見るRuby
Ruby in Numbers

Rubyの蓄積をグラフにしてみました。

GitHubのスター数

RubyGemsのダウンロード数 (合計、類似のgemをまとめた上での上位10件)
1
2

bundler

1,367,377,102

aws-sdk
rspec

871,159,203

1
2

rails
jekyll45.9k

741,409,489

3

discourse

37.2k

diff-lcs
jmespath

740,661,056

4

fastlane

36.3k

720,153,196
702,198,478

brew (Homebrew)
vagrant

34.6k

i18n

56

7

rails

678,374,126

7

gitlabhq

23.1k

8

rack

672,839,219

8devise

22.9k

9

rake

672,266,230

9forem20.1k

10 tzinfo

659,612,516

10 ruby

19.9k

3456

52.1k

24.9k

出典: rubygems.org/stats

CRubyのコミット数

RubyGemsの登録数 （合計、2011-2022）
200000150000139,265

148,985

156,924

163,702

169,768

174,592

127,361

0

3,998

3,971

3,833

4,932

4,972

4,732
3,790
3,330

2000

32,291

1000
2012

2013

2014

2015

2016

2017

2018

2019 2020 2021 2022

出典: www.modulecounts.com※ 2015年はデータ欠損のため12/08時点、それ以外は12/31時点の登録数

95000

5,878

3000

49,135

2011

5,145

3,147

93,94968,210

50000

5,882

6000

4000111,314

100000

出典: github.com/topics/ruby?l=ruby

0

2011

2012

2013

2014

2015

2016

2017

2018

2019

2020

2021

2022

出典: github.com/ruby/ruby10世界に広がるRuby

Spreading Across the World

世界中の企業・組織や人々が、Rubyを活用しています。

Webサービス

学びと遊び

GitHub：ソフトウェア開発者向けSNS

Smalruby

github.com

smalruby.jp

Shopify：Eコマースプラットフォーム

ブロック型ビジュアルエディタを備えたRuby開発環境
で、青少年にプログラミング体験を提供する活動を行っている「NPO法人Rubyプログラミング少年団」が開発しています。

shopify.com

Airbnb：宿泊施設仲介サービス
airbnb.com

GOV.UK：英国政府ポータルサイト
www.gov.uk★ Rubyを利用している企業については、
toprubycompanies.info で紹介されています。

ツール
HomeBrew: macOS用パッケージマネージャー
brew.shFluentd: ログ収集ツール
www.ﬂuentd.orgfastlane：スマートフォンアプリ開発用自動化ツール
fastlane.tools

クラウドサービス
Rubyはパブリッククラウドサービスの多くで利用可能になっており、公式のRuby用SDKも配布されています。
・Amazon Web Services
・Microsoft Azure
11

・Google Cloud Platform
・Heroku

ルビィの ぼうけん

Ra i ls Gi r ls

コンピュータとテクノロジーについての絵本です。著者は、フィンランド出身のプログラマー・作家・イラストレーターのリンダ・リウカス。原著「Hello Ruby」を制作するため、クラウドファンディングで、募集開始から3時間強で目標金額の$10,000を達成しました。また、Rails Girlsの創立者でもあります。

より多くの女性がプログラミングに親しみ、アイデアを自ら形にできる技術を身につける手助けをするコミュニティです。RubyとRuby on Railsを使った女性向け勉強会などを日本を含めた世界各地で開催しています。

h el l o r u b y . c o mr ai l sgi r l s. c o m12

最近のRuby

Latest Features

現在開発が進められているRuby 3.x系では、新しい機能が追加されています。

JIT

パターンマッチング

JITとは、プログラムの実行中に必要な部分だけをコンパイルする機能です。

パターンマッチングは、関数型プログラミング言語で広く使われています。

RubyでのJITは、Rubyのバイトコードを部分的にネイティブコードにコンパイルするものになります。

Rubyでは、2.7から実験的な機能としてパターンマッチングが導入され、3.0から正式な機能となりました。

Ruby 3では、MJITやYJITといった、高速にRubyを実行するための機能が正式に導入されました。

Rubyのパターンマッチングでは、配列やハッシュに似た記法でパターンを記述し、case inを使った構文や、̀=>̀を使った構文によりマッチングを行うことができるようになります。

静的型解析
Ruby 3では、静的型解析を行うためのいろいろなしくみが導入されています。
RBSという記法で記述されたRubyの標準クラスの型情報が提供されており、Gemや独自クラスのRBSとSteepなどの外部ツールを利用することで、Rubyの動的な機能はそのままにしつつ、静的な型検査を行えます。

def match_user(response)
case responsein { error: { code: Integer, message: String } }raise API::Error.new(response)
in user_id: Integer => id
User.find(id)in name:, email:User.new(name:, email:)end
end

また、抽象実行によりRubyプログラムの型情報を解析するツールTypeProfも開発されています。
class Book
attr_reader title: String
attr_reader authors: Array[Author]
attr_reader page: Integer | nil
def initialize: (title: String, authors: Array[Author],?page: Integer | nil) -> void
def summary: () -> String
alias to_s summary
def each_author: () { (Author) -> void } -> void
end
13

Wasm対応Wasm(WebAssembly)はアセンブリ言語のような低レベルな言語で、Webブラウザなどで動作させることができます。
Ruby 3.2では、Ruby処理系をWasmにコンパイルできるようになりました。そのため、Rubyをブラウザやエッジ環境で安全に動作させることができます。
try.ruby-lang.orgではWasm版Rubyを使ったRubyの実行環境が提供されており、インストールすることなく誰でもRubyを試せます。
14

コミュニティと団体

Community and Organization

地域Rubyの会

github.com/ruby-no-kai/ofﬁcial/wiki/RegionalRubyistMeetUp

日本各地で、Rubyに関する勉強会やミートアップが行われています。
お住いの近くに、Rubyistの集まりがあるかもしれません。

一般財団法人Rubyアソシエーション
www.ruby.or.jpEvent and Conference
一般社団法人日本Rubyの会
ruby-no-kai.org

NPO法人軽量Rubyフォーラム
forum.mruby.org

RubyKaigi

RubyConf

RedDotRubyConf

rubykaigi.org

rubyconf.org

www.reddotrubyconf.com

RubyWorld Conference

RailsConf

RubyConf India

www.rubyworld-conf.org

railsconf.com

rubyconf.in

Kaigi on Rails

EuRuKoRuby Conferences

kaigionrails.org

euruko.org

rubyconferences.org

地域Ruby会議

RubyConf Taiwan

regional.rubykaigi.org

rubyconf.tw

NPO法人Rubyプログラミング少年団
smalruby.jp1516

制作：Ruby30周年記念イベント開催実行委員会

写真：

Yukihiro Matsumotohttps://twitter.com/yukihiro̲matz/status/936014306650361856

Dave Thomas
https://www.ﬂickr.com/photos/pragdave/174964316/, https://www.ﬂickr.com/photos/pragdave/173649119/(CC BY-NC-ND 2.0)

Kuniaki IGARASHI
https://www.ﬂickr.com/photos/igaiga/8171983816/(CC BY-SA 2.0)

Koichiro Ohba
https://www.ﬂickr.com/photos/koichiroo/8179031056/(CC BY-SA 2.0)

Fernando Guillen
https://www.ﬂickr.com/photos/d2clon/7319940952/(CC BY 2.0)

nerdbabehttps://www.ﬂickr.com/photos/nerdbabe/13243275113/(CC BY 2.0)

RubyKaigi 2017
デザイン： 関谷 繭子
協力：可知 豊株式会社 達人出版会