Caldiaさんが11月8〜10日と連載したVRMスクリプトへの問題提起を読みました。その対論を書きたいと思いまーす。
自分はプログラミングの知識はないので、こういう話題は、わからない言葉があるたびにWikipediaとか何とか用語辞典とかで調べて読んでいます。
だったら偉そうに対論なんか書くなよ!と言われそうですが、でもそんなこと言ってると専門家以外は議論に参加できないことになってしまうので、生兵法でもって太刀打ちしたいと思います。素人だって、身の程さえわきまえれば参加できない議論はありません。素人万歳!素人万歳!
さて、この連載は回ごとに問題提起の矛先が変わっているようです。といいますか、第一回はVRMスクリプトの「分散型」構造を批判しているのに対し、第二回を突き詰めると、「分散型」構造がむしろ望ましいという結論に行き着くように思います。
ただ、基本的にはCaldiaさんの議論の主眼は第一回の「分散型」批判にあるようなので、ここではその「分散型」批判への対論を書きます。
第一回「パーツ単位のスクリプト記述はナンセンス?」の内容は、まとめるとこうなります。
・現行のVRMスクリプトは、パーツ単位でスクリプトを管理する「分散型」だが、レイアウト単位でまとめて管理する「中央集中型」のほうが良い。
VRMスクリプトは、編成を制御する命令は編成に、信号を制御する命令は信号に、というように命令の種類によって書く場所が決まっています。このように部品ごとにスクリプトを独立して記述することで、役割分担が明確になるメリットがあります。一方で、スクリプトを編集するときには、いちいちそのスクリプトが書かれている部品のスクリプトエディタを開いて作業しなければなりません。
そこで、スクリプトを記述する部品(オブジェクト)は一個のレイアウト上にそんなにたくさん無いのだから、いっそスクリプトは一箇所にまとめて書いてしまうほうがユーザーにとってはラクなはずだ、と言うのがCaldiaさんの主張の要旨です。
一個のレイアウトあたりのオブジェクトの数が多いか少ないかは、各人の主観に多分に依存しますから、なかなか判断の難しい話です。
そこでCaldiaさんは実際の鉄道であるJRとの比喩によって論じています。
>JRでは数百棟の駅と数千の路線、数百本の列車が動き、数千本のポイントや踏切が動いている。これら全てを一箇所で制御したり監視したりすることは不可能であるため、詳細な様子は各区画ごとの発令所や司令室に分散させている。
>(中略)
>ではVRMの「管理する物の量」は多いか少ないかどっちだろうか?答えは「少ない」のである。(中略)「管理する人間が一人しかいないから」である。
VRMスクリプトのオブジェクトのユーザーに対する立ち位置を、JRの「各区画ごとの発令所や司令室」に見立てています。しかしJRの「分散型」構造はこの1階層だけではありません。社内全路線を束ねる部署のトップから発令所内のポイントを操作する係員まで、幾重もの「分散型」構造から成っています。一方VRMでは、ユーザーとオブジェクトの関係だけです。
ですからこの比喩にはあまり意味がありません。「管理する人間が一人しかいないから」オブジェクトの数は「少ない」はずだ、というのは話が逆です。一人しかない管理者がいかに多くのオブジェクトをラクに管理するか、そのための工夫が「分散型」なのです。
例えば編成には速度制御、信号には灯火制御のスクリプトを記述しておきさえすれば、あとはそれらをイベントと紐付けてやるだけで、オブジェクトが勝手に期待する動作をしてくれます。仕事の具体的な中身は先にオブジェクトに丸投げして、我々は「やれ!」と命令するだけで良いのです。
そしてこれが「オブジェクト指向」ということの意味らしいです。・・・たぶん。
ですから、このやり方をやめて一箇所のスクリプトエディタにすべてのスクリプトを記述する様式に変更してしまうと、どのメソッドがどのオブジェクトのためのものなのか、どのイベントが何のために書かれたのか、何が何だかわからないカオティックな文面になってしまうでしょう。
Caldiaさんも第二回で、ウィザードに対してこれにとても近いことを書いているように思います。
VRMスクリプトは本来、オブジェクトごとにスクリプトを分散させることで「いつ」「どこで」「誰が」「何を」「どうする」かを別々に管理できるメリットがあるわけです。しかしウィザードは、それを一箇所で一度に行ってしまおうという試み(中央集中型)であり、そのため命令にあまりバリエーションを持たせられません。
スクリプトが「45-50sが」「Caldiaさんが」「飯を」「ボールを」「食った」「投げた」というカードの組み合わせで文章を作るものだとしたら、ウィザードは「45-50sが飯を食った」「Caldiaさんがボールを投げた」というカードが与えられているようなものです。
スクリプトでは「45-50sがボールを食った」という文章も作れますが、ウィザードではそれができません。スクリプトと同等のバリエーションを持たせるためにどんどんカードを増やしていくと、とんでもない数になってしまいます(ghostさんの【何か】シリーズはこのことへのひとつの対案でしょう)。
現行のVRMスクリプトが完璧!なんてことはもちろんありません。例えば複数の編成に似たようなスクリプトを記述しなければならない(スクリプトが冗長になる)っつー面倒な点もありますし、以前こんな話も交わされています。
だとしても、VRMスクリプトに問題があるとすれば、それが「分散型」であること自体ではなくて、「分散型」のメリットを生かしきれていないことだと思います。現行仕様を無下に「ナンセンス」と言い切ってしまうのはいかがなものでしょうか。
2006年11月10日
この記事へのトラックバックURL
http://blog.seesaa.jp/tb/27195034
この記事へのトラックバック
http://blog.seesaa.jp/tb/27195034
この記事へのトラックバック



とりあえず、はてぶに保全はしてるよ。
http://b.hatena.ne.jp/bookmarklist?url=http%3A%2F%2Fgeocities.yahoo.co.jp%2Fdr%2Fview%3Fmember%3Dregretblade