+ All Categories
Home > Technology > KLab Social Game Platform ~Symfony1.4活用事例~

KLab Social Game Platform ~Symfony1.4活用事例~

Date post: 02-Jul-2015
Category:
Upload: klab
View: 16,323 times
Download: 3 times
Share this document with a friend
Description:
2010年4月16日の開催された「KAYAC×KLab合同勉強会」のKLabセッションです。
26

Click here to load reader

Transcript
Page 1: KLab Social Game Platform ~Symfony1.4活用事例~

KLab Social Game PlatformSymfony1.4活用事例

Kラボラトリー

研究開発部

高田敦史

Page 2: KLab Social Game Platform ~Symfony1.4活用事例~

自己紹介

書籍依存症

Page 3: KLab Social Game Platform ~Symfony1.4活用事例~

症候

北面

南面

Page 4: KLab Social Game Platform ~Symfony1.4活用事例~

アジェンダ

• KLab Social Game Platform

• Symfonyとの付き合い方

• Symfonyの機能拡張

• Symfonyを使った運用体制

Page 5: KLab Social Game Platform ~Symfony1.4活用事例~

KLab Social Game Platform

• ビジョン

–ナンバーワン

• 目標–打倒、6,000pv/sec

– 1ヶ月で横展開

– 24時間(3営業日)で使える

Page 6: KLab Social Game Platform ~Symfony1.4活用事例~

構成画像画像画像画像 / コンテンツコンテンツコンテンツコンテンツ

個別個別個別個別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活用事例~

Symfonyとの付き合い方

• つくりたいのは、

– 「携帯サイト」

– 「ソーシャルアプリ」

• 必要なのは、

–シンプルで高負荷に耐えられるフレームワーク

• 高機能なORマッパー?ジェネレータ?

–必要ない

Page 8: KLab Social Game Platform ~Symfony1.4活用事例~

KLabにとってのSymfony

• Symfonyの骨格だけを利用したい

–設定ファイルやオートローダー、基本の機能を0

からつくる必要はない

• Symfonyは意外と柔軟

–必要な部分だけ使う

Page 9: KLab Social Game Platform ~Symfony1.4活用事例~

目標と手段

• 目標: 高負荷サイト

–×「簡単につくれるけど、チューニングできない」

–○「シンプルで、機能追加しやすい」

• 手段: Symfony + ???

– Symfonyは高機能だけど、拡張性も高い

Page 10: KLab Social Game Platform ~Symfony1.4活用事例~

Symfonyを拡張しよう

• プラグインを最大限活用–改造しすぎ…

–でも汎用的で移植は簡単!

• プライベートプラグイン– http://www.symfony-project.org/jobeet/1_4/Propel/ja/20

Page 11: KLab Social Game Platform ~Symfony1.4活用事例~

Symfonyクラスの改造

• プラグインの中に継承クラスを追加

• + 必要な部分だけ上書き

• + クラス名は設定ファイルで指定

– Symfony本体を書き換えることなく機能追加でき

Page 12: KLab Social Game Platform ~Symfony1.4活用事例~

3つのSymfonyプラグイン

• an_standard_core / cms_core– symfonyのMVCフレームワークを置き換える

–シンプルなテンプレートエンジン

–汎用的なサイト構築

• social_game_platform– ソーシャルゲームに特化した機能

• mock_server– OpenSocialのガジェットサーバー+APIサーバーのダミー

主にこれの話をします。

Page 13: KLab Social Game Platform ~Symfony1.4活用事例~

AN Standard Core

• リクエストの処理、テンプレート、フォームなど、アクション内で使用するほとんどの機能を停止

• シンプルなコントローラ + テンプレートエンジ

ンを使用– PHPテンプレートに変えて、CMSと連動したHTMLテンプレート

– UserAgent(端末情報)、絵文字の変換など携帯

サイト特有の機能

Page 14: KLab Social Game Platform ~Symfony1.4活用事例~

フロントコントローラー書換え

• フロントコントローラーを書換え– 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活用事例~

比較

• 通常のSymfony

– View: PHPテンプレート

– Controller: sfRequest などを使用したSymfony独自のコントローラー

• AN Standard

– View: 簡易テンプレートエンジン

– Controller: 独自のWebフレームワーク

Page 16: KLab Social Game Platform ~Symfony1.4活用事例~

処理の流れ

フィルターフィルターフィルターフィルター:UserAgentの解析(キャリア情報など)

リクエストパラメーターの解析

フィルターフィルターフィルターフィルター:URLのパスから適切なアクションを調べて実行

アクションアクションアクションアクション:DBからHTMLテンプレートを取得してタグを置換

CMS:

テンプレートの編集

Page 17: KLab Social Game Platform ~Symfony1.4活用事例~

データベース

• モデルクラスは、標準のDoctrine ではなくPropel を使用

• 「本番 / 検収」「Master / Slave」の使い分け

– AN_SfPropelDatabase

–複数のDBを使いわけられるようにPropelを拡張

– databases.yml で独自クラスを設定

Page 18: KLab Social Game Platform ~Symfony1.4活用事例~

ツール群

• Memcache

• TokyoTyrant

• Session

• Flash合成

• 画像(アバター)合成

• 絵文字変換– Symfonyの設定と連携して使用できるラッパーク

ラスを用意

Page 19: KLab Social Game Platform ~Symfony1.4活用事例~

ここまでのまとめ

• Symfonyは改造上等

• フロントコントローラーを書き換えれば、大部分の機能を削除して、必要な機能だけ使うこともできる

• プライベートプラグインの活用がおすすめ

• 継承 + 機能追加

Page 20: KLab Social Game Platform ~Symfony1.4活用事例~

運用体制

• コア機能

• + ソーシャルゲーム汎用機能

• + 個別アプリ

–担当に合わせて開発を分担

• Symfonyタスクを利用した自動化

• ブランチ + マージ

– 「汎用部分の実装」と「アプリの実装」が分かれているとプロジェクト管理もスムーズ

Page 21: KLab Social Game Platform ~Symfony1.4活用事例~

オリジナル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活用事例~

最新の変更を適用するには?

• スキーマ修正の適用 + フィクスチャのロード + キャッシュクリア…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活用事例~

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活用事例~

デモ

Page 25: KLab Social Game Platform ~Symfony1.4活用事例~

まとめ

• Symfonyは改造上等

• 必要な部分だけを使えるフレームワーク

• 工夫しだいでどんどん使いやすくなる

Page 26: KLab Social Game Platform ~Symfony1.4活用事例~

ご傾聴ありがとうございました


Recommended