Post on 02-Jul-2015
description
KLab Social Game PlatformSymfony1.4活用事例
Kラボラトリー
研究開発部
高田敦史
自己紹介
書籍依存症
症候
北面
南面
アジェンダ
• KLab Social Game Platform
• Symfonyとの付き合い方
• Symfonyの機能拡張
• Symfonyを使った運用体制
KLab Social Game Platform
• ビジョン
–ナンバーワン
• 目標–打倒、6,000pv/sec
– 1ヶ月で横展開
– 24時間(3営業日)で使える
構成画像画像画像画像 / コンテンツコンテンツコンテンツコンテンツ
個別個別個別個別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
Symfonyとの付き合い方
• つくりたいのは、
– 「携帯サイト」
– 「ソーシャルアプリ」
• 必要なのは、
–シンプルで高負荷に耐えられるフレームワーク
• 高機能なORマッパー?ジェネレータ?
–必要ない
KLabにとってのSymfony
• Symfonyの骨格だけを利用したい
–設定ファイルやオートローダー、基本の機能を0
からつくる必要はない
• Symfonyは意外と柔軟
–必要な部分だけ使う
目標と手段
• 目標: 高負荷サイト
–×「簡単につくれるけど、チューニングできない」
–○「シンプルで、機能追加しやすい」
• 手段: Symfony + ???
– Symfonyは高機能だけど、拡張性も高い
Symfonyを拡張しよう
• プラグインを最大限活用–改造しすぎ…
–でも汎用的で移植は簡単!
• プライベートプラグイン– http://www.symfony-project.org/jobeet/1_4/Propel/ja/20
Symfonyクラスの改造
• プラグインの中に継承クラスを追加
• + 必要な部分だけ上書き
• + クラス名は設定ファイルで指定
– Symfony本体を書き換えることなく機能追加でき
る
3つのSymfonyプラグイン
• an_standard_core / cms_core– symfonyのMVCフレームワークを置き換える
–シンプルなテンプレートエンジン
–汎用的なサイト構築
• social_game_platform– ソーシャルゲームに特化した機能
• mock_server– OpenSocialのガジェットサーバー+APIサーバーのダミー
主にこれの話をします。
AN Standard Core
• リクエストの処理、テンプレート、フォームなど、アクション内で使用するほとんどの機能を停止
• シンプルなコントローラ + テンプレートエンジ
ンを使用– PHPテンプレートに変えて、CMSと連動したHTMLテンプレート
– UserAgent(端末情報)、絵文字の変換など携帯
サイト特有の機能
フロントコントローラー書換え
• フロントコントローラーを書換え– 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);
比較
• 通常のSymfony
– View: PHPテンプレート
– Controller: sfRequest などを使用したSymfony独自のコントローラー
• AN Standard
– View: 簡易テンプレートエンジン
– Controller: 独自のWebフレームワーク
処理の流れ
フィルターフィルターフィルターフィルター:UserAgentの解析(キャリア情報など)
リクエストパラメーターの解析
フィルターフィルターフィルターフィルター:URLのパスから適切なアクションを調べて実行
アクションアクションアクションアクション:DBからHTMLテンプレートを取得してタグを置換
CMS:
テンプレートの編集
データベース
• モデルクラスは、標準のDoctrine ではなくPropel を使用
• 「本番 / 検収」「Master / Slave」の使い分け
– AN_SfPropelDatabase
–複数のDBを使いわけられるようにPropelを拡張
– databases.yml で独自クラスを設定
ツール群
• Memcache
• TokyoTyrant
• Session
• Flash合成
• 画像(アバター)合成
• 絵文字変換– Symfonyの設定と連携して使用できるラッパーク
ラスを用意
ここまでのまとめ
• Symfonyは改造上等
• フロントコントローラーを書き換えれば、大部分の機能を削除して、必要な機能だけ使うこともできる
• プライベートプラグインの活用がおすすめ
• 継承 + 機能追加
運用体制
• コア機能
• + ソーシャルゲーム汎用機能
• + 個別アプリ
–担当に合わせて開発を分担
• Symfonyタスクを利用した自動化
• ブランチ + マージ
– 「汎用部分の実装」と「アプリの実装」が分かれているとプロジェクト管理もスムーズ
オリジナルSymfonyタスク
• klab:build-table
– SQLでのテーブル作成を自動化
• klab:load-sql
– フィクスチャをSQLでロードできるように
• klab:load-template
– CMSテンプレートの読み込み
• klab:build-model
– Propelのモデルクラスに機能追加
最新の変更を適用するには?
• スキーマ修正の適用 + フィクスチャのロード + キャッシュクリア…etc.すべてコマンド1つ
developer@goldfish:/home/developer/socialdev$ bzr pull
developer@goldfish:/home/developer/socialdev$ ./symfonyklab:load-all
Platformとアプリケーションの
並行開発• リポジトリを2つのブランチに分けて開発(Bazzar)
• Platform側: plugins + apps(スケルトン)
• アプリケーション側: apps
– 開発するディレクトリが別。追加開発はマージする
Platform ver.0.1 Platform ver.0.2 Platform ver.0.2
App App App
デモ
まとめ
• Symfonyは改造上等
• 必要な部分だけを使えるフレームワーク
• 工夫しだいでどんどん使いやすくなる
ご傾聴ありがとうございました