2008年01月08日
FLASHerにとってのWEB開発とゲーム開発の違い
いろいろやるけど結局いちばんわかりやすい肩書きは「FLASHer」。
そんなWeb開発者にとって、
「Webの世界」と「ゲームの世界」とのちがいは予想以上に大変なものがあると気付かされています。
まだまだプロジェクトの序盤ではありますが、
FLASHerがActionScript3.0で本格的なゲーム開発に取り組むなかで
いま感じていることを書いておこうと思います。
まず以下は聞いた話。
少なくとも国内において、ゲーム開発の現場において
「デザインパターン」というものはあまり考慮されてこなかったそうです。
そもそもオープンな考え方ではじまって今に至るWebプログラミングと違って、
ゲームの世界はそれぞれのソフトハウスが
「如何に低級に書いて、如何に高速に処理するか」を独自のノウハウとしてきている、
という経緯があるみたいです。
低級に書く、ということは
便利で高度なライブラリがあったとしても使わずに、
プログラマがその都度がりがりアセンブラでスクラッチで実装する、
ということ。
ソフトハウスのノウハウ、というよりは
個別のプログラマのノウハウ、といったほうがよさそうです。
(そういう技術者が複数年間集まっているところがソフトハウスだった、とも言えるかもしれません)
ゲーム開発の現場の多くでは、複数人での実装を前提とした「コーディングルール」さえあまり存在しない(かった)らしい。。。
Webの世界では比較的少数のメンバーによる小規模な開発でもコーディングルールを渡されたりします。
たかがHTMLメールなんかに至るまでコーディングルールでがんじがらめということも。
ゲーム開発においてPS1以降にようやく「ゲームエンジン」、つまりWebでいうところの「フレームワーク」といった形で個別のプログラマ、個別のプロジェクト・タイトルの枠を超えて資産(ノウハウ)を共有し活用するようになったのは、PS1以降の開発言語がC++になったから。
smalltalk以降のオブジェクト指向の考え方がようやくゲーム開発にも登場したというわけだ。
「デザインパターン」というのも考えればオブジェクト指向以降のコンセプトなので、
まだあまり定着していないというのもうなずける話です。
(PS1もインターネットもだいたい同時期に普及を始めているので微妙な話ではありますが。。。)
さて、我々FLASHerが愛してやまなかった(?)FlashもActionScript3.0になり、
抽象クラス(abstract)の有無など多少の差はあっても
「ほとんどJava」な開発環境になったので、
ゲームらしいゲームが作れる。。。はずなんだけど、
肝心の作る人間のほうがですね、
「FLASHer」なんて呼ばれる人間は所詮Webの世界しかしらない子供なわけで、
なかなか本格的なゲーム開発の文化になじみにくいものがあります。
JAVAやC++でのゲーム開発経験があれば言語的な壁はほぼないと思いますし、
その他の言語(Cなど)でのゲーム開発経験があれば
オブジェクト指向の壁があったとしても
プロジェクトがどのように進むのかは経験的に見通しが効くとおもいます。
しかしながら哀れなFLASHerは!
オブジェクト指向の壁にぶつかり、同時に
Webの世界ではあり得ない「仕様は、実際につくって動かしてみないとわからない」という恐ろしい壁にもぶつかります。
今まさにこの壁にぶつかっています。
(しかも3Dプログラミングというオマケつき!)
「仕様が決まらない」というのは、Webにしろイントラにしろ、業務系システムではままあることです。
顧客企業のビジネスを洗い、要件を定義していくのに困難が伴うのは、
「そのビジネスがいま一体どのようであるのか」最適なソリューションを用意することの困難さに起因するとおもいます。
コンシュマー向けのWebサイトやSaaSの場合は、
顧客の要求がマーケティングなどに裏打ちされた企画ドリブンであるためにこのような混沌は比較的少なく、
「がちっと仕様を固めてから」「とりあえず仕様通り作ってみよう」が通用します。
そのあとで「やっぱりこうしよう」というのはあっても、
そもそも仕様が決まらないということはあまりない。
一方でゲーム開発の場合に「仕様が決まらない」のはなぜか?
いまのところ僕はその理由を、
ゲームというプロダクトが 広義の「メディアアート」だからなんだと思っています。
美術作品らしきものをつくっていた学生時代を思い出せば、
納得するモノに落ち着くまでの試行錯誤といったらなかった。
そもそも、どんな結果で自分が納得するか、それがわからない。だから作る。
ゲーム開発もこういうところがあるんじゃないかなぁと思います。
Web開発の現場に慣れてきていた自分には、
いかに合理的に開発を進めるか、効率的にプロジェクトを結果に導くかが
すべての開発者のプロジェクトの命のように思えていました。
だからこそ、可能な限り高級な技術でもって
再利用性や可用性・仕様変更に耐えうる実装を目指す。
(僕自身はオブジェクト指向では開発していなかったものの、そういうことが大切だとは思っていました。)
技術的に試行錯誤することはあっても、その前の仕様や企画はブレない。
ブレるような仕様や企画は、それを書いた人間が悪い。
それが基本的なスタンスになっていました。
でもそれだけが開発ではないんだな、
ということをゲーム開発のプロジェクトに参加させていただく中で感じるようになりました。
デザインの作業に近い気もしますが、
積み重ねる作業量が全然違う。
これがゲーム開発なのかなぁ、などと考えながら格闘しています。
もしあなたが口先だけでなく、本当に新しい価値のために努力できるFLASHerなら、
いまこの時期に十分楽しんで取り組める分野だと思います。
自分も、口先だけでなく常に新鮮な価値のために努力を続けられるようでありたいと思います。
結果やいかに。。。
ゲーム開発の事例でもありましたが、
パフォーマンス(手続き型)と開発効率(オブジェクト指向型)、
どっちをとるかで悩むところでもありますが、
実際のところ、
ゲーム開発もOOPが主流になってきてるのでしょうか?
その手の人間ではないのでわからんとです。