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.
Pyramid + socket.io 
人狼を作ってみた 
PyCon JP 2014 
林 淳哉
Who am I ? 
• 林 淳哉(35歳) 
• 1児のパパ 
• Python 歴10年くらい? 
• Pylons, Pyramid
みんなの人狼 
村に参加して、 
チャットで人狼。 
! 
Web API + JavaScript 
http://bit.ly/YAb5f7
https://github.com/ledmonster/werewolf
DDDを 
意識してみた
UI 
App 
Domain 
Infra 
Backend 
/api /socket.io 
Pyrmid View 
Namespace 
Game Domain 
Repository 
Flywheel 
User 
Domain ...
UI 
App 
Domain 
Infra 
Backend 
/api /socket.io 
Pyrmid View 
Namespace 
Game Domain 
Repository 
Flywheel 
User 
Domain ...
Backend
Backend 
• AWS 
• Python 
• Pyramid 
• gevent-socketio 
• google-api-python-client 
• DynamoDB
ルーティング
チャット 
gevent-socketio へ委譲
ChatNamespace 
• ディスパッチ 
• MessageHandler へ処理を委譲 
• Client へメッセージを送信
Frontend
Frontend 
• 構成管理 
• npm 
• gulp 
• bower 
• bacon.js 
• handlebars 
• socket.io-client
送受信
bacon.app 
bacon.js ベースの社内FWを利用 
• ルーティング 
• View の描画 
• Event 処理 
• DOM: bacon.js 
• socket.io https://github.com/xica/ba...
DDD
UI 
App 
Domain 
Infra 
Backend 
/api /socket.io 
Pyrmid View 
Namespace 
Game Domain 
Repository 
Flywheel 
User 
Domain ...
コンテキストマップ 
! 
1. ユーザ、認証 
2. 人狼 
3. チャット 
※ 妄想込みなので注意
ドメインモデル 
• Entity の識別子に UUID を利用 
• Value Object には Enum 型を活用 
• namedtuple も使えるかも?
リポジトリ 
• ドメインモデルからのアクセスは・・・? 
• NG派: アプリ層のサービスで処理 
• OK派: リポジトリの I/F は知っててOK 
• Pyramid の Root Factory を使って、 
context として各...
ドメインイベント 
• DDD本には載ってない重要オブジェクト 
• ドメイン層のイベントを他のレイヤーやコンテキ 
ストに通知する仕組み 
• 例: ゲーム → EventBus → チャット 
• Pyramid Event が活用できる?...
コアドメイン 
• コンテキストマップの中で、 
事業的に最も集中すべきドメイン 
• もっと早く知りたかった・・ 
この1ヶ月、コアドメイン(人狼) 
以外の実装しかやってなかった・・・
まとめ 
• Pyramid で DRY な開発ができる 
• SPA に bacon.js はオススメ 
• Python でも DDD は役に立つ 
• (Flywheel はまだちょっと微妙) 
• iPhone アプリ版を作りたい
https://github.com/ledmonster/werewolf
Upcoming SlideShare
Loading in …5
×

Pyramid + socket.io 人狼を作ってみた

4,268 views

Published on

Pyramid + socket.io で人狼を作りました。PyConJP 2014 の LT 発表資料です。

- 人狼アプリ: http://ec2-54-64-134-137.ap-northeast-1.compute.amazonaws.com/
- ソースコード: https://github.com/ledmonster/werewolf

Published in: Software
  • Hello! Get Your Professional Job-Winning Resume Here - Check our website! https://vk.cc/818RFv
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here

Pyramid + socket.io 人狼を作ってみた

  1. 1. Pyramid + socket.io 人狼を作ってみた PyCon JP 2014 林 淳哉
  2. 2. Who am I ? • 林 淳哉(35歳) • 1児のパパ • Python 歴10年くらい? • Pylons, Pyramid
  3. 3. みんなの人狼 村に参加して、 チャットで人狼。 ! Web API + JavaScript http://bit.ly/YAb5f7
  4. 4. https://github.com/ledmonster/werewolf
  5. 5. DDDを 意識してみた
  6. 6. UI App Domain Infra Backend /api /socket.io Pyrmid View Namespace Game Domain Repository Flywheel User Domain Message Handler Frontend Repository Web Page Router Handlebars Bacon.app View Model jQuery Bacon.js
  7. 7. UI App Domain Infra Backend /api /socket.io Pyrmid View Namespace Game Domain Repository Flywheel User Domain Message Handler Frontend Repository Web Page Router Handlebars Bacon.app View Model jQuery Bacon.js Pyramid socket.io Bacon.js Flywheel handlebars
  8. 8. Backend
  9. 9. Backend • AWS • Python • Pyramid • gevent-socketio • google-api-python-client • DynamoDB
  10. 10. ルーティング
  11. 11. チャット gevent-socketio へ委譲
  12. 12. ChatNamespace • ディスパッチ • MessageHandler へ処理を委譲 • Client へメッセージを送信
  13. 13. Frontend
  14. 14. Frontend • 構成管理 • npm • gulp • bower • bacon.js • handlebars • socket.io-client
  15. 15. 送受信
  16. 16. bacon.app bacon.js ベースの社内FWを利用 • ルーティング • View の描画 • Event 処理 • DOM: bacon.js • socket.io https://github.com/xica/bacon.app
  17. 17. DDD
  18. 18. UI App Domain Infra Backend /api /socket.io Pyrmid View Namespace Game Domain Repository Flywheel User Domain Message Handler Frontend Repository Web Page Router Handlebars Bacon.app View Model jQuery Bacon.js
  19. 19. コンテキストマップ ! 1. ユーザ、認証 2. 人狼 3. チャット ※ 妄想込みなので注意
  20. 20. ドメインモデル • Entity の識別子に UUID を利用 • Value Object には Enum 型を活用 • namedtuple も使えるかも?
  21. 21. リポジトリ • ドメインモデルからのアクセスは・・・? • NG派: アプリ層のサービスで処理 • OK派: リポジトリの I/F は知っててOK • Pyramid の Root Factory を使って、 context として各ビューに引き渡した。 http://www.infoq.com/jp/news/2008/02/ddd-di-aop
  22. 22. ドメインイベント • DDD本には載ってない重要オブジェクト • ドメイン層のイベントを他のレイヤーやコンテキ ストに通知する仕組み • 例: ゲーム → EventBus → チャット • Pyramid Event が活用できる? • EventModel として永続化した ※ 人狼では EventBus の実装が間に合わず
  23. 23. コアドメイン • コンテキストマップの中で、 事業的に最も集中すべきドメイン • もっと早く知りたかった・・ この1ヶ月、コアドメイン(人狼) 以外の実装しかやってなかった・・・
  24. 24. まとめ • Pyramid で DRY な開発ができる • SPA に bacon.js はオススメ • Python でも DDD は役に立つ • (Flywheel はまだちょっと微妙) • iPhone アプリ版を作りたい
  25. 25. https://github.com/ledmonster/werewolf

×