Forkwell Press

エンジニアの生き様をウォッチするメディア

なぜRubyは世界中で受け入れられているのか?

2015年9月28日、エンジニア目線の求人サイト「Forkwell Jobs」主催による、プログラマーのための「Rubyの世界」と題したイベントが開催されました。

第一部では、Rubyコミッター、かつ、日本人唯一のRuby on Railsコミッターである松田 明氏(写真左)が登壇。「Rubyの世界」をテーマに、RubyとRuby on Railsの歴史や思想、コミュニティをはじめとしたRubyの魅力についてお話いただきました。

第二部、WEB+DB PRESSで松田氏と執筆実績もある後藤大輔氏(写真右)の講演レポート(後編)はこちら forkwell.hatenadiary.jp

講演者プロフィール 松田明(@a_matsuda)

Rubyコミッター、かつ、日本人唯一のRuby on Railsコミッター。 kaminari, action_args, active_decorator, database_rewinder, gem-srcなどのライブラリの作者。 地域Rubyユーザーグループ「Asakusa.rb」の主催。 年末に開かれるRubyistの祭典 "RubyKaigi 2015" のチーフ・オーガナイザー。

Rubyの父「まつもとゆきひろ氏(Matz)」はなにがすごい?

Rubyはまつもとゆきひろさん(Matz)によって開発されたオブジェクト指向スクリプト言語と呼ばれるプログラミング言語です。まつもとさんがサラリーマンをやっている頃に趣味で作り始めた言語で、最初のバージョンはほぼまつもとさん一人で開発しました。

まつもとさんのすごいところは、誰も目をつけていなかったところに目をつけて新しい言語を作った、という点です。どういうことかというと、Rubyは、

「人間があまり頑張らなくてもその分コンピューターが頑張って、人間に楽をさせるためのプログラミング言語を作りたい」

という思想で作られたんですね。

純粋なオブジェクト指向言語であり、コンパイルがいらないスクリプト言語で、そしてあたかも自然言語を読み書きしているようなフィーリングでコードを読み書きできることを目指しています。

パラダイムとしては特に新しいことはやっておらず、ほとんどが既存の、彼が好きな言語から良いとこどりをした手触りの良い言語になっています。実際、他言語になくてRubyにしかない機能はほとんどありません。

「Ruby」誕生秘話

今から約22年前の1993年の2月14日がRubyの誕生日と言われています。この日にまつもとさんが「言語を作ろう」と思って、その名前について同僚の石塚圭樹さんという方にチャットで相談したんですね。そのとき、「Perlよりちょっとかっこいいやつを作ろう」ということで「Ruby」と名付けられました。

最初はまつもとさんが一人で作り始めたんですけど、現在までに約80人がコミッターとして登録されていて、そのうち50人ほどが現在でもアクティブにコミットしています。7割方日本の方で、その中でもRubyを開発することによって生活しているフルタイムコミッターは3人います。まつもとさんと、パッチモンスターこと中田伸悦さんと、Rubyのコア部分を開発している笹田耕一さんです。この3人に資金援助をしているのは米国SalesForce社傘下のHerokuさんです。そのおかげで現在のRubyが改良され続けているわけですので、SalesForceさんに感謝ですね。

Rubyのリリースは、毎年クリスマス時期

Rubyの最初のバージョンが出たのは1995年で、20年後に2.0をリリースしました。2.0以降、毎年クリスマス時期にバージョンアップを行っていく決まりになっています。

2015年には2.3.0、2016年には2.4.0になる予定で、そう遠くない将来にメジャーバージョンアップとなる3.0.0が出るのではないかと思われます。

「そう遠くない」ことには理由があります。まつもとさんが二桁バージョン番号を嫌う傾向があるので、2.9.0の次、つまり遅くとも7年後の2022年には3.0になるだろうと言われているのです。3.0はメジャーバージョンアップなので、それに応じて新しい機能を入れていく予定です。

RubyKaigiには、Rubyistが集結

Rubyを語る上で重要となる“Rubyist”ですが、これはまつもとさんによる造語で、「Rubyに対してお客様以上の気持ちを持っているプログラマーのこと」と定義されています。つまり、Rubyが好きでRubyを“いいね”と思っている人は誰でもRubyistを名乗っていいということです。

ちなみにRubyist-istという人種もいて、要は「ミーハー」ですね(笑)わたしみたいなRubyistが大好きな人のことをこう言ったりします。RubyKaigiはそんな人たちが主催している、世界中からたくさんのRubyistが集まる国際カンファレンスで、今年は12月に築地あたりで開催します。

Ruby on Railsの由来は?

Ruby on Railsは、DHH(David Heinemeier Hansson)という方がRubyを利用して作ったウェブアプリケーションフレームワークです。「設計より規約」(CoC:Convention over Configuration)や「同じことを繰り返さない」(DRY:Don't Repeat Yourself)といった強固な設計思想を下敷きとした、頑固でワガママな作りになっています。

彼が敷いた黄金のレール(Rail)、つまり彼の思想に乗って作っていけば、勝手に正しいアプリケーションができていく、ということでRuby on Railsと名付けられました。

開始から去年で10周年を迎えましたが、今のRails開発チームには32人のコミッターがいて、国籍も様々な多国籍軍になっています。Railsのリリースサイクルは基本的に不定期で、新機能がだいたいできた段階でリリースされます。2015年秋に5.0をリリースする計画ですが、いつも延び延びになるので、おそらく来年4月ぐらいになると思っています。5.0には新しい新機能が加えられる予定なので、ぜひ楽しみにしていてください。

Rubyとソーシャル・コーディングの話

ここまではざっとご紹介になりますが、伝えたかったことは「なぜわたしがRubyを良いと思っていて、みなさんにおすすめしたいのか」ということです。

Rubyが世界中で受け入れられているのは、2008年くらいから始まったソーシャル・コーディングと呼ばれるムーブメントとすごく相性が良くて、ソーシャル・コーディングしやすい言語だからということが挙げられると思っています。

ソーシャル・コーディングというのは、アメリカのスタートアップであるGitHubが作った造語で、それまでのオープンソース開発と違ってSNS仕立てでオンラインの開発が進んでいく仕組みのことです。

要は、自然言語ではなくてプログラミング言語で語り合ったり殴り合ったりするSNSですね。Rubyが人間の言語に近くて読み書きしやすいせいか、Rubyで書かれたPull Requestはすごく簡潔でわかりやすいことが多い。なので、非常にソーシャル・コーディング向きです。

こういったソーシャル・コーディングが2008年にやってくるということを見越して1993年から読みやすい言語を設計していたとしたら、まつもとさんは本当に先見の目がある天才だなぁと関心しますね。

それから、RubyGems という標準のパッケージ管理システムもソーシャル・コーディングに一役買っています。開発者が自分の作ったライブラリをGemという単位でインターネットに公開、それを誰でもダウンロードして自分のシステムで使うことができる、というやつです。

この仕組み自体は2000年代の初頭からRuby本体に備わっているのですが、さらにBundlerという、RubyGemsの足りない部分を補うパッケージングシステムのようなものをRailsのコアチームで開発しました。いまこれがRailsのアプリを書く上での標準セットになっていると思うんですが、おかげでいろんなライブラリを作っては公開してというソーシャル・コーディング時代でも、数あるライブラリから目的のものを選べるようになりました。

なので、ソーシャル・コーディング時代に合わせてこの優れたパッケージ管理システムがちょうど作られたっていうのもすごくRuby界にとっては追い風になった現象かなと思います。

また、これもわたしがRubyが好きなひとつの理由なんですが、言語そのものは先ほど言ったように新しい機能はない普通の言語なんですけども、Rubyistたちは新しいパラダイムを発明・発見したがるんですよ。

CoCフレームワーク、BDD、Ajax、RESTといったような様々なパラダイムがRuby/Rails界隈で流行して定着していきました。こうした新しいやり方がRubyから出てくることが多いので、Rubyに触れていると新たなパラダイムを日々発掘できるという楽しみがあります。

それで、新しいものが出てきたときにすぐに自分の手元のRailsアプリで試せるし、Rubyコミュニティの中に作者がいたり、オピニオンリーダーみたいな人がいたりするのが楽しいところです。

またRuby界では、なんとか.rbというユーザーグループが多いです。これはSeattle.rbが一番最初なんですが、それに憧れて作ったAsakusa.rbは毎週火曜日に集まって、Rubyをハックしたりライブラリを作ったりという生産的な活動をしようという方針でやっています。

日本以外でもたくさんの国で頻繁にカンファレンスが開催されており、そうしたオフラインでの活動が活発というのも特徴です。世界中に友達ができるという楽しみもありますね。

公開されているものを使うには「覚悟」も必要

RubyもRailsも、それに他のライブラリも基本的に無料で利用できます。なので、世界の誰かが作ってくれた仕組みをタダで利用して、楽に開発できます。これは俗に「巨人の肩に乗る」ってやつで、そうしたライブラリを組みあわせるだけで納品物の9割5分は作れてしまう。おすすめのやり方です。

ですが、いいことばっかりではないのでいい加減なことを言ってはいけません。他者が書いたコードを自分のアプリケーションの一部に組み込んで使うことには覚悟も必要です。それらはすべて公開されているものなので、中身を自分が読むことができるんですね。なので、お客さんに提供しているものの中で、自分が書いたアプリケーションと他人が書いたコードの間に境目なんてないんですよ。バンドルしたGemは、自分のアプリの一部なんです。

なので、もしそれがバグっていたら、そのバグを自分が出してしまったバグと同等に自分が引き受ける覚悟が必要だとわたしは思っています。それが、お客さんにシステムを提供する側として最低限の誠実さだと思います。

だから、バクがあったら直しながら使っていきましょう、ということです。意外と楽だけじゃないんですね。

では、具体的にどうしたら良いのか。理想を言えば、ソースコードは全部読んでほしいわけです。それに、Railsを使っているうちにきっとバグを踏むので、そうしたらせめて自分が発見したバグくらいは直していってほしいです。

こうしたことを日常的にやっていると、よくOSS(Open Source Software)貢献とかって言われるんですけど、わたしは貢献という言葉がニュアンス的に嫌いで…。貢献というとどこか慈善事業っぽいじゃないですか、自分を犠牲にして人のために尽くすみたいな。

そんな立派な心構えではなく、「目の前にゴミが落ちているから拾いました」ぐらいの感覚で自分が使っているオープンソースライブラリくらいは綺麗にしていけるといいなぁと思っています。

こんな感じで開発者をやっていると、コミット権がどんどん降ってくるんですね。いろんなライブラリが結構バグってるので、「バグ直しといたよ」というと、「コミット権あげるから直接直して」って言われて色々コミット権が増えてしまっています(笑)

OSSとの付き合い方

無料で使えて便利なだけではない、という話がもう一つあります。

OSSに限っていえば、いわゆる「枯れたバージョン」は存在しません。毎日改良していっているものなので、必ず新しいバージョンを使ってください。最新版では直っているバグやセキュリティホールもソースコードの形で全て公開されているので、古いバージョンを使うのは危険でしかないです。それで、フレームワークやライブラリなどをアップデートし続ける必要がありますし、そのためのメンテナンスコストを払っていかないといけません。また、E2E(End to End)テストをしっかり書くことにもコストを払って、アップデートでアプリが壊れていないことを担保できるようにすべきです。

でも、最新のものを使うのは危ないからだけじゃなく、いいこともあるからです。数々の新機能を使える楽しさもありますし、特にRubyは単純にバージョンを上げれば上げるほどパフォーマンスが向上する魔法のような言語なので、非常にお得感があります。次のクリスマスに出すRuby 2.3も、もしかしたらめちゃくちゃ速くなる可能性があって、ひとつわたしが提案して入れてもらった、Stringリテラルをデフォルトfrozenにするマジックコメント、みたいのがあるんですけど、それがこのままちゃんと着陸できれば、アプリケーション全体のスループットが速くなる可能性があるので、楽しみにしています。

それと、個人的な一番の楽しみなんですが、世界に先駆けて新しいバージョンを使うと世界に先駆けてバグが踏めるので、とても楽しいです(笑)。なので、とにかく新しいバージョンを使うのがおすすめです。

Rubyの歩き方

Rubyの情報を手に入れる方法ですが、まず基本として、すべてインターネット上にあります。そして、全部オープンソースなので、ソースコードはリポジトリにあります。

「仕様もバグもなにもかもすべてソースコードに書いておいた」というのはまつもとさんの名言なんですが、彼はドキュメントやテストを書くのが嫌いだったんですね。なので、「仕様わかんないよ」と言われると、「仕様はソースコードに書いてあるじゃん、バグまで一緒に書いてあるじゃん」と返していたんですが、最近はそんなやんちゃなことは言わなくなりました。ドキュメントをちゃんと書いてくれるコミッターも増えて、最近はすごく資料が充実しています。例えば、Rubyであれば公式ドキュメント、RailsであればRuby on Rails Guidesがあります。インターネットでそうした一次情報を確認していただくのが第一歩かと思います。

ただし、一次情報は英語であることが多いです。Railsはもちろん、Rubyも今や国際言語なので、海外の方も開発に参加できるよう日本人同士でもなるべく英語でやりとりしています。が、難しい英語は使われていないので、ビビらずに英語でコミュニケーションを取ってみてください。

とはいえ、さっきと言ってることが矛盾してしまうのですが、Rubyは世界で唯一、コア部分に関する一次情報が日本語で手に入るプラットフォームでもあります。そんなこと普通はありえないのですが、Rubyに関してはなぜか主要コミッターがみんな日本人なので、日本語で質問したら作者たちから日本語で答えが返ってくるという贅沢な環境になっています。これは、ある意味Rubyやっててラッキー、日本人のプログラマーとして今Rubyをやらないなんてもったいない、そう思えるところです。

正しいRailsの情報を日本語で読める、”WEB+DB PRESS”の58号や73号あたりの記事や、Rubyist Magazineはそうした日本語で読める一次情報の一つで、特にRubyist Hotlinksはすごくオススメです。

12月にはRubyKaigiが開かれますので、続きはRubyKaigiにしましょう。みなさん是非いらして下さい!

第二部、後藤大輔氏の講演レポート(後編)はこちら forkwell.hatenadiary.jp