Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
SlideShare a Scribd company logo
mixiアプリ
                       x
                 ZendFramework


             バズー株式会社 開発チームリーダー
                    清水樹

id:Bayside   *    bayside@twitter             *    http://tec.buzoo.jp/




              Copyright (C) 2010 Buzoo Inc. All Rights Reserved.
アジェンダ
■     ソーシャルアプリとは?
■     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
ソーシャルアプリとは?(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
ソーシャルアプリとは?(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
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
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
携帯版(mixiアプリモバイル)の注意点
■     mixiプラットフォームがユーザー/SAP間に入っている
■     ユーザーからはmixi内にいるように見える
■     実際のアプリはサードパーティー内(SAP)にある
■     負荷対策を自前でする必要がある
■     初速がものすごいため、最初から高負荷に対応する必要がある
■     コストパフォーマンスを考えるとクラウドも視野に入れる
■     絵文字変換、画像変換等は自前でやる必要がある




Copyright (C) 2010 Buzoo Inc. All Rights Reserved.    id:Bayside * bayside@twitter * http://tech.buzoo.jp/   7
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
携帯版(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
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
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
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
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
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
ZendFrameworkの使いどころ
■ 携帯版(mixiアプリモバイル)での使いどころを中心に
■ PC版は携帯版のロジックをほぼそのまま流用
 ■ PC版でも RESTfulAPI を使用
■ トピックス
 ■ RESTfulAPI
 ■ URIの処理
 ■ セッション
 ■ 絵文字
 ■ リダイレクト
 ■ 高負荷対策




Copyright (C) 2010 Buzoo Inc. All Rights Reserved.    id:Bayside * bayside@twitter * http://tech.buzoo.jp/   15
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
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 とか
  &#63731;<a href="invite:friends?callback=<?= urlencode('http://somewhere/') ?>">友達にすすめる</a>
  &#63859;<a href="http://m.mixi.jp/view_community.pl?id=4712506">お問い合わせ</a>
  &#63873; <a href="<?= fp('/help/index') ?>">ヘルプ</a>
  &#63684; <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
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
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
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
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
まとめ
■     オープンソーシャルアプリが流行っている
■     mixiアプリをやるならPC/携帯両方に対応したい
■     ZendFrameworkでmixiアプリを作ることはもちろん可能
■     でも、高負荷対策をちゃんとやる必要はあり




Copyright (C) 2010 Buzoo Inc. All Rights Reserved.    id:Bayside * bayside@twitter * http://tech.buzoo.jp/   22
最後に
■ バズー株式会社ではソーシャルアプリの受託開発を行います
■ お問い合わせお待ちしています!

担当:石渡(イシワタリ)
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

More Related Content

mixiアプリxZendFramework

  • 1. 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
  • 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. 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
  • 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. 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. 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 とか &#63731;<a href="invite:friends?callback=<?= urlencode('http://somewhere/') ?>">友達にすすめる</a> &#63859;<a href="http://m.mixi.jp/view_community.pl?id=4712506">お問い合わせ</a> &#63873; <a href="<?= fp('/help/index') ?>">ヘルプ</a> &#63684; <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. 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. 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
  • 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