klab social game platform ~symfony1.4活用事例~
DESCRIPTION
2010年4月16日の開催された「KAYAC×KLab合同勉強会」のKLabセッションです。TRANSCRIPT
![Page 1: KLab Social Game Platform ~Symfony1.4活用事例~](https://reader037.vdocuments.site/reader037/viewer/2022100300/559457981a28ab6a2f8b46fc/html5/thumbnails/1.jpg)
KLab Social Game PlatformSymfony1.4活用事例
Kラボラトリー
研究開発部
高田敦史
![Page 2: KLab Social Game Platform ~Symfony1.4活用事例~](https://reader037.vdocuments.site/reader037/viewer/2022100300/559457981a28ab6a2f8b46fc/html5/thumbnails/2.jpg)
自己紹介
書籍依存症
![Page 3: KLab Social Game Platform ~Symfony1.4活用事例~](https://reader037.vdocuments.site/reader037/viewer/2022100300/559457981a28ab6a2f8b46fc/html5/thumbnails/3.jpg)
症候
北面
南面
![Page 4: KLab Social Game Platform ~Symfony1.4活用事例~](https://reader037.vdocuments.site/reader037/viewer/2022100300/559457981a28ab6a2f8b46fc/html5/thumbnails/4.jpg)
アジェンダ
• KLab Social Game Platform
• Symfonyとの付き合い方
• Symfonyの機能拡張
• Symfonyを使った運用体制
![Page 5: KLab Social Game Platform ~Symfony1.4活用事例~](https://reader037.vdocuments.site/reader037/viewer/2022100300/559457981a28ab6a2f8b46fc/html5/thumbnails/5.jpg)
KLab Social Game Platform
• ビジョン
–ナンバーワン
• 目標–打倒、6,000pv/sec
– 1ヶ月で横展開
– 24時間(3営業日)で使える
![Page 6: KLab Social Game Platform ~Symfony1.4活用事例~](https://reader037.vdocuments.site/reader037/viewer/2022100300/559457981a28ab6a2f8b46fc/html5/thumbnails/6.jpg)
構成画像画像画像画像 / コンテンツコンテンツコンテンツコンテンツ
個別個別個別個別Game
AN Standard(SimpleFramework)
PHP5 / Symfony 1.4
KLab Social Game Platform
Person アイテムアイテムアイテムアイテム ショップショップショップショップ ポイントポイントポイントポイント
MySQL5KeyValue
Strage
Message
Queue
OpenSocial API Wrapper
Avatarジェネレータジェネレータジェネレータジェネレータ Flash Game
DBI
課金課金課金課金 掲示板掲示板掲示板掲示板
Friend
SNS Mock
ServerCMS
Marketing Tools
![Page 7: KLab Social Game Platform ~Symfony1.4活用事例~](https://reader037.vdocuments.site/reader037/viewer/2022100300/559457981a28ab6a2f8b46fc/html5/thumbnails/7.jpg)
Symfonyとの付き合い方
• つくりたいのは、
– 「携帯サイト」
– 「ソーシャルアプリ」
• 必要なのは、
–シンプルで高負荷に耐えられるフレームワーク
• 高機能なORマッパー?ジェネレータ?
–必要ない
![Page 8: KLab Social Game Platform ~Symfony1.4活用事例~](https://reader037.vdocuments.site/reader037/viewer/2022100300/559457981a28ab6a2f8b46fc/html5/thumbnails/8.jpg)
KLabにとってのSymfony
• Symfonyの骨格だけを利用したい
–設定ファイルやオートローダー、基本の機能を0
からつくる必要はない
• Symfonyは意外と柔軟
–必要な部分だけ使う
![Page 9: KLab Social Game Platform ~Symfony1.4活用事例~](https://reader037.vdocuments.site/reader037/viewer/2022100300/559457981a28ab6a2f8b46fc/html5/thumbnails/9.jpg)
目標と手段
• 目標: 高負荷サイト
–×「簡単につくれるけど、チューニングできない」
–○「シンプルで、機能追加しやすい」
• 手段: Symfony + ???
– Symfonyは高機能だけど、拡張性も高い
![Page 10: KLab Social Game Platform ~Symfony1.4活用事例~](https://reader037.vdocuments.site/reader037/viewer/2022100300/559457981a28ab6a2f8b46fc/html5/thumbnails/10.jpg)
Symfonyを拡張しよう
• プラグインを最大限活用–改造しすぎ…
–でも汎用的で移植は簡単!
• プライベートプラグイン– http://www.symfony-project.org/jobeet/1_4/Propel/ja/20
![Page 11: KLab Social Game Platform ~Symfony1.4活用事例~](https://reader037.vdocuments.site/reader037/viewer/2022100300/559457981a28ab6a2f8b46fc/html5/thumbnails/11.jpg)
Symfonyクラスの改造
• プラグインの中に継承クラスを追加
• + 必要な部分だけ上書き
• + クラス名は設定ファイルで指定
– Symfony本体を書き換えることなく機能追加でき
る
![Page 12: KLab Social Game Platform ~Symfony1.4活用事例~](https://reader037.vdocuments.site/reader037/viewer/2022100300/559457981a28ab6a2f8b46fc/html5/thumbnails/12.jpg)
3つのSymfonyプラグイン
• an_standard_core / cms_core– symfonyのMVCフレームワークを置き換える
–シンプルなテンプレートエンジン
–汎用的なサイト構築
• social_game_platform– ソーシャルゲームに特化した機能
• mock_server– OpenSocialのガジェットサーバー+APIサーバーのダミー
主にこれの話をします。
![Page 13: KLab Social Game Platform ~Symfony1.4活用事例~](https://reader037.vdocuments.site/reader037/viewer/2022100300/559457981a28ab6a2f8b46fc/html5/thumbnails/13.jpg)
AN Standard Core
• リクエストの処理、テンプレート、フォームなど、アクション内で使用するほとんどの機能を停止
• シンプルなコントローラ + テンプレートエンジ
ンを使用– PHPテンプレートに変えて、CMSと連動したHTMLテンプレート
– UserAgent(端末情報)、絵文字の変換など携帯
サイト特有の機能
![Page 14: KLab Social Game Platform ~Symfony1.4活用事例~](https://reader037.vdocuments.site/reader037/viewer/2022100300/559457981a28ab6a2f8b46fc/html5/thumbnails/14.jpg)
フロントコントローラー書換え
• フロントコントローラーを書換え– web/main.php
• sfContext -> dispatch を呼ばない
– symfonyの通常のディスパッチ遷移をほとんど通りません
<?phprequire_oncerealpath(dirname(__FILE__).'/../plugins/an_standard_corePlugin/lib/common/Initialize.php');$configuration = ProjectConfiguration::getApplicationConfiguration('main', ENV::get('KG_ENV'), true);Batista::dispatch($configuration);
![Page 15: KLab Social Game Platform ~Symfony1.4活用事例~](https://reader037.vdocuments.site/reader037/viewer/2022100300/559457981a28ab6a2f8b46fc/html5/thumbnails/15.jpg)
比較
• 通常のSymfony
– View: PHPテンプレート
– Controller: sfRequest などを使用したSymfony独自のコントローラー
• AN Standard
– View: 簡易テンプレートエンジン
– Controller: 独自のWebフレームワーク
![Page 16: KLab Social Game Platform ~Symfony1.4活用事例~](https://reader037.vdocuments.site/reader037/viewer/2022100300/559457981a28ab6a2f8b46fc/html5/thumbnails/16.jpg)
処理の流れ
フィルターフィルターフィルターフィルター:UserAgentの解析(キャリア情報など)
リクエストパラメーターの解析
フィルターフィルターフィルターフィルター:URLのパスから適切なアクションを調べて実行
アクションアクションアクションアクション:DBからHTMLテンプレートを取得してタグを置換
CMS:
テンプレートの編集
![Page 17: KLab Social Game Platform ~Symfony1.4活用事例~](https://reader037.vdocuments.site/reader037/viewer/2022100300/559457981a28ab6a2f8b46fc/html5/thumbnails/17.jpg)
データベース
• モデルクラスは、標準のDoctrine ではなくPropel を使用
• 「本番 / 検収」「Master / Slave」の使い分け
– AN_SfPropelDatabase
–複数のDBを使いわけられるようにPropelを拡張
– databases.yml で独自クラスを設定
![Page 18: KLab Social Game Platform ~Symfony1.4活用事例~](https://reader037.vdocuments.site/reader037/viewer/2022100300/559457981a28ab6a2f8b46fc/html5/thumbnails/18.jpg)
ツール群
• Memcache
• TokyoTyrant
• Session
• Flash合成
• 画像(アバター)合成
• 絵文字変換– Symfonyの設定と連携して使用できるラッパーク
ラスを用意
![Page 19: KLab Social Game Platform ~Symfony1.4活用事例~](https://reader037.vdocuments.site/reader037/viewer/2022100300/559457981a28ab6a2f8b46fc/html5/thumbnails/19.jpg)
ここまでのまとめ
• Symfonyは改造上等
• フロントコントローラーを書き換えれば、大部分の機能を削除して、必要な機能だけ使うこともできる
• プライベートプラグインの活用がおすすめ
• 継承 + 機能追加
![Page 20: KLab Social Game Platform ~Symfony1.4活用事例~](https://reader037.vdocuments.site/reader037/viewer/2022100300/559457981a28ab6a2f8b46fc/html5/thumbnails/20.jpg)
運用体制
• コア機能
• + ソーシャルゲーム汎用機能
• + 個別アプリ
–担当に合わせて開発を分担
• Symfonyタスクを利用した自動化
• ブランチ + マージ
– 「汎用部分の実装」と「アプリの実装」が分かれているとプロジェクト管理もスムーズ
![Page 21: KLab Social Game Platform ~Symfony1.4活用事例~](https://reader037.vdocuments.site/reader037/viewer/2022100300/559457981a28ab6a2f8b46fc/html5/thumbnails/21.jpg)
オリジナルSymfonyタスク
• klab:build-table
– SQLでのテーブル作成を自動化
• klab:load-sql
– フィクスチャをSQLでロードできるように
• klab:load-template
– CMSテンプレートの読み込み
• klab:build-model
– Propelのモデルクラスに機能追加
![Page 22: KLab Social Game Platform ~Symfony1.4活用事例~](https://reader037.vdocuments.site/reader037/viewer/2022100300/559457981a28ab6a2f8b46fc/html5/thumbnails/22.jpg)
最新の変更を適用するには?
• スキーマ修正の適用 + フィクスチャのロード + キャッシュクリア…etc.すべてコマンド1つ
developer@goldfish:/home/developer/socialdev$ bzr pull
developer@goldfish:/home/developer/socialdev$ ./symfonyklab:load-all
![Page 23: KLab Social Game Platform ~Symfony1.4活用事例~](https://reader037.vdocuments.site/reader037/viewer/2022100300/559457981a28ab6a2f8b46fc/html5/thumbnails/23.jpg)
Platformとアプリケーションの
並行開発• リポジトリを2つのブランチに分けて開発(Bazzar)
• Platform側: plugins + apps(スケルトン)
• アプリケーション側: apps
– 開発するディレクトリが別。追加開発はマージする
Platform ver.0.1 Platform ver.0.2 Platform ver.0.2
App App App
![Page 24: KLab Social Game Platform ~Symfony1.4活用事例~](https://reader037.vdocuments.site/reader037/viewer/2022100300/559457981a28ab6a2f8b46fc/html5/thumbnails/24.jpg)
デモ
![Page 25: KLab Social Game Platform ~Symfony1.4活用事例~](https://reader037.vdocuments.site/reader037/viewer/2022100300/559457981a28ab6a2f8b46fc/html5/thumbnails/25.jpg)
まとめ
• Symfonyは改造上等
• 必要な部分だけを使えるフレームワーク
• 工夫しだいでどんどん使いやすくなる
![Page 26: KLab Social Game Platform ~Symfony1.4活用事例~](https://reader037.vdocuments.site/reader037/viewer/2022100300/559457981a28ab6a2f8b46fc/html5/thumbnails/26.jpg)
ご傾聴ありがとうございました