Skip to content

[GW企画]これからプログラミングをやろうとしている一般iPhoneユーザにenchant.jsとIMPACTとTitaniumとObjective-Cとマシン語の違いをドラゴンボールに例えて説明する

やあみんな元気かな?
9leap 9Days Challengeも残すところあと二日となった。

既に50を超すゲームが続々と投稿されて来ているぞ。
ちょっと多すぎて把握しきれなくなって来たくらいだ。

審査基準としては、この9日間のうちに最初に投稿されたゲームを、10日以降は改善していって、31日までの総プレイ数やクオリティで審査、ということになっている。

だから多少未完成でもいまのうちに投稿しておいたほうがいいぜ?




さて、連日投稿されてくるゲームを全てプレイしている僕だけど、ちょうどこんな質問を受けたんだ。


 「iPhoneでゲーム作るのって面白そうですね」

 「え?ああ、うん。面白いよ!」




彼はごく普通のiPhoneユーザ。情報科に通っていて、プログラミングの知識は一通りあるけど、なにかプログラミングする題材を特に見つけられず、燻ってる。ま、そんなごく普通の学生だ。


 「Objective-Cとかいうのをやろうとしていたんだけど、enchant.jsってのをやってるじゃないですか」

 「うん。enchant.jsはゲームを作るだけなら早いよ」




当初、enchant.jsはドキュメントが圧倒的に不足していた。

しかし、IDEA*IDEAや、唯物是真 @Scaled_Wurmポケモン大好きな中学生の日記強火で進め!T-38の日記などなど、enchant.jsのチュートリアルや周辺情報をまとめたブログも増えて来た。

昨日もまた、現役のゲームプログラマであるphi_jpさんによるTM Life:enchant.js を使ってゲームを作ろう!!がアップロードされた。これは非常にチュートリアルとして良くまとまっている。

そういうわけで、フリー、オープンソースのenchant.js周辺は日本製ということもあって動きが活発だ。

対して、Objective-Cは、もともとはNeXTというマシン用に開発された言語だったが、NeXTが転生してMacOSXになり、そしてiPhoneを契機に爆発的に普及を見せているオブジェクト指向言語である。

iPhoneアプリはほぼ全てこのObjective-Cで書かれているといっても過言ではない。


 「それで、Objective-Cとenchant.jsと、どっちがいいですか?」

 「どっちがいいって言えないね。実行速度ならObjective-C、気軽さならenchant.jsって感じかな」

 「enchant.jsで作るとアプリにできないって聞いたんですけど」

 「ああ、そうか。そんなことはないんだよ」




誤解されている部分があるが、実はenchant.jsはアプリで使用できないというわけではない。
enchant.jsは、すなわちJavaScriptなので、簡単なプログラムさえ書けばローカルで動作する形式のアプリを作ることは難しくない。

ただ、この場合、Objective-Cに比べて、パフォーマンス的に不利なだけだ。
とはいえ、世の中にはCPUをブン回さないと遊べないゲームもあるが、CPUをブン回す必要がないゲームもある。要するに道具は使いようということだ。


 「Objective-Cで簡単なWebKItのプログラムを書けば、中身はenchant.jsのゲームアプリを作ることができるよ。ゲームに限らないけど」

 「ええっ、そうなんですか?」

 「そうだよ。JavaScriptだからね。Androidアプリだって作れるし」

 「そうなんだ・・・・そうそう、JavaScript、JavaScriptなんですよね。それで思い出したんですが、IMPACTっていうのもあるじゃないですか」

 「あああれね。あれもJavaScriptだね」

 「それと、最近雑誌で読んだんですけどTitaniumっていうのもあるらしいですね」

 「ああ、Titaniumね」

 「もうどれをやっていいんだかわかんないんで。清水さんに聞いたらenchant.jsやれって言われるとは思うんですけど」

 「それはどうかな」

 「えっ?」

 「そもそも、enchant.jsとその他のJavaScript関連のエンジンは目的が全く別のものだからね」

 「そうなんですか?」

 「そうだよ」




TitaniumやIMPACTといった、JavaScriptベースのクロスプラットフォーム開発環境が最近注目を浴びて来ている。

IMPACTはゲーム開発に特化しているが、Titaniumはより一般的な目的をJavaScriptで達成できるようにもっと範囲を広く捉えていると考えられる。

純粋に処理速度だけで並べると



 enchant.js = TItanium = IMPACT <<<< Objective-C



ということになる。

ただしIMPACTが優れているのは、音声関連などHTML5がまだちゃんとカバーしていない範囲もきちんとカバーしているところだ。

ただし、JavaScriptも実際にベンチマークをとればそれほど処理速度で負けない可能性もある。
というのは、現在、ブラウザの性能を測る指標として、JavaScriptの実行速度が非常に重要視されるようになってきているからだ。

昔はJavaScriptといえばブラウザのお荷物、のような存在だったが、GoogleがAJAXと呼び変えた再発見を行ったことで、JavaScriptの実行性能は最も重視される指標のひとつになった。

実際、ChromeやSafari、IE9などでのJavaScriptの実行速度そのものはかなり速い。ここにApple、Google、Microsoftという世界で最も技術にプライドを持った三強が技術資源を投下して日々最適化を繰り返している。



 「ということはenchant.jsは処理速度ではObjective-Cより不利なわけですか。それじゃあちょっとつまらないなあ」

 「という考え方はもちろんあると思うよ。というか、僕みたいなオヤジは、若い頃はマシン語で書かれたゲーム以外は遅いから興味持てないっていう感覚あったし」

 「マシン語・・・機械語ですか?あれでどうやってゲーム作るんです?」

 「いやあ別に今と変わらないよ」

 「今でもマシン語使ってるんですか?」

 「さすがに僕は使ってないけど、PS3とかXbox360とかのプログラミングはマシン語というかアセンブリ言語を使わないとどうしてもパフォーマンス出せないところあるしね」

 「そうなんですか・・・でもそうやって頑張って、処理速度稼いでも、いまのハードは速いから、せいぜい出てくる違いって言ったら、ポリゴンが1割2割増えるだけでしょう?意味あるんですか」

 「まさにそれ、だよ。それと同じことがObjective-Cとenchant.jsにも言えるんだ」

 「えっ?」

 「Objective-CはとりあえずiPhoneで動く言語としては最も“速く動く”。たぶんJavaScriptの100倍以上のパフォーマンスは出せるだろう。そのかわり、ちょっと面倒なことも多い。ゲームを作るとしたら、ゲームを作るための決まり事とか周辺の整理とかいろいろやらないといけない。なにしろObjective-Cは汎用言語だからね。iPhone専用というわけですらないんだ」

 「まあそうですよね」

 「enchant.jsは、iPhoneまたはAndroid、またはPC/Macで動作するミニゲームの開発に特化している。だからミニゲームを作る手順は最も簡単、つまり“早く作れる”。そしてIMPACTとTItaniumはちょうどその中間と言っていいだろうね」

 「速く早くということはできないんですか?」

 「少年、何かを得るには何かを棄てなければならないんだよ」

 「うーん・・・・」

 「どちらにせよ、全ては”慣れ”とも言える。慣れればObjective-Cでゲーム書くのが一番速いし早い。enchant.jsはActionScriptに似ているので、Flashが得意な人がやれば慣れてるから早いかもしれない。IMPACTは有料なので良く知らない。TItaniumはどちらかというとAndroid寄りなイメージがある。独自の環境って感じだね。でもAndroidとiPhoneのアプリを両方同時に作ろうとしたらTitaniumが一番速くて早いかも」

 「うーん・・・・でもAndroidのアプリなんか作る必要あるんですか?」

 「それはなんとも言えないよ。使う側の都合だもん。何度も言ってるけど、あくまでそれは”道具”にすぎないからさ」



なにかを得るためには何かを喪う。
これをトレードオフと言う。

TitaniumはiPhoneとAndroidのアプリを両方同時に作ろうとしたときには非常に頼もしいツールだ。
しかし、こうするとどうしても最大公約数的なアプリになってしまうだろう。

Androidで動かすならJava + Android SDK、iPhoneで動かすならObjective-C + iOS SDKがもっとも高い実行効率を出せるのは自明だ。



ただし、あまりハイスピードで処理する必要がないアプリなど世の中にはいくらでもある。
占いアプリとか、ニュースアプリとか、業務アプリなどは、Titaniumで作るのがいいだろう。




ゲームであっても、たとえば3Dバリバリのアクションゲームなどは、enchant.jsだろうがIMPACTだろうが使うべきではない。Objective-CとOpenGLESの出番だ。ま、それもWebGLが普及するまでのことかもしれないが。

しかし、簡単なパズルゲームや昔のFlashで実現できたようなアクションゲームだったら、enchant.jsでも十分かもしれない。

実際、それは十分のように感じる。9leap.netを見ればそれが解る。

また、実はこの会話では触れていないが、クロスプラットフォームで3DバリバリのゲームをJavaScriptで組みたいなら、最も優れた選択肢はUnityだ。Unityについては中島謙互さんの連載でかなり詳しく解説されている。


 「じゃ、そのUnityってやつを使うのがいいですかね」

 「3Dバリバリのゲームを作りたいならね。しかしさ、君、現実問題、3Dゲームをつくるときは3Dモデルを作る人と、動きをつける人を探してこなくちゃならんよ。そっちのほうがずっと大変なわけでね」

 「ああ。確かに。うーん・・・混乱してきました」

 「まあ選択肢がゼロに近かった僕が若かった頃と比べて、今の時代は選択肢が多すぎて悩むよねえ」

 「これ、なんかうまく理解する方法ないですか?ほら、清水さんの、得意の、アレで」

 「得意のアレってなんだよ」

 「マンガとか。マンガに例えるとか」

 「お前もかよ!」




こういうのをナントカ脳というのだろうか。
マンガにたとえてもらわないと誰もわからないのか。よくわからないけど



 「それでええと・・・もういいよ、何に例えればいいんだ?」

 「まどかマギカでお願いします」

 「それ、僕が見てると思うか?」

 「いえ・・・」

 「じゃあイカ娘で・・・」

 「あー、見てないなー。っていうか、思ったけど、最近のアニメぜんぜん見てないや。ごめんね」

 「そ、そんな・・・・じゃ、古いところでドラゴンボールでいいです」

 「お、ドラゴンボールね。ドラゴンボール・・・・うーん、ま、なんとかなるか」




ドラゴンボールについても説明はいらないと思う。
というか、たとえに出すマンガがどんどん古くなって来てるような気がするのは気のせいだ。


 「まあ悟空がね、C言語だとすれば、クリリンがJava、ベジータがObjective-C」

 「それって強さ=早さの順で?」

 「待て待て。僕もよくわからん。で、Titaniumはサイヤ人(iPhone)と地球人(Android)を橋渡しするという意味で、ま、ブルマかな」

 「じゃあTitaniumアプリはトランクス!?」

 「んーまあそういうことでもいい」

 「IMPACTはなんになるんですか?」

 「ナッパかな。あくまでサイヤ人(iPhone)だし」

 「なんかフレームワーク系弱すぎませんか?」

 「ナッパけっこう強いじゃん」

 「いやそういう問題ではなく・・・」

 「ではUnityは?」

 「Unityか。あれはね、まあドクター・ゲロかな」

 「え!?なんで?」

 「ドクター・ゲロは人造人間をつくるじゃん。”簡単かつ強力”という意味ではUnityで作られた作品ってドラゴンボールの人造人間っぽい」

 「じゃあマシン語は?」

 「界王様かな」

 「なるほど・・・で、肝心のenchant.jsは?」

 「ミスター・サタンでしょ」

 「なるほど・・・よく・・・わかったような・・・そうでもないような・・・・」



今回も難しかった!

このエントリーをはてなブックマークに追加
はてなブックマーク - [GW企画]これからプログラミングをやろうとしている一般iPhoneユーザにenchant.jsとIMPACTとTitaniumとObjective-Cとマシン語の違いをドラゴンボールに例えて説明する
Post to Google Buzz
Share on GREE

No related posts.

Facebook comments:

Post a Comment

Your email is never published nor shared. Required fields are marked *
*
*