紫藤のWiki

最近の更新履歴

Monadius

プログラミング言語そのものには直接関係無いんですが、非常にショッキングだった話。
また、ちょっとした考察です。

Web検索してると、なかなか面白い事が起こります。
特に面白いのは、「ちょっとキーワードを変える」だけで、とんでもないものが引っかかってきたりする辺りです。
普段はちっともひっかからないのに、

「とんでもないものを見つけてしまった。どうしよう。」

って事がたまに起こります。
「とんでもないものを見つけてしまった。どうしよう。」
の例。

今回紹介するのは、たまたWeb検索していて見つけてしまったあるソフトウェアのお話です。
その名も

モナディウス


です。


モナディウスの画面。
ワイヤーフレームっぽい画面で、Lispの初の実装者、スティーヴ・ラッセルがPDP-11用に書いた世界初のテレビゲーム、Space Warを彷彿とさせる。
(あるいはVectorScanのVectrexとか)
が、実はこのキャラ(自機も敵機も)は全て「手書きの」ようである。
手書きのキャラだが、ウニョウニョのアニメーションでも、高速に動く為それほど違和感を感じない。
作者のセンスの成せる業で、芸術性さえ感じられる。

これ発見した時、おもいっきり仰け反りました。
いやいや、ビックリしたのです。

これ、古いゲームファンでしたらご存知でしょうが、KONAMIの名作シューティングゲームであるグラディウスのクローンなんです。

YouTube Video



ビックリした理由は二つあって、
  1. 今までLinuxでプレイできるグラディウスのクローンを探していたが全く見つからなかった。諦めモードに入ってたのに、ひょんな事で見つかってしまった。
  2. しかもこのMonadius、なんとHaskellで実装されている
2番は特に衝撃的でしょう?Haskellで書いたゲームが動き、プレイ出来るのです。
ちなみに、「Monadius」と言うのは、Haskellのモナドで書かれたグラディウス・クローン、って意味らしいです。

これは非常に重要なんですが、「関数型言語」って学んでも何が出来るのかちっとも分からない、んです。
いや、理論的には全てのプログラミング言語は「チューリング等価」であって、一つの言語で可能な事は他の言語でも可能である。
それはその通りでしょうが、それだけでは説得力が全く無い。
色んな入門書を見てみると、
「本当にこの作者はこの言語流行らせたいのかしら?」
と疑問に思う事も無きにしもあらず、です。
しかし、このMonadiusの存在は、少なくともHaskellに興味がある人には朗報でしょう。
GPLでリリースされていますし、ソースコードも手に入り、「実際に動くゲーム」になってるんです。
これほど「何が出来るのか?」明解に教えてくれる教材はありません。(今の日本の状況での)Haskellは一歩抜きん出た、とか正直思いました。

ところで、色々な「入門」と書かれた書籍を見てきましたが、どれも共通の一つ致命的な欠点がある、んです。
それは、どれも
(紹介しようとしている)言語は汎用目的のプログラミング言語である。
と言う事を強調し過ぎてる、と。
しかし、逆に考えてみると、一般には、どのプログラミング言語も「汎用性がある」わけで、実はこのステートメントは「特徴には」ならないんです。つまり、「特徴にならない部分を」強調している。
これって考えてみると「凄くヘン」なのです。
もちろん、言外に「今から紹介する言語は、おかしいものでは無いんだよ」と主張しているのかもしれません。が、プログラミング初心者にとっては、実はそれってあまり関係が無いんです。また、「汎用性」を強調する余り、展開も割に「お決まりのパターン」に落ち着いちゃうのです。制御構造の紹介、データ型の紹介、etc、etc・・・・・・。
かなりの確率で、「リファレンスの絵解き」になっているのが「入門書」の傾向で、「何かやりたい」って思ってプログラミングを勉強しはじめたら大体途中で「息切れ」しちゃうんですね。「作る」前に「潰れちゃう」んです。

もう一つ言うと、「汎用目的は流行らない」原理、ってのがあるんです。勝手に名づけたんですが(笑)。
プログラミング言語の話からちょっと離れますが、例えば「ゲーム機」見てみましょうか。
今からいくつかマシン名挙げますが、これらを知ってる/覚えている人、ってどれくらいいるんでしょう?

  • CD-i
  • CDTV
  • 3DO
  • Pippin atmark
  • FM TOWNS マーティー
「ああ聞いた事あるなあ」とか「そう言えばそんなんあったなあ」とか思う人がいると思います。しかし、現時点では「消えてしまった」。
実はこれらはゲーム機としてマーケティングされなかったんですね。「マルチメディア」と言う冠を付けて「汎用目的の為の機械」としてマーケティングされた。
結果は惨憺たるもの、です。「ゲーム機」は生き残りましたが、「マルチメディア機」は滅亡した、のです。
何故なら、もちろん汎用機としてマーケティングされたので「値段が高い」って事もあったんですが、要するにユーザーを引きつける「特徴」ってのが打ち出せなかったのです。
当時は(今もある程度そうですが)ゲームは「不真面目」と言う印象がありましたんで、あんまりゲームを強調されずに、
「これでCD-ROMを使って百科事典も読めるのです」
的なマーケティングが成されていた、と思います。問題はそんなもので「百科事典を読みたい」と思うか?アピール性が弱すぎる、のが「汎用目的」の弱みなんです。
一方、ゲーム機は「ゲームだけに特化されている」んで、目的も用途も明解です。これは「お金を払うのなら下らないものに払いたくない」のではなくって「お金を払うのなら目的のハッキリしたものに」と思うのが人間の一つの傾向だ、と言う好例です。
「マルチメディア路線」はその点を読み間違えていたんです。

ここでプログラミング言語に目を転じると、いわゆる「流行った」言語って恐らく歴史的には次の3つしか存在しません。

  • BASIC
  • C
  • Perl
この3つには共通点はありません。何故ならC言語が含まれている。
Cが流行ったのは、OS記述用言語だったから、です。だから誰もがCを「覚えなければ」ならなかった。唯一の例外ってのはCだけ、なんですね。しかし残り2つには共通点がある。
BASICは「ゲームを書くくらいにしか使えなかった」、そしてPerlは「CGI記述用言語として」流行った。この2つの共通点は、「ある目的に特化している」と勘違いを起こさせた。そしてそれが成功の理由だったんです。
まあ、BASICが流行った当時はマシンスペックが貧弱な事もあって「ゲームくらいしか出来なかった」のが幸いしたんですが、Perlなんかは「CGIと言えばPerl」くらいの強烈なイメージがありました。中には「CGIってPerlで書かれたソフトの事でしょ?」とか訊く純真な初心者に対して「CGIと言うのはそう言う意味ではなく・・・・・・」と答える識者の構図、なんかがありますが、重要なのは「定義の正確さ」じゃないんです。「CGI=Perl」って「思わせる」くらい強烈なイメージがあった、と言うのが大事なのです。
事実、Perlの入門書の中には、明らかに初心者向けなのに「CGI製作に特化してる」入門書も多いです。かなり「偏った」構成なんですが、この「偏り具合」がまた支持者を生む。Perlの好循環ってのはこうやって起きている。
翻って見ると、3〜40代の人で「はじめてプログラミングを覚えた」のはBASIC、ってケースが多かったんじゃないでしょうか?制御構造とかデータ型とかすっとばしてひたすら「ゲーム」をBASICでプログラミングする・・・・・・(もっともBASICは大したデータ型は持ってない、んでしょうが)。恐らく統一的にプログラミングを学習したのは「ゲームをひたすら打ち込んだ」後なのでは?「ゲームにしか使えなかった」BASICはやっぱり役に立ったのでは、とか想像します。

「汎用目的」を強調する入門書はこの辺にウソがあるんです。実は「入門書」と言いながら、ある「プログラミング人口」内でのパイの奪い合いしかやっていない。一方、BASICもPerlも「××専用」と勘違いを起こさせたせいで、「それまではプログラミングに全く興味が無かった」人々を惹きつけたんです。やるならそっち方面狙った方がエキサイティングな「言語の宣伝」なのに、他の言語ではそれがまだ成されていないのです。
もう一つ、重要な点は、まあPerlは例外なんですが、「Webプログラミング」は特化、と言うほど実は魅力的でも無い、ってのが事実です。
例えばPerlに続け、とばかりに、特にPythonなんですが、Webプログラミング解説書を出したりしてますが、残念ながら「パイが小さい方へ」進んでいます。
どうしてか、と言うと、そもそも現時点ではPythonが使える有料のレンタルサーバーが、思いつく限り・・・・・・日本では、多分3つくらいしか無いんです。つまり「覚えても使えない」。これじゃあアウトなんですね。ましてや無料レンタルサーバーでは相変わらずPerlの天下です。「Perlは実用的だけどPythonは実用的ではない」。
かつ、だからと言って、個人でサーバー購入して立ててPythonでのCGI走らせるのか・・・・・?いや、まあ殆ど無理でしょう。そもそも個人でWebサーバーを管理するのは大変ですし、専門的な知識が絶対に必要になってくる。って事は・・・・・・「Python Webプログラミング入門」は構造的には玄人向け、です。とてもじゃないけど素人が簡単に手を出せる言語では無くなってくる。「教育用言語」で「素人にも易しい」なんてとんでもないガセですね。
つまり、現実的な話で、かつそれらの言語でエアーポケット化しているジャンル、と言うと・・・・そうですね、「ゲーム製作」しか無いのです。それなりに魅力的で手元で走らせて、かつ面白い、と言うトピックは。

最近ソフトバンクの方でC++を使ったゲーム作成のシリーズ本なんかが立て続けに出版されていますが、ああ言うの見てると
C++の天下って暫く続くな
とか正直思いました。ああ言う企画物の方が「素人が手を出し易い」と思います。目的もハッキリしてますし、ますますC++支持者が増えるでしょうね。
ゲームが書けるか書けないか、と言うのはある言語の支持者を増やすには非常に重要です。スノッブなネタの方が実は紛れが無いんです。
今回、このモナディウスを見て思ったのが、この作者は目の付け所がいい、って事です。いや、天才かも(笑)。違うや、天才だ(笑)。
非常に良いな、と思った一つの理由は、Common Lisp/Schemeで取り上げられる形のゲームを作らなかった辺りです。
と言うのも、Common Lisp/Schemeで取り上げられるゲーム(代表的なのに8 Queen Puzzleってのがありますが)って実は全然ゲームじゃないんですよね。トピック的には「人口知能」絡みの「探索」ネタですし、別に人間が遊ぶものじゃないんで。ドラクエIVの「AI」みたいなモノです(笑)。「命令させろ」が無い(笑)。
このモナディウスは「Haskellで何が出来るか?」「Haskellで書くとどう言う利点/欠点があるのか?」「Haskellでプログラムを書く流れ/コツ」が短い中でも端的に語られていて、なかなか勉強になります。ああそうか、Common LispSchemeでもこうやって書くよな、的な「発見」が上手くまとめられている。面倒な細かい定義は後回し、みたいな(笑)。
また、非常に特徴的なのに「1面」しか無い、ってのが挙げられます。ゲームとしてはどうなんだ?ってのはありますが、逆にソースが膨大になるのを防いでいる。あくまで「実験」であって、かつ「教材」の色が濃い辺りが良く考えられています。Web教材としては最強の部類なんじゃないのかしら?
作者の人って計算してみると23歳辺りなんですね。すげえ23歳もいたもんだ(笑)。脱帽します(笑)。参りました(笑)。とにかくその「慧眼に」です。

まあ、取り合えずモナディウスをダウンロードして遊んでみてください。百聞は一見にしかず。Haskellが「理論的な関数型言語」ではない、と言うそのポテンシャルが感じられるでしょう。なんせ「シューティングゲームも」書けるのですから(笑)。
なお、Windows版バイナリはLinux上でWineで動かせる程素直なプログラムになっています。

こうなったら、Lamdiusでも作ろうかな(笑)。