大ヒットWebサービスを作る!!
テーマ:サービス・技術 こんにちは、Amebaで新規モバイルゲームの企画・開発をしている2009年入社、2年目のたかいちです。
先日、社長藤田のブログ
にも書かれていたように弊社技術部門では「Billion 100 Project」を最上位概念の目標として掲げています。詳細は上記ブログを見ていただくとして、目標達成のためには 、
・次々と新しいWebサービスを生み出す
・Webサービスを大ヒットさせる
の2点、つまり量と質を追求することがポイントだと、自分は解釈しています。
新しく大ヒットWebサービスを生み出すために、Amebaでは様々な「技術」が使われています。
そこで今回は 、大ヒットWebサービスを作るために、我々が使っている「技術」を、
○設計(作るサービスの内容を企画して決める)
○開発(デザインとプログラミングによる実装)
○運用(リリース後の機能追加やイベント運用)
の各フェーズについて、1点ずつ紹介します。
(※実際のBtoCサービスで明確にフェーズが分かれることはありませんが、便宜的に3つに分けています)
○設計時の技術「モチベーションツリー」
こちらは主にモバイルゲームの企画時に使われている「技術」で、
ゲームの軸となる以下の3点
・ゲーム内のユーザーの「目的」
・目的を達成するために変動する「パラメータ」
・ユーザーが実際に行う「アクション」
をそれぞれつないで可視化したものです。
上の図はAmebaでリリースされたばかりのモバイルゲーム「俺達のプロレス」をこの手法で可視化したものです
(Amebaモバイルのトップページ「おすすめゲーム」から遊んでみてください) 。
ゲームの目的は「最強のレスラーを育てる」ことで
最強になるためには経験値を稼ぎ「レベル」をあげるか、「技」を覚えて攻撃力をあげる必要があり
そのためのアクションとして「練習」と「バトル」があります。
それぞれ実行するためには「スタミナ」と「ファイ魂」の2パラメータが必要なので
ここを調整することでゲームバランスを整えたり、回復するためのアイテムを販売したりします。
逆にゲームの目的に結びついていないパラメータは、目的に結びつくような機能を追加しないと
ユーザーから見て意味のないパラメータになってしまいます。
設計時によく陥る失敗として、詳細を詰めていく過程でゲームの軸がぶれてしまい
必要な機能を見落としたり、不必要な機能を作ってしまい複雑で面白くないゲームになってしまうことが往々にあります。
それを防ぐために、モチベーションツリーを作ってゲームの軸を可視化しながら設計をしています(また、競合他社のゲームを分析するときにも使えます)
○開発時の技術「IndexPersist」
こちらは開発効率を高めるための「技術」で
弊社の執行役員主席エンジニアの名村により開発された、既存のデータベースをkey-value型のデータベースとして扱うJavaのフレームワークです。
下図のように、データクラスの情報を元にオブジェクトをkeyとvalueのバイナリ形式に変換してデータベースに記録します。
・記録時
1、データクラスのGetterメソッドに付けたアノテーションを元にバイナリ値を生成
@IndexKey→id(key)
@Storeをindexの順にシリアライズ→data(value)
2、アノテーション@Persistableから対象テーブルを特定し、idとdataをMySQLに記録、同時にMemcachedにキャッシュ
・参照時
1、データクラスのアノテーション@Persistableから対象テーブルを特定し、idを指定してdataを取得
(まずキャッシュを確認し、無い場合はMySQLから取得)
2、javassistライブラリを用いてデータクラスからプロキシクラスを生成
(@Relationが付いたメソッドを「propertyの値をidとして返り値のクラスを取得するメソッド」にオーバーライドする)
3、@Storeの付いたGetterメソッドに対応するSetterメソッドを探して、プロキシクラスに値を挿入
4、Memcachedにキャッシュ
なお
keyを範囲指定することで複数レコード取得することも可能であり
排他制御をするために、分散されたアプリサーバの処理を制御するJavaで作られたLockサーバを使用します。
これにより
・SQL文を書く必要がない
・オンラインでのカラム追加が可能
・キャッシュが楽
といった大幅な開発効率向上のメリットがあります。
BtoCのサービスであれば、複雑なSQLを使うよりも、シンプルな構成にして開発スピードをあげる方が重要です。
○運用時の技術「戦略カレンダー」
こちらは主に課金サービスの運用時に使われる「技術」です。
Amebaゼネラルマネージャーの高橋により開発されました。
Amebaのサービスにはユーザーに課金してもらい収益を上げるサービスがいくつかあります。
例えばアメーバピグ、アメーバプレゼント、モバイルゲームなどがありますが
そういったサービスの特徴として、日ごとの売上が多くて5倍以上差が開くことがあります。
原因は「新アイテム販売」「期間限定イベント」などの「施策」によって
特定の日や期間に、ユーザーの購入が集中するためです。
そのため、単純に「1日の平均値」を日数でかけて売上を想定することが出来ません。
この前提の中で、
・1ヶ月の売上を予測し
・売上目標達成に向けて施策の内容とスケジュールを決める
ためのツールとして「戦略カレンダー」が開発されました。
このツールの基本的な考え方は日ごとの売上を「ベース値」と「スポット値」の2種類に分けることです。
「ベース値」とは何も施策を打たない日の平均的な売上
「スポット値」とは施策実施によってプラスされる売上
この2値を足しあわせて日ごとの売上を想定します。
上の図は、1ヶ月の売上目標が2000万のサービスを想定した戦略カレンダーです。
ベース値は40万/日を想定、これは1ヶ月の間大きく変わることはありません。
4日に注目すると、この日は新アイテムの販売によってスポット値が60万を想定しています。
つまり、ベースの40万に加え新アイテム販売による60万が積み重なって、4日の「想定売上」は合計100万になります。
5日になれば実際の売上がわかるので、4日の「実績値」の欄に記入します。
そして、月初から前日までの実績値と、当日から月末までの想定売上の和が1ヶ月の「売上想定」となります。
この売上想定が1ヶ月の「売上目標」に足りない場合は、事業目標を達成できないということなので
目標達成に向けて足りない施策を考えていきます。
このように
・月の売上目標への進捗を都度確認し、必要な施策を打ったり
・次月以降の目標達成に向けた運用戦略を立てたり
という目的のために使われています。
以上、新しく大ヒットWebサービスを生み出すために、Amebaで実際に使われている「技術」を紹介しました。
Amebaではこういった技術を駆使して、エンジニア、デザイナー、プロデューサーが一丸となってサービスを作っています。
もちろん上記以外にも様々な技術が使われていますので、機会があればまたこの部ログなどで紹介していきたいと思います。