体験を伝える―『ガジェット通信』の考え方

面白いものを探しにいこう 本物を体験し体感しよう 会いたい人に会いに行こう 見たことのないものを見に行こう そしてそれをやわらかくみんなに伝えよう [→ガジェ通についてもっと詳しく] [→ガジェット通信フロアについて]

Rubyのなかを覗いてみよう!「Cookpad Ruby Hack Challenge」に参加してみた

「Cookpad Ruby Hack Challenge」とは

「Cookpad Ruby Hack Challenge」は、Rubyというプログラミング言語がコンピューターの上でどう動いているのかを知り、ハックしてみるイベントです。8月30日から31日にかけて2日間、クックパッドのオフィスにて開催されました。

このイベントは「Rubyのインタプリタをハックする」という超ディープな内容なのですが、なんと10人の募集枠に約100人もの応募があったのだそう。すごい。今回の参加者は、すこし応募枠を拡大して15人ほどでした。

そんなディープな超人気イベントを、Rubyは好きだけど「インタプリタ」の「イ」の字も知らない私池澤がレポートします!

Rubyに日常的に触れている方は、一度は「Rubyってどうやって動いているんだろう」と思ったことがあるのではないでしょうか。

Rubyで書かれたプログラムは、Rubyのインタプリタ「MRI(Matz Ruby Interpreter)」で解釈され、実行されます。

このインタプリタに機能を追加したり、改良したり、性能を向上させるにはどうすればいいのかを学んでいきます。

今回講師をしてくださるのは、Rubyのコアコミッタである笹田耕一さん。笹田さんは、Rubyがより早く動くためのエンジン「YARV」の開発者で、現在はクックパッド社でフルタイムでRubyを開発しています。

インタプリタを知れば、プログラミング言語の仕組みがわかる!

インタプリタとは一体何をしているのでしょうか。インタプリタというと何やら難しいことをやってそうに聞こえますが、つまり「プログラムを読んで実行する」ということをしています。

具体的には、まずプログラムをパースしてツリー構造(抽象構文木、AST)に、そして更にそれをいわゆる「コンピューター語」であるバイトコードに変換します。これが「読んで解釈する部分」部分。

そしてそのバイトコードを、評価器(evaluator)が読み、実行していきます。これが「プログラムを実行する」部分となっています。

これはRubyに限定したことではなく、JavaやPythonなどの言語も、似たような仕組みで動いています。

▲笹田さんのスライド「Cookpad 17 day Tech internship 2017 言語処理系入門 Rubyをコンパイルしよう」より。ちなみに笹田さんは「YARV」を開発し、バイトコードの解釈をいかに高速化するかという課題に取り組まれています。Rubyが高速化したのも笹田さんのおかげ!

ちなみに、Rubyが誕生してから今年で24年になります。「24年間も開発されていれば、あまり変更されるところもないのでは?」と思う方もいらっしゃるかもしれませんが、プログラミング言語をとりまく環境(例えば、Rubyが動いているOSであったり、コンピューターの性能であったり)というのは目まぐるしく変わっていきます。

そして、ユーザーが求めることも変わっていきます。それに合わせて、現在もなお開発が続けられているというわけです。

Matzが語る、100年先を見据えた言語設計とは

イベントでは、Rubyの生みの親であるまつもとゆきひろさんの特別講義も行われました。

笹田さんからの「いい話をしてください」というオーダーに対し、「Ruby開発と互換性」についてお話されていました。

まつもとさんによると、ブログラミング言語は、常に進化していないといけないけれど、進化しすぎてもいけないというパラドックスを抱えているそうです。

なぜなら、ユーザーは刺激を求めて新しいものを好む傾向にあるけれど、使う人が増えれば増えるほどコミュニティは言語の変化を好まない傾向にあるからです。

例えば、PHP5からPHP6へのアップデートでは、かなり革新的な変更を行ったらしいのですが、革新的であるがゆえにコミュニティに受け入れられず、最終的にはPHP6自体が廃止になったという過去があります。

Rubyは、目先の流行に流されず(今でいうと静的型の導入など)、100年先も通用するような言語を目指して、倦まず弛まず開発が続けられています。

ちょうどRubyコミッターが集まる会議もクックパッドで開催されており、会場にはたくさんのコミッターが集まりました。

イベント参加者がコミッターの方に質問をしまくる「コミッターQ&Aセッション」も行われました。

Rubyの中身をいじってみよう!

1 2 3次のページ
CodeIQ MAGAZINEの記事一覧をみる
  • 誤字を発見した方はこちらからご連絡ください。
  • ガジェット通信編集部への情報提供はこちらから
  • 記事内の筆者見解は明示のない限りガジェット通信を代表するものではありません。