今までちょっと固めの話が多かったので、今回は、僕らのゲーム Jumper (ジャンパー) が生まれた理由に関して話していこうと思います。では、まずは、遊んでみてください。

Jumper iOS 版
Jumper Android 版

Jumper ≠ ゲーム

Jumper はよく周りからゲームとして捉えられています。一応、アプリとしてのジャンルは、アクションゲームに値するのですが、何度かプレイしたユーザは、世界観の広さに気づかれている方も多いようです。

リリース以降数ヶ月のゲームで機能も非常にシンプルなものではありますが、100以上のステージを作成している作者がいたり、ほとんど全てのステージをクリアしている強者もいます。

他人のステージが簡単すぎたり、つまらなかったら自分で作ってしまえば良い。難しすぎれば、簡単なステージを作れば良い。そのようにして、日々、多くのステージが生み出されています。

これぞ、 Jumper のキャパシティの広さといえます。単にゲームとして考えるだけではもったいないです。

Creativity and Communication

Jumper には2つのCが思いとして込められています。まず、1つめは、Creativity (創造性) です。ステージのクリアの方法は1つでないことが多いです。沢山のルートから好きなものを選択できる魅力があります。また、多数の Jumper (キャラクター) の中から、好きな Jumper を選択してステージをクリアしていくのです。

そして、2つめは、 Communication (コミュニケーション) です。ステージを作ること自体も、他のユーザとのコミュニケーションの手段になりますし、コメント機能によってアドバイスしあったりするのも、 Jumper ならではの楽しみ方といえます。

2つのCが1つのアプリに備わっている。そのように考えています。当初から、あまり難しく方向性を定めず、創造性やコミュニケーションが円滑に行えるような設計をしてきました。

ゲームという視点よりも、むしろ SNS (ソーシャル・ネットワーキング・サービス)というような視点で設計や実装するように考えています。

Haskell で書かれた頑健性の高いAPIサーバ

そして、前に述べたようなアプリを作る上で重要なのが、インフラとなるAPIサーバです。APIサーバには、Haskell を採用しました。

Haskell は非常に強い静的型付けの言語です。あくまで傾向の話になりますが、動的型付け言語と静的型付け言語を比べたときに、静的型付け言語の方が開発コストは高くなりますが、運用コストは安くなります。

Haskell は静的型付け言語で、記述する文法もかなり制限の厳しいものとなります。これが幸いして、GHC コンパイラによってビルドが通る時点で、かなりバグの少ないソフトウェアとなります。ビルドができるということが、既に厳しいチェックを終えた後ということになります。

Jumper は、ゲームという性質上、不正を許してはいけません。不正を防ぐためには、暗号化の技術はもちろん、プログラム上のバグを最小限にしなくてはいけません。Haskell はそれに一役買っているといえます。

よくプログラムによっては、1ヶ所直すと、多数のバグが生まれてしまうことがあります。これは、プログラマが、物事の切り分けが上手くできていない場合に起こります。切り分けが下手ですと、これもあれもと、同じ関数に違う値を入れ込みたくなってしまいます。Haskell では、関数に入る型を明示しなくてはいけません。バグを生むような値が関数に適応されることは少ないのです。

ユーザ毎に違うパラメータも、先ほどお話した型を見ることでユーザ毎に異なるパラメータだと認識することができます。型によって、プログラマは注意すべき点をミスなく実装していくことができ、それぞれのユーザに同様のユーザ体験を届けることができるのです。

また、ゲームやアプリは、基本的には同じサービスの繰り返しになります。これを、n次元では、「ユーザ体験は繰り返し」という表現をしております。関数型言語の高階関数Lambda (ラムダ)によって、多数のユーザに同じ体験を届けるということが非常に容易になります。

やることは、ユーザの一覧を取ってきて、適切な高階関数と Lambda に投げるだけです。Jumper のシステムは、以上のように全体として非常にシンプルなものなのです。

Cocos2d-x で書かれた移植性の高いゲームアプリ

Jumper のスマートフォンの実装は、 Cocos2d-x によって行われています。Cocos2d-x のどこがよいかという話を致します。

Cocos2d-x はオープンソースのフレームワークで、世界中のプログラマがフレームワークのバージョンアップに日々貢献しています。そのおかげで、フレームワークとしての設計や実装が年々良くなってきています。

現時点では、Cocos2d-x プログラミングやフレームワークの扱いに習熟した人が、ひと目で理解できる設計になっています。洗練された設計によって、メンテナンスのコストは劇的に下がっていきます。

また、Cocos2d-x は C++ で開発されているので他の言語(C言語とか Objective-C、Javaなど)との親和性は非常に高いです。他の言語による成果を取り入れることが容易になります。これは、開発コストを下げるのに役立ちます。

これらのメリットを鑑みて、バージョンアップを頻繁に行いたい Jumper にとって Cocos2d-x 1択という結果になりました。

そして、なによりも

楽しく開発する。これに尽きるかと思います。創造性を最大限に高めるのには、どんなツールよりも楽しさが一番大事になります。

n次元は、3年目となり、事務所も一転。より快適に働ける環境を実現する工夫を日々取り入れています。受託会社ということで、リソースは100%避けるわけではありませんが、毎日楽しくやっております。

少しでも多くのアップデートを皆さんに届けられるように日々努力していきます。今後とも n次元 及び Jumper をよろしくお願いします。