from __future__ import katryo

カリフォルニア州マウンテンビュー在住のソフトウェアエンジニアがいろいろ書きます。

Artemis Engineの長所と短所

今日の午前はアナテマ・フィジクスArtemis Engineに移植する作業をしていた。Artemis Engineについてちょっと書いてみる。

長所

この2つを両立させている点で、現在最も信頼できるスマートフォン向けノベルゲームエンジンだとは思っている。もし仮にHTML5ゲームエンジンを作っても、iOSでの音楽再生あたりで不具合があったり、動作が鈍くなるんじゃないかなと想像している。確かめてはいないけど。

短所

開発するうえでの短所はけっこう多い。

タグ名

以前も書いたのだけど、タグ名が直感的でない。

たとえばレイヤー読み込みを行うタグは[lyc]だ。正気を疑う。ライク? 何語だそれ。レイヤーをCするのだと思うが、Cが何を意味するのかわからない。

レイヤーを削除するタグは[lydel]。LayerをDeleteするからlydel。これはぎりぎり理解できるが、それなら[delete_layer]のほうが瞬時に意味を理解できてよいと思う。

リーダブルコードにも関数・変数の命名を大切にするよう書いてあった。利用する人の少ない言語なのだから、せめて理解しやすいタグ名をつけてほしい。

マクロの不統一

Artemis Engineはマクロを使って複雑な処理をシンプルに書くことができる。サンプルコードでもマクロが多用されている。生のJavaScriptではなくjQueryを使うような感覚で使える。

しかし、いまのマクロの状況はよくないと思う。現在配布されているサンプルのゲームに入っているマクロには、日本語のタグ名と英語のタグ名が混在している。日本語のタグは気持ち悪い。文字コードのこともあるし、ソースコードにコメント以外では日本語を使うべきでない。また、コードを読んでもArtemis Engine標準のタグなのかマクロの独自タグなのかすぐにはわからない。意味のわからないタグに出会ったとき、タグリファレンスを見ればいいのかマクロファイルに目を通すべきか判断できない。

ノベルゲームの形式は基本的にどれも同じだ。仕様は90%以上定まっている。クリックかタップすればテキストが進む。ほぼ標準化されたシステムだ。別のノベルゲームであっても同一エンジンであれば中身の処理は変わらない。だから、ひとつノベルゲームを作った人なら、同一エンジンのノベルゲームのコードはだいたい理解できることが多い。

しかしマクロの使用により、同一エンジンでも理解できなくなる危険がある。書き方の多様性が大きくなるからだ。サンプルコードを理解するためには、素のArtemis Engine言語を知り、さらにサンプルのマクロを把握しないといけない。それは苦痛であり、無駄な作業だ。The Zen of Pythonを思い出してほしい。

”There should be one — and preferably only one — obvious way to do it.”

同じことをしてるんだったら同じ書き方のほうがいい。

ノベルゲームを作りたい人に、プログラミングの勉強をさせてはいけないと僕は思う。一からコードを書かなくていいように、ゲームエンジンは作られた。僕が運営しているWebサービスのDenkinovelもそういった目的で開発した。物語を作る人には物語に集中してほしい。コードは機械に書かせればいい。

マクロの思想そのものは悪くない。問題はマクロの利用状況だ。

  • サンプルコードにマクロが多用されている
  • そのマクロが標準ではない

これらが問題だ。そこで、マクロ自体もjQueryのような便利ライブラリとして共有化して、公式に配布してしまうのがいいと思う。

この二つを用意して、それを標準パッケージに入れればいい。

あと、ついでにマクロ内でのタグ名を変えてほしい。日本語タグはよくない。全角スペースや全角カッコを間違えて入れてしまいそうで怖い。