Mais conteúdo relacionado Semelhante a mixiアプリxZendFramework (20) mixiアプリxZendFramework1. mixiアプリ
x
ZendFramework
バズー株式会社 開発チームリーダー
清水樹
id:Bayside * bayside@twitter * http://tec.buzoo.jp/
Copyright (C) 2010 Buzoo Inc. All Rights Reserved.
2. アジェンダ
■ ソーシャルアプリとは?
■ mixiアプリとは?
■ mixiアプリとmixiアプリモバイルの違い
■ 携帯版(mixiアプリモバイル)の注意点
■ PC版(mixiアプリ)のはじめかた
■ 携帯版(mixiアプリモバイル)のはじめかた
■ mixiアプリ事例紹介
■ ZendFrameworkの使いどころ
Copyright (C) 2010 Buzoo Inc. All Rights Reserved. id:Bayside * bayside@twitter * http://tech.buzoo.jp/ 2
3. ソーシャルアプリとは?(1/2)
■ SNSのソーシャルグラフを利用したウェブアプリケーション
■ 共通API(オープンソーシャルAPI)を使用
■ Person & Friends API
■ Community API
■ Activities API
■ Persistence API
■ Facebookが2004年にリリース
■ その後5年で3億のアクティブユーザーを獲得
■ サードパーティにプラットフォームを解放
■ 一つ作れば他のプラットフォームへの移植も割と容易
■ めちゃくちゃ儲かる人が出現
■ 怒涛のようにFacebookアプリが溢れ、勝ち組と負け組に2極分化
Copyright (C) 2010 Buzoo Inc. All Rights Reserved. id:Bayside * bayside@twitter * http://tech.buzoo.jp/ 3
4. ソーシャルアプリとは?(2/2)
■ 日本では2009年から導入開始
■ 2009年8月mixiアプリリリース
■ 2009年10月mixiアプリモバイルリリース
■ 2010年1月モバゲーアプリリリース
■ 2010年多くの国内ゲームメーカーが参入予定
■ スクウェア・エニックス
■ ハドソン
■ コーエーなど
■ 2010年6月GREEアプリリリース予定
■ 2010年は日本でのオープンソーシャル元年
■ いますぐ参入すれば半年程度はブルーオーシャン
Copyright (C) 2010 Buzoo Inc. All Rights Reserved. id:Bayside * bayside@twitter * http://tech.buzoo.jp/ 4
5. mixiアプリとは?
■ mixi版ソーシャルアプリ
■ PC版(mixiアプリ)と携帯版(mixiアプリモバイル)がある
■ PC版と携帯版があるのは世界初
■ 後続のモバゲーは携帯版のみ
■ GREEはPC/携帯両方になる?
■ JavascriptAPI / RESTfulAPI が使用可能
■ マネタイズは広告かアプリ内課金(300円/回まで)
■ キャリア課金が可能
Copyright (C) 2010 Buzoo Inc. All Rights Reserved. id:Bayside * bayside@twitter * http://tech.buzoo.jp/ 5
6. mixiアプリとmixiアプリモバイルの違い
PC版(mixiアプリ) 携帯版(mixiアプリモバイル)
開発 個人でも可 法人のみ
広告 比較的自由に貼れる mixi公式のみ
外部リンク 比較的自由に貼れる 一切禁止
キャリア課金 ○ ○
個人情報取得 外部リンク先で取得可能 一切禁止
PV数 少ない 圧倒的に多い
OpenSocialAPI Javascript / RESTful RESTful
アプリ実行 ユーザーのブラウザ内 サードパーティのサーバー内
Copyright (C) 2010 Buzoo Inc. All Rights Reserved. id:Bayside * bayside@twitter * http://tech.buzoo.jp/ 6
7. 携帯版(mixiアプリモバイル)の注意点
■ mixiプラットフォームがユーザー/SAP間に入っている
■ ユーザーからはmixi内にいるように見える
■ 実際のアプリはサードパーティー内(SAP)にある
■ 負荷対策を自前でする必要がある
■ 初速がものすごいため、最初から高負荷に対応する必要がある
■ コストパフォーマンスを考えるとクラウドも視野に入れる
■ 絵文字変換、画像変換等は自前でやる必要がある
Copyright (C) 2010 Buzoo Inc. All Rights Reserved. id:Bayside * bayside@twitter * http://tech.buzoo.jp/ 7
8. PC版(mixiアプリ)のはじめかた
■ ディベロッパー登録(個人)
■ 管理画面よりアプリ登録開始
■ GadgetXMLファイル(UTF-8)にガリガリコードを書く
■ テスト(テスト時に他人が使うときは承認が必要)
■ カテゴリ申請(2週間から1ヶ月程度待つ)
■ 規約に反していて申請が通らなかった場合は修正して再度申請
■ 申請が通ると誰でも利用可能になる(新着アプリ掲載)
■ 広告申請(mixiアドプログラム)
■ 広告開始
■ 継続的な改善と更新
Copyright (C) 2010 Buzoo Inc. All Rights Reserved. id:Bayside * bayside@twitter * http://tech.buzoo.jp/ 8
10. mixiアプリ事例紹介(1/5)
■ 自社開発アプリを4本リリース済み
■ 4本中3本がPC/携帯両対応
■ すべてZendFramework製
■ mixiアプリ新規1本作成中
■ モバゲーアプリ準備中
■ GREEアプリ準備中
Copyright (C) 2010 Buzoo Inc. All Rights Reserved. id:Bayside * bayside@twitter * http://tech.buzoo.jp/ 10
11. mixiアプリ事例紹介(2/5)
青空文庫
利用者数:約32万人
著作権の切れた文学作品を収集・編集し
インターネット上で公開している電子図
書館がミクシィに初登場!
秋の夜長、あいている時間を読書にあて
て、あなたも知識人!
http://mixi.jp/view_appli.pl?id=11421(PC用)
http://m.mixi.jp/view_appli.pl?id=11421(携帯用)
Copyright (C) 2010 Buzoo Inc. All Rights Reserved. id:Bayside * bayside@twitter * http://tech.buzoo.jp/ 11
12. mixiアプリ事例紹介(3/5)
みんなでチャット
利用者数:約8万人
眠れない夜にみんなでおしゃべり!シン
プルで使いやすいチャットです!
二人っきり話せるプライベートモードも
現在開発中です!
遊び方を守ってお楽しみください。
http://mixi.jp/view_appli.pl?id=12886(PC用)
http://m.mixi.jp/view_appli.pl?id=12886(携帯用)
Copyright (C) 2010 Buzoo Inc. All Rights Reserved. id:Bayside * bayside@twitter * http://tech.buzoo.jp/ 12
13. mixiアプリ事例紹介(4/5)
女子力UP☆マナークイズ
利用者数:約4万人
マナークイズで女子力UP!
セレブ度を上げてともだちと競おう!
セレブスタイル浜松町主宰 マナー研究家
住友淑恵先生監修!
ランキング上位者には素敵なプレゼントが!!
http://mixi.jp/view_appli.pl?id=13904(PC用)
http://m.mixi.jp/view_appli.pl?id=13904(携帯用)
Copyright (C) 2010 Buzoo Inc. All Rights Reserved. id:Bayside * bayside@twitter * http://tech.buzoo.jp/ 13
14. mixiアプリ事例紹介(5/5)
こころの花束
利用者数:約1万人
相手への感謝の気持ちを言葉の花束にし
て届けましょう!
みんなにたくさん感謝された方には素敵
なプレゼントが!
http://mixi.jp/view_appli.pl?id=14082(PC用)
http://m.mixi.jp/view_appli.pl?id=14082(携帯用)
Copyright (C) 2010 Buzoo Inc. All Rights Reserved. id:Bayside * bayside@twitter * http://tech.buzoo.jp/ 14
17. ZendFrameworkの使いどころ(URIの処理)
■ mixi内のURLはホスト名つきでそのまま記述
■ ドコモの場合は guid=ON 必須
■ urlパラメータをmixiが自動的に解釈してリクエストを返す
■ ブラウザがキャッシュが効き過ぎるので毎回ユニークなURIにする
index.php とか
function fp($path) {
if ( preg_match('/?/', $path) ) {
$path .= '&randomid='.uniqid();
} else {
$path .= '?randomid='.uniqid();
}
return '?guid=ON&url='.urlencode('http://somewhere/'.$path);
}
index.phtml とか
<a href="invite:friends?callback=<?= urlencode('http://somewhere/') ?>">友達にすすめる</a>
拾<a href="http://m.mixi.jp/view_community.pl?id=4712506">お問い合わせ</a>
女 <a href="<?= fp('/help/index') ?>">ヘルプ</a>
 <a href="<?= fp('/') ?>" accesskey="1">[1]Topへ戻る</a>
Copyright (C) 2010 Buzoo Inc. All Rights Reserved. id:Bayside * bayside@twitter * http://tech.buzoo.jp/ 17
19. ZendFrameworkの使いどころ(セッション)
■ リクエストごとに opensocial_owner_id(mixiユーザーID)が必ず
渡ってくる
■ セッションIDの代わりに opensocial_owner_id を使う
index.php
ini_set('session.save_handler','user');
require_once('Util/Session.php');
Util/Session.php
<?php
function _open($save_path, $session_name) { global $sess_save_path; $sess_save_path =
APPLICATION_PATH . '/../session'; return(true); }
function _close() { return(true); }
function _read($id) { global $sess_save_path; $sess_file = "$sess_save_path/sess_".
$_REQUEST['opensocial_owner_id']; if (file_exists($sess_file)) { return (string)
@file_get_contents($sess_file); } else { return (string) null; } }
function _write($id, $sess_data) { global $sess_save_path; $sess_file = "$sess_save_path/sess_".
$_REQUEST['opensocial_owner_id']; if ($fp = @fopen($sess_file, "w")) { $return = fwrite($fp, $sess_data);
fclose($fp); return $return; } else { return(false); } }
function _destroy($id) { global $sess_save_path; $sess_file = "$sess_save_path/sess_".
$_REQUEST['opensocial_owner_id']; return(@unlink($sess_file)); }
function _gc($maxlifetime) { global $sess_save_path; foreach (glob("$sess_save_path/sess_*") as
$filename) { if (filemtime($filename) + $maxlifetime < time()) { @unlink($filename); } } return true; }
session_set_save_handler("_open", "_close", "_read", "_write", "_destroy", "_gc");
Copyright (C) 2010 Buzoo Inc. All Rights Reserved. id:Bayside * bayside@twitter * http://tech.buzoo.jp/ 19
20. ZendFrameworkの使いどころ(絵文字)
■ MobilePictogramConverterを使うと楽ちん
■ Softbankでは MPC_TO_OPTION_WEB にすると化けるので
MPC_TO_OPTION_RAW を指定してます
■ 本家サイトがなくなっているので(汗)ググって取得してください
layout.phtml
<?= '<?xml version="1.0" encoding="Shift_JIS"?>'; ?>
<!DOCTYPE html PUBLIC "-//i-mode group (ja)//DTD XHTML i-XHTML(Locale/Ver.=ja/1.0) 1.0//EN"
"i-xhtml_4ja_10.dtd">
<html xml:lang="ja" xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="application/xhtml+xml; charset=Shift_JIS" />
<title>xxxxx</title>
</head>
<body>
<?php
require_once 'MobilePictogramConverter.php';
$mpc = MobilePictogramConverter::factory($this->layout()->content, MPC_FROM_FOMA,
MPC_FROM_CHARSET_SJIS, MPC_FROM_OPTION_WEB);
echo $mpc->autoConvert();
?>
</body>
</html>
Copyright (C) 2010 Buzoo Inc. All Rights Reserved. id:Bayside * bayside@twitter * http://tech.buzoo.jp/ 20
21. ZendFrameworkの使いどころ(高負荷対策)
■ 何も考えないとすぐロードアベレージ数十でサーバーダウン
■ 特に初速(新着アプリ掲載時)がヤバい
■ オープンソーシャルAPIを呼び過ぎない
■ ユーザー情報は一度取得したら24時間は再取得しない
■ マイミク一覧は一度取得したら一定期間保存する
■ コミュニティ一覧は一度取得したら一定期間保存する
■ Zend_Db_Tableで頑張りすぎない
■ パフォーマンスが必要なところは生SQLも辞さない
■ 正規化をあえて崩す
■ Zend_Db 最高(笑)
■ そもそもそれはDBにいれなければいけない情報か?
■ バッチ処理にできないか
■ ランキング
■ リコメンド
Copyright (C) 2010 Buzoo Inc. All Rights Reserved. id:Bayside * bayside@twitter * http://tech.buzoo.jp/ 21
22. まとめ
■ オープンソーシャルアプリが流行っている
■ mixiアプリをやるならPC/携帯両方に対応したい
■ ZendFrameworkでmixiアプリを作ることはもちろん可能
■ でも、高負荷対策をちゃんとやる必要はあり
Copyright (C) 2010 Buzoo Inc. All Rights Reserved. id:Bayside * bayside@twitter * http://tech.buzoo.jp/ 22