2014年7月29日

バックエンドとフロントエンドの開発における考え方の違い

私がメインとして携わっている業務はソーシャルゲームのシステム開発(いわゆるバックエンド)ですが、つい最近、ゲームの演出というか、アニメーション・キャラクターの動き方・スコア表示など、いわゆるフロントエンドをガッツリ作り込む機会がありました。

いろいろ感じたのですが、これは普段の自分がやっている開発内容よりもずっとキツいなあと感じたので報告します。

なお、ここでいうフロントエンドとはゲーム演出に関わるアクションや見せ方をいい、Web製作等でよく言われるCSS・フロントサイドJSとは別です。

ゲームのシステム開発に携わる2つの職種

ゲームとはいえ、これもソフトウェアであり、システムです。ゲームを作るということは、ソフトウェア開発・システム開発をするということでもあります。

このシステム開発に携わる職種は、大きく分けて2つあります。一つは主にロジックやデータの管理・大量アクセス大量更新をどう捌くかといったサーバーサイドを担当するバックエンド開発者、もう一つは主に演出・ユーザーへの見せ方を担当するフロントエンド開発者です。(もちろん製品として完成させるにはデザイナーやプロジェクトマネージャーや営業も関わってきますが、ここでは開発者だけを考えます)

ロジックから演出まで含めて一つのゲームシステムです。なぜ職種が分かれているのでしょうか?それは、システムのロジックと演出で考え方が大きく異なるからだと、私は考えました。その考え方の違いによって、開発者の得手不得手が分かれてくるからです。

サーバーサイドの開発と演出の制作における考え方の違い

バックエンド開発とフロントエンド開発における最も大きな違いは、「終わりがある」か、「終わりにする」かの違いだと思います。あるいは、フロントエンド開発は、開発者が納得したときが終わりなのだと感じました。

普段、仕様を元に仕様を満たすシステムを構成し、仕様を満たすプログラムを実装しているバックエンド開発者は、仕様を満たしていることが確認できれば作業は完了です。もちろん仕様通り作るというのは非常に難しい作業で、それが仕様通りできていることを確認するのも非常に難しい作業です。さらに非機能要件として、秒間最大○アクセスに耐えられる等の仕様もあります。しかし、目指すべき目標はあります。これが「終わりがある」ということです。

一方でフロントエンド開発者の場合はどうでしょうか?

たとえばバイクレーシングゲームを作っているとしましょう。仕様ではAボタン入力でバイクを加速させ、方向ボタンでバイクの重心を変え方向転換やウイリー操作ができるとしましょう。フロントエンドの実装としては、Aボタン入力を受け付けてバイクの動きあるいはタイヤの回転を加速させ、定められたトップスピードに達したら加速を止めるといったことが考えられます。バックエンドの考え方でいけば、加速に関してはこれで仕様を満たしているので実装完了です。

ところが演出を担当するフロントエンド開発者の場合はそうはいきません。車体の重量や道の勾配、風などを考慮して加速を変化させなければなりません。プレイしてみて気持ちよく加速できるか、エンジン音はどうするかなど、突き詰めればどこまでもキリがありません。さらに方向ボタンも実装したら、合わせて加速もチューニングしなければなりません。きりがないけど納期はあります。これが「終わりにする」あるいは納得したときが終わりということです。あるいは監修がいれば、その人が納得するまで終えることはできません。

ゲームのフロントエンド開発をやってみた感想

まず、根性である程度まではやり切りました。根性です。

ただどうしても好きにはなれませんでした。この、終わりが無い感じ、芸術性を突き詰める感じ、短気で大雑把な自分には向いていないようです。

その一方で、見える目標に向かって突き進むバックエンド開発は、すごく自分に向いていると再度実感した良い機会でもありました。前節では仕様さえ満たせばOKのようなことを書きましたが、そんな生易しいものではありません。職人技と言われるような、知識・経験・判断力が中心の世界です。この道を極めて行くのは、非常に難しいです。やればやるほど実感します。尊敬する先輩方の背中は、自分の実力が身に付くほど離れていくような錯覚さえします。それでもどちらを極めたいかと言われれば、迷い無くこちらを選ぶでしょう。

雑なまとめ

時間をかけてもうまく書けないのでまとめて公開しちゃう。

まあどっちも大変だよね、と。