【
解題(1)からの続きにて御座候】
前回、由羽氏が考える(そして私もそう考えていた)VRM4スクリプトの仕様・開発環境に関する不満をまとめてみた。総じて言えば、これは「オブジェクト指向」を名乗っているVRM4スクリプトを「構造化プログラミング」の観点から考えている論者の限界であり、同時に、オブジェクト指向に論者を導ききれないVRM4スクリプトの限界であるとも言えよう。
では逆に、オブジェクト指向言語はかくあるべし、という観点からVRM4スクリプトを考えた場合、何が不足しているのだろうかと考えてみよう。由羽氏の論点の中心に「コードの冗長分散」の問題があることは前回明らかにしたが、本来オブジェクト指向言語はこれを「クラス」という概念で解決する。VRMスクリプトに不満が残るのは、オブジェクト指向言語につきもののクラスの概念が示されていないか、或いは不明確だからではないか。
ここで言うクラスというのは、オブジェクトの雛形だと思ってもらえればいい。個々に個性のある(たとえば編成名や車輌が異なる)それぞれの編成オブジェクトも「編成」という点では共通した構造をもっている。この共通構造=雛形を記述したものをクラスと呼ぶ。そういう意味では、仮にVRMを逆コンパイルすれば、当然そこには編成クラスやポイントクラスに該当する構造が存在するはずだ。
ここで言う「ないか、或いは不明確な」クラスというのは、VRM自身の構造ではなく、VRM4スクリプトでユーザーが扱い得るクラスである。ここでは「クラス」を私が
VRMスクリプト禅問答でもしばしば取り上げる「標準化」というキーワードで読み替えてもらっても良い。
そこで思い当たるのが第2号で実装されるスクリプトウィザードである。スクリプトウィザードは「スクリプトが自分で書けなくてもその機能が利用できる」という点に注目が集まりがちだが、ユーザーが自ら「スクロール」と呼ばれる何か(多分、メタ的なスクリプト)を書けることから考えると、これこそがVRMスクリプトにおける「クラスの役割」を果たすものと考えてよさそうである。つまり、スクロールを作るという行為は、スクリプトが書けない人にその機能を提供するに留まらず、適切に記述さえすればVRMシステムが提供しているデフォルトのクラスを継承した新クラスを作成するという意味合いを持つのではないだろうか。
本稿は由羽氏へのインタビューを掲載した時点で執筆したが、奇しくも昨日(8/13)付のVRM News Vol.29が「アルゴリズムを知識ベース化できるため省力化に威力を発揮」という表現でこのことに言及している。
この点については、コードの冗長分散の一因となっている「ユーザーがVRMに何かを命じる場合の流儀と、VRM自身=スクリプトがVRM(のオブジェクト)に何かを命じる場合の流儀が異なること」が、むしろ良い方向に働いている。もし、メソッドが引数を要するのであれば、スクリプトに無知なユーザーがウィザード経由でそれを組み込んでも、与えるべきパラメータが決定できずに困るだろう。逆に、VRM4スクリプトにおけるメソッドは良くも悪くも外部との独立性を求められるので、むしろウィザード的な実装には都合が良い。
無論、現時点でわかっている情報から類推すると、スクリプトウィザードは「質問に答えると埋め込むべきスクリプトを作ってくれる」という動きをするようなので、厳密な意味でこれはオブジェクト指向言語のクラスではない。つまり、コードの冗長・分散は回避されない。が、
先だって述べたように広義のオブジェクト指向というものは、その実装形態ではなく考え方を指すものである。要するにJavaコンパイラが自動的におこなってくれることを、ユーザーがスクリプトウィザードを駆動して代行するのだ、と割り引いて考えれば、これは言語体系ではなく開発環境の問題と言うべきだろう。
逆に言うと、スクリプトウィザードが実装可能であるということは、すなわち(そのコードの書き方に一定の制約があるにせよ)クラスの実装がVRM4スクリプト開発環境に対して可能であることを意味している。
具体的には、レイアウトスクリプト内に現行仕様であれば各オブジェクトに埋め込むところのコードを記述し、これをBeginClass{クラス名}〜EndClassで括る。各オブジェクト側ではInheritFrom{クラス名}でこの構造を継承でき、続けてオブジェクト特化のコードを追加できる、というように。
VRM4ビュワーのコンパイラは、まずBeginClass〜EndClass内に不適切な直値参照があればこれをエラーで返し、問題なければInheritFromを含むオブジェクトのソースにクラスコードをコピーする。その上で従来通りのコンパイルをすれば良い。これでコード冗長分散の問題は解決だし、より生産性の高いコーディングが可能になるだろう。
VRM4スクリプト体系に何か致命的な欠陥があるわけではない。それは発展途上にあり、未だ未完成で問題点もあるが、むしろそのポテンシャルは高いと見た。と、ここまで考えて、これは実はトンデモないことなんじゃないか、ということに気付いた・・・のだが、時期尚早かと思うので本日はこれまで。
「解題」と言いながら、余計に意味不明な内容になってしまったので「電波ゆんゆん」カテゴリに入れておくが、わかる人には私が示唆していることの意味がご理解いただけるものと信じる。蛇足ながら、本稿も
由羽氏との対話がなければ書けなかっただろう。氏には重ねて謝意を捧げたい。