Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

mixiアプリxZendFramework

3,147 views

Published on

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

Published in: Technology
  • Be the first to comment

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

×