イベント
[CEDEC 2011]「Ruby」がやがてゲームエンジンに組み込まれるかもしれない。まつもとゆきひろ氏が語る,Rubyの過去と現在,そして未来
だが,ソーシャルゲームなどのサーバーサイド言語として多くの採用実績があり,また,ゲームエンジンに組み込まれることの多い軽量言語(Lightweight Language:LLなどという)という観点からもゲーム開発に無関係なわけではない。というわけで,「Ruby開発が教えてくれたこと」と題された,まつもとゆきひろ氏の講演をレポートしよう。
プログラマーが「気分よくなる」言語を
目指して開発されているRuby
Rubyとは,まつもとゆきひろ氏が開発したスクリプト言語で,オープンソースで開発が進められ,主としてWebアプリの開発やサーバーサイドプログラミングにワールドワイドで利用されている。おそらく,日本で生まれたプログラミング言語としては世界で最も普及しているものの一つだろう。
そんなRubyも,現在のところゲーム開発と関係が深いとは言いがたい。理由は後述するが,今回のCEDEC 2011に招待されたまつもと氏も「アウェー感があった」そうだが,その後「サーバーサイドや,プロダクションレベルでRubyを使っていると会場で聞いたので気が楽になった」とのこと。
講演の最初のテーマは「Rubyが何を目指して開発されている言語なのか」ということだった。先に書いてしまうと“プログラマーの気分がよくなる”ことを目指しているそうだが,それがどういうことかを説明するため,まつもと氏は自分のプログラミング歴を語り始めた。
BASICでプログラミングを始めたまつもと氏は,やがて世の中にはBASIC以外のプログラミング言語があることを知るようになった。高校生になる頃にはPCが欲しかったが「PCは当時20万円を超える高価なもので,趣味のために買ってくれとは言えなかった」(まつもと氏)ので,雑誌を読んで我慢していたそうだ。もちろん,雑誌に掲載されたプログラミング言語の記事がお目当てだ。
まつもと氏は「高校生のときに『Pascal入門』を買ってきて勉強した」そうだが,そのとき苦労したのが「再帰呼び出し」だったという。Pascalとはプログラミング言語の一つ,そして再帰呼び出しとはプログラミング技法の一つで,例えばある関数が自分自身を呼び出すような手続きを指す。再帰呼び出しを実現するためには,ローカル変数という仕組みが必要になるが,最近のプログラミング言語はほとんどがローカル変数を持っており,再帰呼び出しを認めているが,古典的なBASICはその仕組みを持っていない。
「BASICにローカル変数がなかったので,再帰呼び出しはできなかった。だからPascalの本を読んでいたとき再帰という考え方が分からなかった。だが,3日目にようやく理解した。再入時のローカル変数(の値)が違うんだと」(まつもと氏)。
こうした経験を語ったうえで,まつもと氏はSapir-Whorf仮説を取り上げた。
Sapir-Whorf仮説とは,簡単に言って「使用している言語が思考に影響を及ぼす」という仮説だ。まつもと氏が挙げた例を紹介すると「アマゾンには数を表現する単語が1,2,3,たくさん,しかない言語がある。このような言語では数学の概念を構築することができない」。また,「イヌイットの言語には,雪と氷を表現する単語が80から90あるといわれている。だからイヌイットの言語を使うと(雪や氷を)豊かに表現できる」といったようなことだ。
批判もあるようだが,Sapir-Whorf仮説には一定の説得力があり,まつもと氏は自身の経験,つまりBASICしか知らないゆえに再帰が理解できなかったという経験を以て,プログラミング言語にも,この仮説が適用できると語った。
「これまで気分はあまり重視されていなかった要素だが,重要だと思う。プログラマーはどういうときに気分がいいか? それは自分が思ったとおりにプログラムが書けるとき,悩まなくてすむときに気分がいいんです」。
プログラマーは,自分が書いたプログラムが思いどおりにサクサク動くときに気分がいいというわけだ。そのときに得られる万能感こそ,プログラマーが求める最大の報酬かもしれない。これは,プログラムを書いたことがある人なら誰でも感じることだろう。反対に「すごいゲームが作りたいという熱意があっても,出来上がったものがショボかったりする。熱意と現実にギャップがあるときにがっかりする」とまつもと氏は言う。
ライブラリやプログラミング言語の助けを得てプログラマーの気分がよくなるのは,開発効率において非常に重要なこと。Rubyはそんな,気分が良くなる言語を目指して開発されているのだ。
コンピュータ資源を「人間のために使っていい時代」
まつもと氏はここで「ブルックスの法則」を紹介した。
Rubyがいかにプログラムの簡潔さを重視して作られたかを示す例証として,まつもと氏は階乗を求めるプログラムを示した。
これはJavaで階乗を求めるプログラムの例。再帰呼び出しが使われている |
こちらはRubyで階乗を求める一例。基本はJavaと同じだがやや簡潔になっている |
「アルゴリズムの教科書に擬似コードというものがある。そのような仮想言語でアルゴリズムが書けるなら,それで書けばいい」ということで,Rubyは疑似言語のような簡潔な言語を目指しているのだ。
簡潔な記述を目指すうえで重要になるのが,抽象化だ。
繰り返しには,C言語などの場合,for文を使うのが一般的だが「変数iを初期化しインクリメントする。それはループするという本質とは関係ない。(for文は)実装が漏れ出している」とまつもと氏は言う。コンピュータの都合が言語に漏れ出ているという指摘だ。ちなみに,JavaではRubyのように「繰り返す」という構文があとから付け加えられたりしている。
Rubyは簡潔な記述ができ,高度に抽象化されているが,反面,それはコンピュータにとって重い処理であることを意味する。講演でもまつもと氏は「Rubyは重い」と認めていたが,重いことはもはや罪ではないというのがRubyのスタンスだ。
冒頭でも少し触れたように,Rubyがゲーム開発にあまり利用されない理由もここにある。ゲームプログラミングでは,ハードの性能を究極まで引き出す必要に迫られることが多く,そのためには“実装が漏れ出す”ような言語を駆使して,ギリギリの最適化が必要になる。そのため,Rubyのように高度に抽象化された重い言語は使いにくいわけだ。
しかし,その状況も変わっていくかもしれない。
軽量言語をめざすRubyの新しいプロジェクトに注目
「ユーザーは100万人,という推定もある」とまつもと氏がいうほど普及したRubyだが,それに満足せず,Rubyに絶えず新たな課題を与え,常に開発プロジェクトとして「フレッシュな状態を続けていきたい」と語る。
Rubyがこれから取り組むべき課題として,汎用性を高めるさまざまな取り組みが説明された。ゲーム的に注目すべきなのが,その中の「RiteVM」というプロジェクトだ。
冒頭でゲームエンジンに軽量言語の処理系が組み込まれていることを述べたが,組み込みの条件としては,処理系が軽いことや移植しやすいことが挙げられ,現在では「Lua」という言語の人気が高い。
まつもと氏はLuaについて「とても良い言語」としつつも「処理系としては素晴らしいが,言語として見たときには辛いところがある」という。そこで「RubyだけどLuaっぽいものを作ろう」ということでスタートしたのが,RiteVMというプロジェクトだそうだ。
Luaのような軽量でポータビリティ(移植性)に優れたRubyを作ろうというプロジェクトで,現在のRubyと大枠での互換性を維持しつつ,組込みでは不要となるI/O部分など,コンポーネントごとの分離を可能にしたものだ。RiteVMは標準C言語(C99)で記述されているので,移植性が高いといった特徴もあるという。
Rubyの特徴であるシンプルで気分がいい記述ができ,なおかつLua並に軽く,移植性に富むとなれば,ゲームエンジン組込み用の言語として脚光を浴びる可能性が大いにある。RiteVMは2011年10月にクローズドβテストが始まり,最終的にはオープンソースとして公開する予定だと語っていたので,その点からも組み込みやすい言語だといえそうだ。来年,または再来年のCEDECには,もしかして,ゲームエンジンで使われるRubyのセッションが用意されているかもしれない。
- この記事のURL: