土屋つかさの技術ブログは今か無しか

土屋つかさが主にプログラミングについて語るブログです。

「短編小説:叔父さんと私と『DXRuby』(あるいは、なぜラノベ作家は過去MSXという8bitパソコンを愛し、現在DXRubyでゲームを作るのか)」

 DXRuby Advent Calender 2013 23日目です。オーラス近し! 前回は土井ヴィさんのDXRuby製のゲームに通信機能を組み込むでした。みんな面白いこと考えてるなー。

 今回はせっかくなので、クリスマスプレゼント的な意味を込めて、短編小説を書いてみました。技術的な話はほとんど書いていないので、読み物として楽しんで貰えればと思います、プログラミングに関わる箇所はChap.3とChap.4だけなので、そこだけ読むんでも全然OKだと思います。
 それでは、メリークリスマス!

登場人物

千堂紅葉(せんどう・くれは) 私。十六歳。高校生。特に将来の夢とかはない。週に数回、バイト代を貰って黒澤の家に夕食を作りに行く。

黒澤創二(くろさわ・そうじ) 紅葉の叔父。二十八歳。元プログラマー、元ゲームプランナーのライトノベル作家。あまり売れていない。生活力が皆無。

開始前の余計な注釈

その1

 この短編に登場する二人は、土屋の未発表日常ミステリ作品の登場人物です。まだ刊行先が決まっていません(というか原稿も完成してない)が、機会が巡れば作品をお届け出来るかと思います(興味のある出版社様はご連絡下さい)。

その2

 自伝的な話になっていますが、黒澤創二のモデルは土屋ではありません。年齢も違いますし、こんな姪っ子もいません。また、キャラの各設定は商業出版時に変更される可能性があります。黒澤がMSXユーザーだったという話も今回だけのオリジナル、ということにひとまずしておきます。

Chap.1 叔父さんと私

「メリークリスマス! 可愛いサンタがやって来ましたよ! さあ褒める用意!」
 私、千堂紅葉(せんどう・くれは)がそう言って書斎に入ると、パソコンから顔を上げた叔父さんの黒澤創二(くろさわ・そうじ)は呆気に取れた顔になった。
「……それ、どこで着替えたの?」
「トイレだけど?」
「あのね紅葉。君は仮にも十六歳の女の子なんだから、他人の男の家で着替えとかするべきじゃないと思うよ」
「叔父さんのマンションのトイレで着替えするくらいいいじゃん! お風呂を借りたこともあるし、お泊まりしたこともあるよ。叔父さんは他人の男じゃないよ」
「そういう問題じゃなくてだな。いや、考えてみるとそれもそもそも問題じゃないか?」
 どうも形勢が悪くなって気がしてきたので急いで話題を変える。
「それよりどう? 可愛いでしょ?」
 その場でくるりと回転。へそ出しミニスカサンタ姿を見せつけて、改めて感想を強要する。早く可愛いって言え。早く言ってくれないとこっちが照れてきちゃうから!
 叔父さんは胸元逸らせポーズで立っている私をじっと見つめる。ん、ちょっと恥ずかしくなってきたぞ。男の人の視線が熱い。顔が熱くなる。ちょっと逃げたくなってきた。
 やがて、叔父さんは猫背気味の背中を椅子に預けて、いつもの調子で答えた。
「露出がちょっと高いと思うんだけど、それホントに子供用の衣装?」
「叔父さんになにかを期待する方が馬鹿だということを私は知っているので気にしない」
 口にすることで自分に言い聞かせるメソッド。瞬時に方針を転換する。よーそろー。
「クリスマスプレゼントを貰いに来ました! 約束してたでしょ! 夕食に招待してくれるって! クリスマスディナー! キャンドルが灯るテーブルで見つめ合う二人!」
「それは断った筈だ。高校生のクリスマスをもっと有意義に使いなさい。別に両親と過ごせなんて言わないから。友達と遊べばいいじゃない。その方が楽しいよ」
「友達と遊ぶより叔父さんとご飯食べる方が有意義なんですー」
 分かりやすく頬を膨らませて怒っているフリ。叔父さんは困ったような顔をして頭を掻く。まあこのくらいにしておくか。攻めすぎてもし拒絶されたら泣くから。私が。
「大丈夫。今夜は友達とクリスマスパーティー! この服はそれ用に友達に借りたの」
 まあ、一番に叔父さんに見て貰いたかったのはホントだけど。それは黙っておく。
「というわけでディナーは我慢するのでクリスマスプレゼントをください」
 ぴしっと頭を下げて、通知表を手渡す。おじさんは中身をちらっと見てすぐ返した。
「……条件は満たしているね」
 今年の春からこの家に入り浸っている私が、ちゃんと学生の本分である勉強をしているのかを叔父さんはいつも気にしていて、「プレゼントが欲しければ、学業で意志を示しなさい」と条件を提示してきたのだ。
 そんなニンジンぶら下げなくても、成績はしっかりキープしてる。じゃないと叔父さんちに行くのをお母さんに禁止されちゃうから。だけど、なんと成績表に「5」がいくつあるかでプレゼントのグレードが変わるという追加レギュレーションが発表されたために、いつもよりちょっと気合い入れて頑張ってしまったのです。ひひーん!
「どう? ちゃんと勉強してるのよ? 安心した?」
「安心した。うちに遊びに来るより学校の友達と遊んでくれるともっと安心するんだけど」
「あーあーあーあー聞こえませーん」
 耳に両手を当てて抗議。それだけは絶対に受けいられないのである。
 叔父さんは諦めたようにため息をつき、机の上のノートPCを閉じて立ち上がった。居間に向かいかけてから、ふと立ち止まってこちらを見る。
「そういえば今日、クリスマスだっけ?」
「気にしない気にしない。いつ掲載されるかわかんないからその辺はボカしておきたいの」
「掲載? なんのこと?」
「いいからいいから! ささ、早くプレゼントちょうだい!」
 女子高生サンタガールは売れないラノベ作家の背中を押して、書斎から追い出した。

Chap.2 権利と義務

 というわけで、居間にやって参りました。ちなみにへそ出しサンタコスは叔父さんの命令で着替えさせられて今は制服に戻ってる。ちえー。
 ふかふかソファで待っていると、寝室から叔父さんが袋を二つ持って出てきた。ちなみに書斎には入れてもらえるのに寝室は「絶対に入ったら駄目」と言われている。なにがあるんだろう。えっちな物とかあったりして。
「叔父さん、いやらしいな……」
「え、なにか言った?」
「いえいえこちらの話。わあ、大きな袋! ……と、小さな袋?」
 ソファの前のガラスのテーブルに二つの袋をゆっくり置くと、どちらもそれなりの重さがあるみたいで、ガラスの天板がごとりと音を立てた。白い麻の袋は、どちらもシンプルな太い赤のリボンで縛ってあった。
 叔父さんは私の隣に拳三つ分離れて座る。これが、今の私と叔父さんの距離。まあ、広くも狭くもない、としておく。
「僕からのクリスマスプレゼントは、この二つだ」
 叔父さんは小さな袋を指さして、
「こっちが『権利』」
 そして、大きな袋の方に指を動かして、
「こっちが『義務』」
 と言った。そして、いつものいたずらっ子みたいな、子供みたいな目を私に向ける。
「『権利には義務が伴う』って言葉知ってるかい?」
「聞いたことはある……かな?」
「実はこれ特に誰の言葉とか、故事のなにかとかではないらしい。ノブリスオブリージュともまた違うしね」
「ノブリスオブリージュ? ってなに?」
「まあそれはまた今度話そう。紅葉、君は君が欲する物を得る『権利』を行使する代わりに、『義務』を負わなければならない。両方得るか、両方諦めるか」
「『どっちか選べ』じゃなくて、どっちも貰うか、どっちも貰わないかを選ぶの?」
「その通り。さあ、どうする?」
「どうするって……」
 テーブルにならんだ二つの袋を見比べる。大きさを除けば、どちらも、中に入っているのは平たい物だと思う。叔父さんの言うことの意味が分からない。
「そんなの、両方貰うに決まってるよ!」
「よし、じゃあ『義務』の方から開けよう」
 大きな袋のリボンをすっと引き抜いて、中身が現れた。

「これ、なに? キーボードにしては大きいよね」
「これはA1−WSX。パナソニックが今より20年以上前に作っていたパソコンだよ」
「パソコン? 本体は?」
「本体とキーボードが一体化してるんだ」
「へー! かわいいね!」
 よく見ると、なんかまるっこくて、おもちゃみたいでかわいい。
「これ、くれるの?」
「あげない」
「え?」
「これは僕の宝物だ。幾ら積まれようとも人に譲るつもりはない。こっちの袋に入っているのは、このパソコンについての思い出話だ」
「思い出話? それが、『義務』?」
「そう。紅葉からプレゼントで欲しい物の候補を聞いた時、急にこれが押し入れにしまってあるのに気づいてね、数年ぶりに取り出したら、この話を誰かにしたくなった。昔の話だし、特に紅葉の役に立つ話でもない。それでも、そっち」
 叔父さんは小さい方の袋を見て、少し悪戯っぽく笑った。
「そっちを欲しければ君は僕の昔話に付き合わなければいけない。それでもいいかい?」
 ……なにを言ってるんだろう。この人。
「いいよ」
 つっけんどんに答えてしまう。叔父さんは少し申し訳なさそうに笑って、
「コーヒーを入れてくる。紅葉はホットココアがいいかな?」
 叔父さんの目を見れず、うつむき気味に答える。
「ミルク多めで」
 叔父さんがキッチンに行ってから、クッションにばふっと体ごと顔を沈める。
 そして心の中で絶叫した
 きゃーきゃーきゃーきゃー!
 なにそれなにそれなにそれ! 超嬉しいんですけど!
 それって叔父さんが普段喋りたがらない子供の頃の話が聞けるってことでしょ!? そんなの義務でもなんでもないし! むしろ超プレゼントだよーっ! これって叔父さんが私にちょっと心を開いてるってことだよね!! まあ多分向こうはそんなこと全く意識してなくて、単に昔のパソコン見つけたら楽しくなっちゃって誰かに話したいだけなんだろうけどどうでもいいのよそんなこと! 経緯より結果! 経緯より結果です! きゃー!
 ……落ち着け、私。
 多分口元が緩んでるし、顔が紅潮してる。
 叔父さんが戻ってくる前に心を落ち着けておかなきゃ。
 冷静に。冷静に。極めて冷静に。
 ……。
 …………。
 ………………うふ。

Chap.3 MSXとプログラミング(叔父さんの独白)

 さあ、それでは退屈な昔話の始まりだ。あ、ココアお代わり欲しかったら言ってね。

 僕の家にこのA1−WSXが来たのは中学生の頃だ。母親が機械編みをやっていてね。機械編みというのは、編み機という機械を使って服を作るホビーだよ。今はもう編み機を作っているメーカーはないみたいだね。この編み機は当時どんどん機能を増強して、編み目の模様をパソコンでデザイン出来るようになってたんだ。それで、パソコンが家に来た。

 「A1−WSX」というのは製品名でね。正確には「MSX2+」という規格に沿って作られた物で、一般には「MSX」と呼ばれている。まだWindowsとMacが世界を2分する前の時代、パソコンはOSとハードがほぼ同一の扱いで、沢山の規格に分かれていたんだ。だから、僕は当時MSXユーザーだったんだ。

 その時、家にあったゲーム機はスーパーファミコンまでだったんじゃないかな。だから嬉しかったね。なにが嬉しいって「これで僕もゲームを作れる!」と思ったんだよ。当時から、僕はゲームを作りたかった。物語を書きたいというのは平行して夢としてあったけど、ロジックを作ることの楽しみの方が、僕の根幹にあるのかもしれないね。

 MSXはね、電源を入れると、まずMSX−BASICという環境が立ち上がる。今で言うIDE(統合開発環境)にあたるのかな。カーソルが点滅して「さあプログラムを始めて下さい」って状態になるんだ。凄いと思わないかい? 当時のパソコンは「この機械を使いこなしたければ、自分でプログラムを作りなさい」というスタンスだったんだね。

 MSXの思い出話はいくらしてもしたりないから、今はプログラミングの話に集中しよう。

 当時、「MSX・FAN」という月刊誌があって、読者が自作のゲームプログラムを投稿していたんだ。フロッピーディスクが付録につく前は、読者は掲載されたゲームのプログラムリストを1文字ずつ打って、そのゲームを遊んでいたんだよ。大変だったけど、動いた時の快感と言ったらなかったね。

 僕はその中の「REMOTE TOWN」というシムシティみたいなゲームが凄く好きでね。ある日、プログラムを改造して町の成長率を上げられないかと考えた。それで、それまではただ意味もわからず写経していたプログラムを、BASICの入門書を引きながら読み込んで、遂にどの数値を変えれば成長率が変わるのかを突き止めたんだ。僕がBASICを覚えたのは、それがきっかけだった。

 ここから、本格的にプログラミングという行為にのめり込んでいく。結論から言うと、残念ながらMSXでゲームを完成させることは結局なかった。思い入れが先行して空回りしちゃったのと、いわゆるディスクドライブのゴムがへたった問題で、僕のMSXは数年で動かなくなってしまったんだ。当時はゴムを交換する方法なんて知らなかった。知っていれば、もう少し色々やってたと思うんだけどね。

 でも、その時得た知識と、そして意識は後の自分に大きな影響を与えた。Z80マシン語を理解した時、メモリーマッパー機構を理解した時、VDPコマンド仕様を理解した時、「ああ、このMSXというマシンを、僕は全部読み解けるんだ」と感じた。実際にはそれは大いなる勘違いだったんだけど、その時の僕は、MSXの全てを理解したと思い込んだのさ。

 当時のMSXはメモリ空間が64キロバイトしかなかった。64KBだよ、わかるかい? 今のパソコンのメモリがまあ4GBだとして、その4分の1が1ギガ、その1024分の1が1メガ。1メガは1024キロだから、64KBはさらにその16分の1だ。アルファベットがたったの65536文字しか格納出来ない。僕の小説がオンメモリに入りきらないね。

 でも、逆に言えば、小さい分、隅々まで手が届くとも言えた。やろうと思えば、BIOSやBASICインタプリタを全部読む事だってできたんだ。パソコンの全ては、この手の中にあった。全能感と言ってもいい。これがあれば、なんでも作れる。どんなゲームでも、これが1台あれば、もう作れるんだ。その時は、確かにそう思ったんだよ。

 さて。

 時は移り変わって、現代。パソコンはすっかり変わった。CPUは64bitマルチコアが主流で、メモリは4GBや8GBが標準になりつつある。GPUなんて発売される度に搭載メモリが増えてるね。画面解像度も上がって、フォトリアルな3D表現をリアルタイムに表示するゲームが主流化しつつある。当時は想像もしていなかった。本当に、凄い時代なんだよ。

 でも、ゲームは、作りやすくなったのかな?

 MSXは電源を入れると、BASICが立ち上がった。8バイトのデータで8×8ドットスプライト形状を指定すれば、それを表示して動かすことができた。今のパソコンで同じことをしようとしたら、一体何工程が必要になるだろう? 今の子供たちは、当時の僕たちのように、「このパソコンでゲームを作る!」と、果たして思えるだろうか? あまりにも、敷居が高すぎるんじゃないかな。

 もちろん、これはトレードオフの結果だ。「この機械を使いこなしたければ、自分でプログラムを作りなさい」の時代は遥か昔に終わり、パソコンを使う人はもうプログラムの知識を持つ必要がなくなったんだ。何層にも及ぶ仮想レイヤによってハードウェアは巧妙に隠蔽され、それをユーザーが気にする必要はなくなったんだ。これは、進歩の歴史だ。

 けれど、ゲームを作りたい子供たちにとって、それは幸せなことなのだろうか?

 僕には、それが疑問なんだ。

Chap.4 RubyとDXRuby(叔父さんの独白その2)

 少しだけ話を続けてもいいかな。ココアのお代わりはいらない? そう。

 そんな訳で、今は手軽にゲームを作ることが困難な時代になったと僕は思っていて、同時に、それをなんとかできないかと思っている。僕にできなくても、なにかの形でその手伝いできないかとね。それが、つまり、自分が獲得した「MSXの心」を今の子供たちに伝搬させることが、僕の使命であるとすら思っているくらいだ。

 それで、様々なゲームフレームワークを試した。一時期は、C++のYaneSDK2ndってフレームワークでゲームを作ったりもした。吉里吉里2でどこまでの表現が可能なのかを調べる為に、KAGのソースコードを読んだりもした。そうして、色んな物を試し続けて、現状において最適解に極めて近いと思っているのがRuby+DXRubyだ。

 いやあ、長い前置きだったね。本当はこれが話したいだけで、しかもすぐ終わる話なんだ。あと少しだから、我慢しないでココアをお代わりしなさい。僕もコーヒーを取ってくるから。

 ――さあ続きだ。

 Rubyは書いていて楽だ。掘り進めようと思えばいくらでもディープな所まで潜れるんだろうけども、気にしなければ、前提としなければいけない状況を最小限に抑えてコードが書ける。

 型キャストで悩んだり、循環参照させてしまったスマートポインタを探し回ったり、インクルードガードの書き忘れに気づかずコンパイルエラーに悩まされたりしない。makeファイルもstdafx.hも必要ない。ソースコードを書いて必要なライブラリをrequireして実行する。これだけ。

 コンパイル工程をユーザーが意識しなくていいのも良いね。IDEも必須では無いからテキストエディタでコードを書いて、プロンプトから実行。構文ミスがあればすぐエラーが出るから、直す。これの繰り返し。なんというか、BASICで書いていた時と、感覚が似ているんだよ。もしかしたらそういう郷愁感がバイアスに働いているのかな。ありえるかも。

 ちなみに、実は未だにRubyのスタックトレースの方法を知らなくて、putsとraiseでデバッグしてるんだよね。デバッグの方法はいずれちゃんと覚えなきゃと思ってるんだけど、今の所これでなんとかなっちゃうのも、Rubyのお手軽さなのかなとも思う。きっと最新のIDEと比べると生産性はずっと低いんだろうけど、これくらいでいいんだと思うんだよね。

 そして、DXRuby。DirectXの機能を、ほぼRuby上に提供してくれるゲームライブラリだ。機能はシンプルにまとまっていて、サンプルコードも沢山あるから、習熟も割と簡単。しかもC実装でDirectXを叩いているから、早い。お、これならRubyで弾幕シューティングが作れるな、と実感できる速度が出る。

 なにより重要なのは、DXRubyがオープンソースで、しかも開発が継続中だということ。これを満たしているゲームフレームワークは本当に、本当に、数少ないんだよ。僕がお願いして追加や修正してもらった機能も幾つかある。これは本当に感謝している。バグがあったり、足りていない機能があった場合に、それが改善する可能性があるというのは、とても重要なことなんだ。

 僕が今Ruby+DXRubyに望んでいることは、もっと多くの人に使ってもらいたいってことかな。人が集まれば、才能と技術が集まる。周辺ライブラリが整備されるかもしれないし、誰かがプログラム講座を開設して更に人を集めるかもしれない。ひょっとしたら、DXRuby自体のコミッターが増える未来だって考えられる。

 微力ながら、僕もその戦列に加わりたいと思っている。ノベルゲームエンジンを作ろうと思っているんだ。今はその前段階で汎用テキストレイヤを作ってる。あ、ちょっと実物を見せようか。これはただ文字列を表示することしかできないんだけど、実はゲームプログラミングでは、この「文字を表示する」ということが結構深くてね――

Chap.5 来年もよろしく

 ――とまあ、こんな感じに叔父さんの話は続き、正直に言えば、私はその10%も理解できた気はしていない。でも、叔父さんは単に喋りたいだけで、私に理解させようという気は最初からなく、それで構わないみたいだった。ココアを飲みながら相づちさえしなくても、叔父さんは楽しそうに喋り続けた。ホント、子供みたいに目をキラキラさせてた。
「――っと、そろそろ出かけなきゃだね、紅葉」
 と、叔父さんは突然話の途中で素に戻り、小さな方の袋を持ち上げ、私に手渡した。
「メリークリスマス、紅葉」
 開けてみると、綺麗な白い箱が入っていた。私は驚いて叫ぶ。
「MacBookAirだ!」
「ノートパソコンが欲しいって言ってただろ。この家にいる時は、それを君の専用マシンにしていいよ。ただし持ち出しは駄目。自分の家に持って帰るのもNGだ。そういう約束になっている」
「約束? それって私より先にお母さんに相談したってこと?」
 ジト目。叔父さんは急に「しまった」という表情に変わる。いつもならここで説教タイムに入るのだけど、まあ今日は許す。だってMacBookAirだよ!?
「叔父さんありがとう! 大好き!」
 腰にぎゅうっと抱きつく。こういう時でないと、気恥ずかしくてできないこと。
「紅葉、3つ言うことがある」
 意外に厚い胸板の体温に実はドキドキしていると、急に叔父さんが堅い声で言った。
「なに?」
「一つめ。抱きつくな」
 渋々と腕をほどく。
「二つめ。大好きなんて言葉を軽々しく使うな。もっと大事な時のためにとっておけ」
 今より大事な時なんてありませんよーだ。
「三つめ。オジサンって言うな。僕はまだ28歳だ」
「えー、じゃあなんて呼べばいいのよー。『黒澤叔父さん』じゃ呼びづらいよー」
「呼びづらくてもいいだろう。それなら叔父だとわかる」
「ね、ね。じゃあ『創二さん』って呼んでもいい?」
「だーめ」
「えーけちー」
 まあこの辺はいつも通りの会話である。叔父さんはやれやれと立ち上がって、壁の時計を見た。
「夜のパーティーだっけ? もう時間じゃないの?」
「え? あっ! ホントだ! 行かなきゃ!」
 鞄をひっつかんで扉に走る。廊下に出てから振り返り、今日一番のとびっきりスマイルで叫ぶ。
「メリークリスマス! 創二叔父さん!」
 私の妥協案に、叔父さんは苦笑しながら答える。
「メリークリスマス、紅葉。楽しい夜を」

Chap.X 余談

「ところで、このノーパソでDXRubyは使えるの?」
「……Mac用にポートしてる方がいらっしゃるみたいだから、出来るんじゃない、かな?」

(おわり)