お気に入りタイトル/ワード

タイトル/ワード名(記事数)

最近記事を読んだタイトル/ワード

タイトル/ワード名(記事数)

LINEで4Gamerアカウントを登録
[CEDEC 2011]「Ruby」がやがてゲームエンジンに組み込まれるかもしれない。まつもとゆきひろ氏が語る,Rubyの過去と現在,そして未来
特集記事一覧
注目のレビュー
注目のムービー

メディアパートナー

印刷2011/09/09 17:02

イベント

[CEDEC 2011]「Ruby」がやがてゲームエンジンに組み込まれるかもしれない。まつもとゆきひろ氏が語る,Rubyの過去と現在,そして未来

ネットワーク応用通信研究所フェロー,まつもとゆきひろ氏。楽天株式会社楽天技術研究所フェロー,Rubyアソシエーション理事長,Heroku チーフアーキテクトも務める
画像集#001のサムネイル/[CEDEC 2011]「Ruby」がやがてゲームエンジンに組み込まれるかもしれない。まつもとゆきひろ氏が語る,Rubyの過去と現在,そして未来
 CEDEC 2011の最終日となる2011年9月8日,プログラミング言語「Ruby」の開発者として知られる,まつもとゆきひろ氏の講演が行われた。日本を代表するソフトウェア技術者の一人といっていいほど高い知名度を誇る同氏だが,「Ruby=Webアプリの開発言語」というイメージが強く,ゲームの世界に深い関わりがあるようには思えないかもしれない。
 だが,ソーシャルゲームなどのサーバーサイド言語として多くの採用実績があり,また,ゲームエンジンに組み込まれることの多い軽量言語(Lightweight Language:LLなどという)という観点からもゲーム開発に無関係なわけではない。というわけで,「Ruby開発が教えてくれたこと」と題された,まつもとゆきひろ氏の講演をレポートしよう。


プログラマーが「気分よくなる」言語を
目指して開発されているRuby


 Rubyとは,まつもとゆきひろ氏が開発したスクリプト言語で,オープンソースで開発が進められ,主としてWebアプリの開発やサーバーサイドプログラミングにワールドワイドで利用されている。おそらく,日本で生まれたプログラミング言語としては世界で最も普及しているものの一つだろう。
 そんなRubyも,現在のところゲーム開発と関係が深いとは言いがたい。理由は後述するが,今回のCEDEC 2011に招待されたまつもと氏も「アウェー感があった」そうだが,その後「サーバーサイドや,プロダクションレベルでRubyを使っていると会場で聞いたので気が楽になった」とのこと。

 講演の最初のテーマは「Rubyが何を目指して開発されている言語なのか」ということだった。先に書いてしまうと“プログラマーの気分がよくなる”ことを目指しているそうだが,それがどういうことかを説明するため,まつもと氏は自分のプログラミング歴を語り始めた。

画像集#005のサムネイル/[CEDEC 2011]「Ruby」がやがてゲームエンジンに組み込まれるかもしれない。まつもとゆきひろ氏が語る,Rubyの過去と現在,そして未来
 まつもと氏のプログラミングは,小学生のときに「父親から奪い取った」ポケットコンピュータのBASICから始まるという。1980年頃の話だ。
 BASICでプログラミングを始めたまつもと氏は,やがて世の中にはBASIC以外のプログラミング言語があることを知るようになった。高校生になる頃にはPCが欲しかったが「PCは当時20万円を超える高価なもので,趣味のために買ってくれとは言えなかった」(まつもと氏)ので,雑誌を読んで我慢していたそうだ。もちろん,雑誌に掲載されたプログラミング言語の記事がお目当てだ。

 まつもと氏は「高校生のときに『Pascal入門』を買ってきて勉強した」そうだが,そのとき苦労したのが「再帰呼び出し」だったという。Pascalとはプログラミング言語の一つ,そして再帰呼び出しとはプログラミング技法の一つで,例えばある関数が自分自身を呼び出すような手続きを指す。再帰呼び出しを実現するためには,ローカル変数という仕組みが必要になるが,最近のプログラミング言語はほとんどがローカル変数を持っており,再帰呼び出しを認めているが,古典的なBASICはその仕組みを持っていない。
 「BASICにローカル変数がなかったので,再帰呼び出しはできなかった。だからPascalの本を読んでいたとき再帰という考え方が分からなかった。だが,3日目にようやく理解した。再入時のローカル変数(の値)が違うんだと」(まつもと氏)。
 こうした経験を語ったうえで,まつもと氏はSapir-Whorf仮説を取り上げた。

Sapir-Whorf仮説というのは,使っている言語が思考に影響を及ぼすという仮説。まつもと氏は,この仮説がプログラミングにも当てはまるという
画像集#006のサムネイル/[CEDEC 2011]「Ruby」がやがてゲームエンジンに組み込まれるかもしれない。まつもとゆきひろ氏が語る,Rubyの過去と現在,そして未来 画像集#002のサムネイル/[CEDEC 2011]「Ruby」がやがてゲームエンジンに組み込まれるかもしれない。まつもとゆきひろ氏が語る,Rubyの過去と現在,そして未来

 Sapir-Whorf仮説とは,簡単に言って「使用している言語が思考に影響を及ぼす」という仮説だ。まつもと氏が挙げた例を紹介すると「アマゾンには数を表現する単語が1,2,3,たくさん,しかない言語がある。このような言語では数学の概念を構築することができない」。また,「イヌイットの言語には,雪と氷を表現する単語が80から90あるといわれている。だからイヌイットの言語を使うと(雪や氷を)豊かに表現できる」といったようなことだ。

 批判もあるようだが,Sapir-Whorf仮説には一定の説得力があり,まつもと氏は自身の経験,つまりBASICしか知らないゆえに再帰が理解できなかったという経験を以て,プログラミング言語にも,この仮説が適用できると語った。

開発効率は気分に大きく左右されると,まつもと氏はいう
画像集#007のサムネイル/[CEDEC 2011]「Ruby」がやがてゲームエンジンに組み込まれるかもしれない。まつもとゆきひろ氏が語る,Rubyの過去と現在,そして未来
 やがて,Rubyを開発することにしたまつもと氏が,自身のそんな経験で着目したのは,開発効率だという。「開発効率や開発にかかるコストは,プログラミング言語によって大きく変わる。プログラミング言語が発想を助けることもある。どのプログラミング言語を選ぶかが,ソフトウェアの生産性に直結すると思う」(まつもと氏)。では生産性を上げるためには何が重要かというと,それは“気分”だと言うのだ。
 「これまで気分はあまり重視されていなかった要素だが,重要だと思う。プログラマーはどういうときに気分がいいか? それは自分が思ったとおりにプログラムが書けるとき,悩まなくてすむときに気分がいいんです」。

 プログラマーは,自分が書いたプログラムが思いどおりにサクサク動くときに気分がいいというわけだ。そのときに得られる万能感こそ,プログラマーが求める最大の報酬かもしれない。これは,プログラムを書いたことがある人なら誰でも感じることだろう。反対に「すごいゲームが作りたいという熱意があっても,出来上がったものがショボかったりする。熱意と現実にギャップがあるときにがっかりする」とまつもと氏は言う。
 ライブラリやプログラミング言語の助けを得てプログラマーの気分がよくなるのは,開発効率において非常に重要なこと。Rubyはそんな,気分が良くなる言語を目指して開発されているのだ。


コンピュータ資源を「人間のために使っていい時代」


 まつもと氏はここで「ブルックスの法則」を紹介した。

ブルックスの法則というのは,プログラミング言語「FORTRAN」などの開発に携わったIBMのフレデリック・ブルックス氏によって提唱された経験則で,人間が1日に書けるプログラムの量(行数)は言語によらず同じだというもの
画像集#008のサムネイル/[CEDEC 2011]「Ruby」がやがてゲームエンジンに組み込まれるかもしれない。まつもとゆきひろ氏が語る,Rubyの過去と現在,そして未来
 これは「プログラマーが書けるプログラムの量(コードの行数)は言語にかかわらず一定」という経験則だという。ブルックスの法則としては「遅延したソフト開発に,新たな人員を投入しても,結果はさらに遅れるだけ」というのがよく知られているが,こういうことも言っているらしい。いずれにせよ,この法則から,少ない行数で多くのことが実現できるプログラミング言語ほど生産性が高く,プログラマーは気分よく仕事が出来るという理屈になる。
 Rubyがいかにプログラムの簡潔さを重視して作られたかを示す例証として,まつもと氏は階乗を求めるプログラムを示した。

画像集#009のサムネイル/[CEDEC 2011]「Ruby」がやがてゲームエンジンに組み込まれるかもしれない。まつもとゆきひろ氏が語る,Rubyの過去と現在,そして未来
これはJavaで階乗を求めるプログラムの例。再帰呼び出しが使われている
画像集#010のサムネイル/[CEDEC 2011]「Ruby」がやがてゲームエンジンに組み込まれるかもしれない。まつもとゆきひろ氏が語る,Rubyの過去と現在,そして未来
こちらはRubyで階乗を求める一例。基本はJavaと同じだがやや簡潔になっている

Rubyでは同じ処理をこのようにも書けるという。掛け算を「挟み込む」(inject)という構文が使われている
画像集#011のサムネイル/[CEDEC 2011]「Ruby」がやがてゲームエンジンに組み込まれるかもしれない。まつもとゆきひろ氏が語る,Rubyの過去と現在,そして未来
 まつもと氏はJavaの例を示しつつ「public,staticとか腹が立つが,これを書かないとコンパイラが文句を言う。でも我々はコンパイラのために働いているわけではない」と切り捨てた。確かに,publicやstaticという宣言は処理系の都合であり,階乗を求めるという本質とは無関係だ。まつもと氏は,こうしたプログラミング言語の都合を満たす記述を「屈辱」とし,かなり嫌っている。
 「アルゴリズムの教科書に擬似コードというものがある。そのような仮想言語でアルゴリズムが書けるなら,それで書けばいい」ということで,Rubyは疑似言語のような簡潔な言語を目指しているのだ。
 簡潔な記述を目指すうえで重要になるのが,抽象化だ。

 繰り返しには,C言語などの場合,for文を使うのが一般的だが「変数iを初期化しインクリメントする。それはループするという本質とは関係ない。(for文は)実装が漏れ出している」とまつもと氏は言う。コンピュータの都合が言語に漏れ出ているという指摘だ。ちなみに,JavaではRubyのように「繰り返す」という構文があとから付け加えられたりしている。

画像集#004のサムネイル/[CEDEC 2011]「Ruby」がやがてゲームエンジンに組み込まれるかもしれない。まつもとゆきひろ氏が語る,Rubyの過去と現在,そして未来
 そのほかにも,C言語などで使われる32ビット整数では13以上の階乗が計算できないといった“実装が漏れ出している例”を挙げ,そうしたコンピュータの都合にプログラマーが振り回されるのはもはや古いとする。「コンピュータが速く動くために人間が苦労するのは古い。10万円のPCの性能は昔のスーパーコンピュータより高いのだから,計算を節約するのはバカバカしい,計算力を人間のために使っていい時代だ」というわけだ。
 Rubyは簡潔な記述ができ,高度に抽象化されているが,反面,それはコンピュータにとって重い処理であることを意味する。講演でもまつもと氏は「Rubyは重い」と認めていたが,重いことはもはや罪ではないというのがRubyのスタンスだ。

 冒頭でも少し触れたように,Rubyがゲーム開発にあまり利用されない理由もここにある。ゲームプログラミングでは,ハードの性能を究極まで引き出す必要に迫られることが多く,そのためには“実装が漏れ出す”ような言語を駆使して,ギリギリの最適化が必要になる。そのため,Rubyのように高度に抽象化された重い言語は使いにくいわけだ。
 しかし,その状況も変わっていくかもしれない。


軽量言語をめざすRubyの新しいプロジェクトに注目


 「ユーザーは100万人,という推定もある」とまつもと氏がいうほど普及したRubyだが,それに満足せず,Rubyに絶えず新たな課題を与え,常に開発プロジェクトとして「フレッシュな状態を続けていきたい」と語る。
 Rubyがこれから取り組むべき課題として,汎用性を高めるさまざまな取り組みが説明された。ゲーム的に注目すべきなのが,その中の「RiteVM」というプロジェクトだ。

現状ではサーバーサイド言語やWebアプリの開発がメインのRubyを,いずれ組込み分野などへ広げていくという課題が挙げられた
画像集#012のサムネイル/[CEDEC 2011]「Ruby」がやがてゲームエンジンに組み込まれるかもしれない。まつもとゆきひろ氏が語る,Rubyの過去と現在,そして未来 画像集#003のサムネイル/[CEDEC 2011]「Ruby」がやがてゲームエンジンに組み込まれるかもしれない。まつもとゆきひろ氏が語る,Rubyの過去と現在,そして未来

 冒頭でゲームエンジンに軽量言語の処理系が組み込まれていることを述べたが,組み込みの条件としては,処理系が軽いことや移植しやすいことが挙げられ,現在では「Lua」という言語の人気が高い。
 まつもと氏はLuaについて「とても良い言語」としつつも「処理系としては素晴らしいが,言語として見たときには辛いところがある」という。そこで「RubyだけどLuaっぽいものを作ろう」ということでスタートしたのが,RiteVMというプロジェクトだそうだ。
 Luaのような軽量でポータビリティ(移植性)に優れたRubyを作ろうというプロジェクトで,現在のRubyと大枠での互換性を維持しつつ,組込みでは不要となるI/O部分など,コンポーネントごとの分離を可能にしたものだ。RiteVMは標準C言語(C99)で記述されているので,移植性が高いといった特徴もあるという。

 Rubyの特徴であるシンプルで気分がいい記述ができ,なおかつLua並に軽く,移植性に富むとなれば,ゲームエンジン組込み用の言語として脚光を浴びる可能性が大いにある。RiteVMは2011年10月にクローズドβテストが始まり,最終的にはオープンソースとして公開する予定だと語っていたので,その点からも組み込みやすい言語だといえそうだ。来年,または再来年のCEDECには,もしかして,ゲームエンジンで使われるRubyのセッションが用意されているかもしれない。

軽量なRubyを開発するRiteVMプロジェクトが進められている(右)。RiteVMは2011年10月にβテストがスタートし,2012年の3月に正式リリースされる予定になっている。ライセンスは未定(まつもと氏としてはMITライセンスを希望している)だが,オープンソースとして公開したいとのこと。Luaに代わるゲーム組込み言語として,注目される可能性がありそうだ(左)
画像集#013のサムネイル/[CEDEC 2011]「Ruby」がやがてゲームエンジンに組み込まれるかもしれない。まつもとゆきひろ氏が語る,Rubyの過去と現在,そして未来 画像集#014のサムネイル/[CEDEC 2011]「Ruby」がやがてゲームエンジンに組み込まれるかもしれない。まつもとゆきひろ氏が語る,Rubyの過去と現在,そして未来
  • この記事のURL:
4Gamer.net最新情報
プラットフォーム別新着記事
総合新着記事
企画記事
スペシャルコンテンツ
注目記事ランキング
集計:12月27日〜12月28日