読者です 読者をやめる 読者になる 読者になる

俺の話を聞いてくれ

もっとこじらせろ

非エンジニアでもきっとわかるツクールMVの問題点と凄いとこ、あとライセンスの件 #ツクールMV

はじめに(言い訳)

ツクールMVを機にゲームを作ろうとしているJavaScriptを仕事で使っている程度のクソザコナメクジエンジニアの自分がツクールMVに関して取りざたされていることについて色々と書いてみようと思います。
できる限り技術的な話を抜いて話をしていますが分からないことがあったらコメント欄かTwitterで質問してください。
また、この内容は事実を元にした憶測・妄想が多分に含まれているのであまり信用しないでください。

「今までと大して変わらないくせにやたら重い」か?

エディタはVXAceの頃とそこまで変わっていない。デスクトップアプリとしてゲームを吐き出して遊んでみるとなんだかVXAceの時よりも重いしメモリもやたら食う。
「マルチデバイスに対応だなんて誇大広告じゃないか、スマホ用に出力したいのなら自分で環境を用意する手間があるじゃないか」と言う人も少なからずいるとは思う。
そう思われても仕方が無いだろう。今回はHTML5ベースにすることによって半ば無理矢理マルチデバイスに対応したのだから。

JavaScriptで実行環境が構築された理由

なぜHTML5ベースになったのか、その大きな理由として「角川のツクール事業部に予算が無いから」ということがあるのではないかと個人的には考えている。 Rubyで行えるかどうかはともかくとしても今までのように中間コードを吐きつつマルチプラットフォームに対応することはもちろん可能だ。少なくともUnityはそれをやっている。 Unityの場合、VM(仮想機械)をアプリに同梱させ実行するという形式を取ることでiOSAndroid上での動作を実現させている。

iPhoneでC#アプリが審査に通るワケ − @IT

だがそれを実装させられるほどツクール事業部に予算も人的リソースの余裕も無いのではないだろうか。少なくともゲームエンジン専売企業であるUnityよりも予算はずっと少ないはずだ。
手っ取り早くマルチデバイスを実現させるためにVMの部分をブラウザに置き換えたのだ。

ツクールのように動作処理部分をブラウザに依存することで簡易にマルチプラットフォームを実現させているアプリは一般的にハイブリッドアプリと呼ばれている。
確かにそちらの方がコストがかからないだろう。VM方式の場合はいちいち対応対象のOSごとにVMを最適化する作業なども必要で人員や金が必要となってしまう。実際UnityもMonoというVMをカスタマイズして使っている。だがハイブリッドアプリならその辺も中身のブラウザに任せてやるだけで良い。

その他の理由の一つとして金銭面の問題以前の問題としてPC向けツクールがこれまで極めて少人数で開発されてきたツールであるということもある。
実はPC向けのRPGツクールは「DANTE98II」(96年発売)から20年近くにわたり一貫して尾島陽児という人物が関わっている。あの伝説的なツクール2000も、(微妙な2003も)、XP、VX、VX Aceも、そして今回のMVもメインのプログラマは彼だ。(彼がほとんど一人で作っているという噂さえある)それは開発体制が極めて小規模であると言うことも意味している。

今回のスタッフクレジットのプログラムの部分を見てみよう。

■ システムデザイン・プログラム

尾島陽児

■ プログラム

木村壮哉 ENTACL GRAPHICXXX

ENTACL GRAPHICXXXという企業はウェブ制作がメインなので公式サイト制作にも名を連ねているが、JavaScriptを駆使したハイブリッドアプリの制作実績もあるようだ(ちなみに木村壮哉はENTACL GRAPHICXXXの開発部テクニカルディレクターである)。しかし企業の規模はそこまで多くない(社員数は18名程度だという)ので今回ツクールMVの開発に参加しているスタッフも多くて数人と言ったところだろう。
このクレジットからも開発のメインを尾島氏が、ENTACL GRAPHICXXXがそのサポートを行っているという構図が見て取れる。世界を股にかけて求人を出しているUnityと比べたらあまりにも規模が小さい。

しかしこれらの点はゲーム実行エンジンとしてのツクールがコンパクトにまとまっていることも意味している。実際にソースコードを読むとそのコンパクトさがよく理解できる。JavaScriptという言語の奥深さもソースを読むことで理解できるのでJavaScriptゲームエンジンのための良い教科書になるのではないだろうか。
また、実行環境がブラウザであるということは無限のポテンシャルを秘めているということでもあるのだが、技術の話になるので今回は置いておく。

「本格的にゲームを作りたいエンジニアはUnityで作る」か?

そんな風に言う人もいる。
確かにUnityはエンジニア向けのゲームエンジンではあるがUnityは基本的に3Dのゲームに特化したものだ。
Unityも最近では2D機能を強化しているが、それでもUnityで簡単に作れるのはアクションゲームでありRPGのようなゲームを作るには色々と考えなければならない部分が多い。
特にツクールでいうところのイベントコマンドのような簡易命令記述機能が標準で存在しないため、制作コストも高い。(エディタに相当する部分は有料アセットで存在してはいるものの色々と設定が面倒くさい上にツクールと比べたらやはり機能が貧弱である)
素材も規約上ツクールのRTP素材やその改変素材が一切使えないので制約が大きい。自分で素材を作った方が早いだろう。
2Dに特化したCocos2d-xというゲームエンジンも存在するが結局は似た問題にぶつかってしまう。(個人的にはC++を今から勉強するというモチベーションは…UnityのC#ならまだしも)
2DのRPGやアドベンチャーを作る上でツクールというゲームエンジンはUnityよりもずっと進んでいると考えて良いと思う。
第一、RPGとしての基本的なシステムが最初からJavaScriptで実装されているゲームエンジンというものを少なくとも自分は今までに見たことが無い。(あれば教えてください)

逆に言えば2Dアクションゲームを作りたいのならばUnityに手を出した方が良いかもしれないということでもあるのだが。

JavaScriptとかよくわかんないしスマホにゲームを出力するのも興味ないんだけど買う価値あるの?」

正直な話MVの価値はその2点に集約しているので、従来通り素材屋のスクリプトを利用し(自分でスクリプトを組まず)ゲームを作りかつ今まで通りPC向けのみに向けたゲームを作りたいという場合はVXAceのままでもあまり問題は無いと思う。発売から年月が経っていることもあり素材もそちらの方が豊富に揃っているのも動かしがたい事実だ。
また、現在発覚しているメモリブロート問題以外にも未知のバグが多数潜んでいる可能性があるのでその点を不安視している場合は購入を焦らない方が良いかもしれない。
個人的にはそういったバグもユーザレベルで治せてしまうのでその点を面白いと感じる場合は今すぐ予約するべきだと思う。

「要するにエンジニアが面白いおもちゃを貰って喜んでるだけだろ?」

その通りです。だって面白いんだもん。勉強にもなるし…サイの本も注文しちゃった…
俺、もっとJavaScriptの事を知りたくなってきちゃったな…これが、恋…?

JavaScript 第6版

JavaScript 第6版

ユーザ丸投げ問題

今までの公式放送を見る限り、角川側は公式コミュニティを作る気は無いらしい。 この問題がよく言われるのは海外では海外版の販売元であるデジカ社が公式フォーラムを作っているという所が原因としてある。

個人的にはすでにいくつかのユーザーコミュニティができているためあとはそれに任せれば良いと考えているのだが、コミュニティを作る気が無いと言っておきながらSlack(注:技術者向けのチャットのようなサービス)は作っているという話なので個人的にはかなりむっときている。
技術の話が外になかなか出てこない理由はエンジニア同士がSlackで完結させてしまっているからなのではないだろうか(という被害妄想を起こしている)
そういうことをするくらいなら誰でも見られるオープンな技術系フォーラムを作ってそこで議論を行って欲しいと思う。

本音を言えば自分もSlackに招待されたいけれど、ツクールや技術に関して実績の無い自分が呼ばれることなんてあり得ないというのも良く理解しているつもりなのでわがままを言うつもりは無い。

また、先行ユーザ向けフォーラムでどのような議論が行われているのかもなかなか見えてこないのでその点についても今後どうするかと言うところをアナウンスして貰いたい。

おまけ・ライセンス違反の件について

最後に、2chなどで「ヘルプの通りに暗号化するとライセンス違反になってヤバい!!」と言った話題があったのでその点にも言及したいと思う。
これはつまりどういうことかというと、パッケージ化の際に公式のヘルプでは全てのファイルをパッケージングしてしまっていて、それでGPL汚染が起こってしまうという話である。

GPL汚染とはGPLライセンスLGPLライセンスのライブラリを内部に取り込む(これを静的リンクという)ことでそのライブラリを使用した制作物のライセンスもGPLとなってしまい(これを汚染という)、ソースの公開義務が発生してしまうという問題である。
具体的にはffmpegsumo.dll(音楽ファイルのエンコードを行うライブラリ)がLGPLであるようだ。

この辺の解釈は極めて面倒くさいことになっているので、具体的な解説はできない。人によっても「静的リンク」の解釈が異なることもあり収拾が付かないのでとりあえず

qiita.com

ここで言うところのwwwフォルダのみを圧縮し、圧縮したリソースをgame.exeと統合する、という手順を取れば見られたくない最低限のリソースと面倒くさいライセンスを同時に守ることができるだろう。

ちなみにブラウザで実行する場合は件のライブラリを使用していない、それ以前にそもそも全てのリソースが丸見えになってしまっているため全く問題が無い。