mixiアプリxZendFramework

3,032
-1

Published on

ZendFramework製mixiアプリの事例紹介と、ZendFrameworkの使いどころがわかります。バズー株式会社ではソーシャルアプリの受託開発を行っています。

Published in: Technology
0 Comments
4 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
3,032
On Slideshare
0
From Embeds
0
Number of Embeds
4
Actions
Shares
0
Downloads
28
Comments
0
Likes
4
Embeds 0
No embeds

No notes for slide

mixiアプリxZendFramework

  1. 1. mixiアプリ x ZendFramework バズー株式会社 開発チームリーダー 清水樹 id:Bayside * bayside@twitter * http://tec.buzoo.jp/ Copyright (C) 2010 Buzoo Inc. All Rights Reserved.
  2. 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. 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. 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. 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. 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. 7. 携帯版(mixiアプリモバイル)の注意点 ■ mixiプラットフォームがユーザー/SAP間に入っている ■ ユーザーからはmixi内にいるように見える ■ 実際のアプリはサードパーティー内(SAP)にある ■ 負荷対策を自前でする必要がある ■ 初速がものすごいため、最初から高負荷に対応する必要がある ■ コストパフォーマンスを考えるとクラウドも視野に入れる ■ 絵文字変換、画像変換等は自前でやる必要がある Copyright (C) 2010 Buzoo Inc. All Rights Reserved.    id:Bayside * bayside@twitter * http://tech.buzoo.jp/ 7
  8. 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
  9. 9. 携帯版(mixiアプリモバイル)のはじめかた ■ パートナーアカウント登録(登記簿謄本が必要) ■ パートナーアカウント申請が通るとメインアカウントとテスト用ア カウント(20個まで)がもらえる ■ 管理画面より登録開始 ■ GadgetXMLファイル(UTF-8)にアプリのURLを書く ■ テスト(テスト時は他人は一切使用不能) ■ カテゴリ申請(2週間から1ヶ月程度待つ) ■ 規約に反していて申請が通らなかった場合は修正して再度申請 ■ 申請が通ると誰でも利用可能になる(新着アプリ掲載) ■ 広告申請(mixiアドプログラム) ■ 広告開始 ■ 継続的な改善と更新 Copyright (C) 2010 Buzoo Inc. All Rights Reserved.    id:Bayside * bayside@twitter * http://tech.buzoo.jp/ 9
  10. 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. 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. 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. 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. 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
  15. 15. ZendFrameworkの使いどころ ■ 携帯版(mixiアプリモバイル)での使いどころを中心に ■ PC版は携帯版のロジックをほぼそのまま流用  ■ PC版でも RESTfulAPI を使用 ■ トピックス  ■ RESTfulAPI  ■ URIの処理  ■ セッション  ■ 絵文字  ■ リダイレクト  ■ 高負荷対策 Copyright (C) 2010 Buzoo Inc. All Rights Reserved.    id:Bayside * bayside@twitter * http://tech.buzoo.jp/ 15
  16. 16. ZendFrameworkの使いどころ(RESTfulAPI) ■ 開発ガイドのサンプル通りで問題なし ■ OAuth.phpだけダウンロードする必要あり ■ ZendFramework 1.7系の Zend_JSON はマルチバイト対応が× ■ Zend_JSON だけは 1.8系のものを利用 ■ 主な機能  ■ Person & Friends API  ■ Community API  ■ Activities API  ■ Persistence API  ■ Album API Copyright (C) 2010 Buzoo Inc. All Rights Reserved.    id:Bayside * bayside@twitter * http://tech.buzoo.jp/ 16
  17. 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
  18. 18. ZendFrameworkの使いどころ(リダイレクト) ■ ユーザーからはmixi内にいるように見えるので、必ずホスト名付き のフルパスで指定する必要がある ■ mixiプラットフォームが自動的に解釈してリクエストを返す ■ この辺りの処理はベースコントローラに書くと楽ちん ■ セッションID、guid=ONはつけない ベースコントローラとか /** * @override */ protected function _redirect($url, array $options = array()) { return parent::_redirect('http://someware/' . $url, $options); } Copyright (C) 2010 Buzoo Inc. All Rights Reserved.    id:Bayside * bayside@twitter * http://tech.buzoo.jp/ 18
  19. 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. 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. 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. 22. まとめ ■ オープンソーシャルアプリが流行っている ■ mixiアプリをやるならPC/携帯両方に対応したい ■ ZendFrameworkでmixiアプリを作ることはもちろん可能 ■ でも、高負荷対策をちゃんとやる必要はあり Copyright (C) 2010 Buzoo Inc. All Rights Reserved.    id:Bayside * bayside@twitter * http://tech.buzoo.jp/ 22
  23. 23. 最後に ■ バズー株式会社ではソーシャルアプリの受託開発を行います ■ お問い合わせお待ちしています! 担当:石渡(イシワタリ) Email: info@buzoo.jp お問合せURL: http://buzoo.jp/contact/ Tel: 03-5408-7805 Copyright (C) 2010 Buzoo Inc. All Rights Reserved.    id:Bayside * bayside@twitter * http://tech.buzoo.jp/ 23
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×