SlideShare a Scribd company logo
1 of 25
Download to read offline
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 
Message 
Handler 
Frontend 
Repository 
Web Page 
Router 
Handlebars 
Bacon.app 
View 
Model 
jQuery 
Bacon.js
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
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/bacon.app
DDD
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
コンテキストマップ 
! 
1. ユーザ、認証 
2. 人狼 
3. チャット 
※ 妄想込みなので注意
ドメインモデル 
• Entity の識別子に UUID を利用 
• Value Object には Enum 型を活用 
• namedtuple も使えるかも?
リポジトリ 
• ドメインモデルからのアクセスは・・・? 
• NG派: アプリ層のサービスで処理 
• OK派: リポジトリの I/F は知っててOK 
• Pyramid の Root Factory を使って、 
context として各ビューに引き渡した。 
http://www.infoq.com/jp/news/2008/02/ddd-di-aop
ドメインイベント 
• DDD本には載ってない重要オブジェクト 
• ドメイン層のイベントを他のレイヤーやコンテキ 
ストに通知する仕組み 
• 例: ゲーム → EventBus → チャット 
• Pyramid Event が活用できる? 
• EventModel として永続化した 
※ 人狼では EventBus の実装が間に合わず
コアドメイン 
• コンテキストマップの中で、 
事業的に最も集中すべきドメイン 
• もっと早く知りたかった・・ 
この1ヶ月、コアドメイン(人狼) 
以外の実装しかやってなかった・・・
まとめ 
• Pyramid で DRY な開発ができる 
• SPA に bacon.js はオススメ 
• Python でも DDD は役に立つ 
• (Flywheel はまだちょっと微妙) 
• iPhone アプリ版を作りたい
https://github.com/ledmonster/werewolf

More Related Content

What's hot

Photon Server Deep Dive - PhotonWireの実装から見つめるPhotonServerの基礎と応用
Photon Server Deep Dive - PhotonWireの実装から見つめるPhotonServerの基礎と応用Photon Server Deep Dive - PhotonWireの実装から見つめるPhotonServerの基礎と応用
Photon Server Deep Dive - PhotonWireの実装から見つめるPhotonServerの基礎と応用Yoshifumi Kawai
 
Unity C#と.NET Core(MagicOnion) C# そしてKotlinによるハーモニー
Unity C#と.NET Core(MagicOnion) C# そしてKotlinによるハーモニーUnity C#と.NET Core(MagicOnion) C# そしてKotlinによるハーモニー
Unity C#と.NET Core(MagicOnion) C# そしてKotlinによるハーモニーYoshifumi Kawai
 
Goでヤフーの分散オブジェクトストレージを作った話 Go Conference 2017 Spring
Goでヤフーの分散オブジェクトストレージを作った話 Go Conference 2017 SpringGoでヤフーの分散オブジェクトストレージを作った話 Go Conference 2017 Spring
Goでヤフーの分散オブジェクトストレージを作った話 Go Conference 2017 SpringYahoo!デベロッパーネットワーク
 
Rubyの会社でPythonistaが3ヶ月生き延びた話
Rubyの会社でPythonistaが3ヶ月生き延びた話Rubyの会社でPythonistaが3ヶ月生き延びた話
Rubyの会社でPythonistaが3ヶ月生き延びた話Tokoroten Nakayama
 
NextGen Server/Client Architecture - gRPC + Unity + C#
NextGen Server/Client Architecture - gRPC + Unity + C#NextGen Server/Client Architecture - gRPC + Unity + C#
NextGen Server/Client Architecture - gRPC + Unity + C#Yoshifumi Kawai
 
DockerCon '17 Feedback and Introduction of Longhorn at Rancher JP
DockerCon '17 Feedback and Introduction of Longhorn at Rancher JPDockerCon '17 Feedback and Introduction of Longhorn at Rancher JP
DockerCon '17 Feedback and Introduction of Longhorn at Rancher JPGo Chiba
 
The History of Reactive Extensions
The History of Reactive ExtensionsThe History of Reactive Extensions
The History of Reactive ExtensionsYoshifumi Kawai
 
"Continuous Publication" with Python: Another Approach
"Continuous Publication" with Python: Another Approach"Continuous Publication" with Python: Another Approach
"Continuous Publication" with Python: Another ApproachDaisuke Miyakawa
 
ドキュメントを直し続ける話 #kbkz_tech
ドキュメントを直し続ける話 #kbkz_techドキュメントを直し続ける話 #kbkz_tech
ドキュメントを直し続ける話 #kbkz_techMichihito Shigemura
 
動的なILの生成と編集
動的なILの生成と編集動的なILの生成と編集
動的なILの生成と編集terurou
 
Pythonによる非同期プログラミング入門
Pythonによる非同期プログラミング入門Pythonによる非同期プログラミング入門
Pythonによる非同期プログラミング入門Hironori Sekine
 
C++でCプリプロセッサを作ったり速くしたりしたお話
C++でCプリプロセッサを作ったり速くしたりしたお話C++でCプリプロセッサを作ったり速くしたりしたお話
C++でCプリプロセッサを作ったり速くしたりしたお話Kinuko Yasuda
 
Docker registry入門 第五回コンテナ型仮想化の情報交換会
Docker registry入門 第五回コンテナ型仮想化の情報交換会Docker registry入門 第五回コンテナ型仮想化の情報交換会
Docker registry入門 第五回コンテナ型仮想化の情報交換会Kengo Okitsu
 
A quick tour of the Cysharp OSS
A quick tour of the Cysharp OSSA quick tour of the Cysharp OSS
A quick tour of the Cysharp OSSYoshifumi Kawai
 
The Usage and Patterns of MagicOnion
The Usage and Patterns of MagicOnionThe Usage and Patterns of MagicOnion
The Usage and Patterns of MagicOnionYoshifumi Kawai
 
Implements OpenTelemetry Collector in DotNet
Implements OpenTelemetry Collector in DotNetImplements OpenTelemetry Collector in DotNet
Implements OpenTelemetry Collector in DotNetYoshifumi Kawai
 
Machine learning CI/CD with OSS
Machine learning CI/CD with OSSMachine learning CI/CD with OSS
Machine learning CI/CD with OSSyusuke shibui
 

What's hot (20)

Photon Server Deep Dive - PhotonWireの実装から見つめるPhotonServerの基礎と応用
Photon Server Deep Dive - PhotonWireの実装から見つめるPhotonServerの基礎と応用Photon Server Deep Dive - PhotonWireの実装から見つめるPhotonServerの基礎と応用
Photon Server Deep Dive - PhotonWireの実装から見つめるPhotonServerの基礎と応用
 
Unity C#と.NET Core(MagicOnion) C# そしてKotlinによるハーモニー
Unity C#と.NET Core(MagicOnion) C# そしてKotlinによるハーモニーUnity C#と.NET Core(MagicOnion) C# そしてKotlinによるハーモニー
Unity C#と.NET Core(MagicOnion) C# そしてKotlinによるハーモニー
 
Goでヤフーの分散オブジェクトストレージを作った話 Go Conference 2017 Spring
Goでヤフーの分散オブジェクトストレージを作った話 Go Conference 2017 SpringGoでヤフーの分散オブジェクトストレージを作った話 Go Conference 2017 Spring
Goでヤフーの分散オブジェクトストレージを作った話 Go Conference 2017 Spring
 
Rubyの会社でPythonistaが3ヶ月生き延びた話
Rubyの会社でPythonistaが3ヶ月生き延びた話Rubyの会社でPythonistaが3ヶ月生き延びた話
Rubyの会社でPythonistaが3ヶ月生き延びた話
 
The History of LINQ
The History of LINQThe History of LINQ
The History of LINQ
 
NextGen Server/Client Architecture - gRPC + Unity + C#
NextGen Server/Client Architecture - gRPC + Unity + C#NextGen Server/Client Architecture - gRPC + Unity + C#
NextGen Server/Client Architecture - gRPC + Unity + C#
 
DockerCon '17 Feedback and Introduction of Longhorn at Rancher JP
DockerCon '17 Feedback and Introduction of Longhorn at Rancher JPDockerCon '17 Feedback and Introduction of Longhorn at Rancher JP
DockerCon '17 Feedback and Introduction of Longhorn at Rancher JP
 
The History of Reactive Extensions
The History of Reactive ExtensionsThe History of Reactive Extensions
The History of Reactive Extensions
 
"Continuous Publication" with Python: Another Approach
"Continuous Publication" with Python: Another Approach"Continuous Publication" with Python: Another Approach
"Continuous Publication" with Python: Another Approach
 
ドキュメントを直し続ける話 #kbkz_tech
ドキュメントを直し続ける話 #kbkz_techドキュメントを直し続ける話 #kbkz_tech
ドキュメントを直し続ける話 #kbkz_tech
 
動的なILの生成と編集
動的なILの生成と編集動的なILの生成と編集
動的なILの生成と編集
 
Pythonによる非同期プログラミング入門
Pythonによる非同期プログラミング入門Pythonによる非同期プログラミング入門
Pythonによる非同期プログラミング入門
 
C++でCプリプロセッサを作ったり速くしたりしたお話
C++でCプリプロセッサを作ったり速くしたりしたお話C++でCプリプロセッサを作ったり速くしたりしたお話
C++でCプリプロセッサを作ったり速くしたりしたお話
 
Ansibleに貢献してみよう
Ansibleに貢献してみようAnsibleに貢献してみよう
Ansibleに貢献してみよう
 
Docker registry入門 第五回コンテナ型仮想化の情報交換会
Docker registry入門 第五回コンテナ型仮想化の情報交換会Docker registry入門 第五回コンテナ型仮想化の情報交換会
Docker registry入門 第五回コンテナ型仮想化の情報交換会
 
A quick tour of the Cysharp OSS
A quick tour of the Cysharp OSSA quick tour of the Cysharp OSS
A quick tour of the Cysharp OSS
 
GoでMinecraftっぽいの作る
GoでMinecraftっぽいの作るGoでMinecraftっぽいの作る
GoでMinecraftっぽいの作る
 
The Usage and Patterns of MagicOnion
The Usage and Patterns of MagicOnionThe Usage and Patterns of MagicOnion
The Usage and Patterns of MagicOnion
 
Implements OpenTelemetry Collector in DotNet
Implements OpenTelemetry Collector in DotNetImplements OpenTelemetry Collector in DotNet
Implements OpenTelemetry Collector in DotNet
 
Machine learning CI/CD with OSS
Machine learning CI/CD with OSSMachine learning CI/CD with OSS
Machine learning CI/CD with OSS
 

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

6th oct2012 kobeit_webintents
6th oct2012 kobeit_webintents6th oct2012 kobeit_webintents
6th oct2012 kobeit_webintentsKensaku Komatsu
 
What makes pyramid unique
What makes pyramid uniqueWhat makes pyramid unique
What makes pyramid uniqueAtsushi Odagiri
 
クラウドサービスを使って作る動画サイト?
クラウドサービスを使って作る動画サイト?クラウドサービスを使って作る動画サイト?
クラウドサービスを使って作る動画サイト?Daichi Isami
 
【Unity道場京都スペシャル4】Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現
【Unity道場京都スペシャル4】Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現【Unity道場京都スペシャル4】Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現
【Unity道場京都スペシャル4】Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現UnityTechnologiesJapan002
 
改めて C# でできることを振り返る
改めて C# でできることを振り返る改めて C# でできることを振り返る
改めて C# でできることを振り返るYuta Matsumura
 
猫でも分かる Android WebKit
猫でも分かる Android WebKit猫でも分かる Android WebKit
猫でも分かる Android WebKitNaruto TAKAHASHI
 
Pylons ユーザのための Pyramid 移行ガイド
Pylons ユーザのための Pyramid 移行ガイドPylons ユーザのための Pyramid 移行ガイド
Pylons ユーザのための Pyramid 移行ガイドNozomu Kaneko
 
はじめてのAzure Web App for Containers! -コンテナの基礎から DevOps 環境の構築まで-
はじめてのAzure Web App for Containers! -コンテナの基礎から DevOps 環境の構築まで-はじめてのAzure Web App for Containers! -コンテナの基礎から DevOps 環境の構築まで-
はじめてのAzure Web App for Containers! -コンテナの基礎から DevOps 環境の構築まで-Saki Homma
 
Sohu邮箱的python经验
Sohu邮箱的python经验Sohu邮箱的python经验
Sohu邮箱的python经验Ryan Poy
 
【17-E-2】Ruby PaaS「MOGOK」 ~ ソフトウェアエンジニアのためのクラウドサービス ~ 藤原秀一氏
【17-E-2】Ruby PaaS「MOGOK」 ~ ソフトウェアエンジニアのためのクラウドサービス ~ 藤原秀一氏【17-E-2】Ruby PaaS「MOGOK」 ~ ソフトウェアエンジニアのためのクラウドサービス ~ 藤原秀一氏
【17-E-2】Ruby PaaS「MOGOK」 ~ ソフトウェアエンジニアのためのクラウドサービス ~ 藤原秀一氏Developers Summit
 
技術選択とアーキテクトの役割
技術選択とアーキテクトの役割技術選択とアーキテクトの役割
技術選択とアーキテクトの役割Toru Yamaguchi
 
Firefox OS - Blaze Your Own Path
Firefox OS - Blaze Your Own PathFirefox OS - Blaze Your Own Path
Firefox OS - Blaze Your Own Pathdynamis
 
SORACOM Conference Discovery 2017 | E3. デバイスからのクラウド連携パターン
SORACOM Conference Discovery 2017 | E3. デバイスからのクラウド連携パターンSORACOM Conference Discovery 2017 | E3. デバイスからのクラウド連携パターン
SORACOM Conference Discovery 2017 | E3. デバイスからのクラウド連携パターンSORACOM,INC
 
GitLab から GitHub + CircleCI に乗り換えてチーム運用を改善しつつある話
GitLab から GitHub + CircleCI に乗り換えてチーム運用を改善しつつある話GitLab から GitHub + CircleCI に乗り換えてチーム運用を改善しつつある話
GitLab から GitHub + CircleCI に乗り換えてチーム運用を改善しつつある話R S
 
Kilimanjaro Event
Kilimanjaro EventKilimanjaro Event
Kilimanjaro Eventdynamis
 
Monthly Lightning Talk Playback 2014-12
Monthly Lightning Talk Playback 2014-12Monthly Lightning Talk Playback 2014-12
Monthly Lightning Talk Playback 2014-12Seiya Konno
 

Similar to Pyramid + socket.io 人狼を作ってみた (20)

SnapDishの事例
SnapDishの事例SnapDishの事例
SnapDishの事例
 
6th oct2012 kobeit_webintents
6th oct2012 kobeit_webintents6th oct2012 kobeit_webintents
6th oct2012 kobeit_webintents
 
What makes pyramid unique
What makes pyramid uniqueWhat makes pyramid unique
What makes pyramid unique
 
クラウドサービスを使って作る動画サイト?
クラウドサービスを使って作る動画サイト?クラウドサービスを使って作る動画サイト?
クラウドサービスを使って作る動画サイト?
 
【Unity道場京都スペシャル4】Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現
【Unity道場京都スペシャル4】Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現【Unity道場京都スペシャル4】Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現
【Unity道場京都スペシャル4】Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現
 
改めて C# でできることを振り返る
改めて C# でできることを振り返る改めて C# でできることを振り返る
改めて C# でできることを振り返る
 
猫でも分かる Android WebKit
猫でも分かる Android WebKit猫でも分かる Android WebKit
猫でも分かる Android WebKit
 
Pylons ユーザのための Pyramid 移行ガイド
Pylons ユーザのための Pyramid 移行ガイドPylons ユーザのための Pyramid 移行ガイド
Pylons ユーザのための Pyramid 移行ガイド
 
はじめてのAzure Web App for Containers! -コンテナの基礎から DevOps 環境の構築まで-
はじめてのAzure Web App for Containers! -コンテナの基礎から DevOps 環境の構築まで-はじめてのAzure Web App for Containers! -コンテナの基礎から DevOps 環境の構築まで-
はじめてのAzure Web App for Containers! -コンテナの基礎から DevOps 環境の構築まで-
 
Sohu邮箱的python经验
Sohu邮箱的python经验Sohu邮箱的python经验
Sohu邮箱的python经验
 
【17-E-2】Ruby PaaS「MOGOK」 ~ ソフトウェアエンジニアのためのクラウドサービス ~ 藤原秀一氏
【17-E-2】Ruby PaaS「MOGOK」 ~ ソフトウェアエンジニアのためのクラウドサービス ~ 藤原秀一氏【17-E-2】Ruby PaaS「MOGOK」 ~ ソフトウェアエンジニアのためのクラウドサービス ~ 藤原秀一氏
【17-E-2】Ruby PaaS「MOGOK」 ~ ソフトウェアエンジニアのためのクラウドサービス ~ 藤原秀一氏
 
BEAR.Sunday@phpcon2012
BEAR.Sunday@phpcon2012BEAR.Sunday@phpcon2012
BEAR.Sunday@phpcon2012
 
技術選択とアーキテクトの役割
技術選択とアーキテクトの役割技術選択とアーキテクトの役割
技術選択とアーキテクトの役割
 
Firefox OS - Blaze Your Own Path
Firefox OS - Blaze Your Own PathFirefox OS - Blaze Your Own Path
Firefox OS - Blaze Your Own Path
 
SORACOM Conference Discovery 2017 | E3. デバイスからのクラウド連携パターン
SORACOM Conference Discovery 2017 | E3. デバイスからのクラウド連携パターンSORACOM Conference Discovery 2017 | E3. デバイスからのクラウド連携パターン
SORACOM Conference Discovery 2017 | E3. デバイスからのクラウド連携パターン
 
GitLab から GitHub + CircleCI に乗り換えてチーム運用を改善しつつある話
GitLab から GitHub + CircleCI に乗り換えてチーム運用を改善しつつある話GitLab から GitHub + CircleCI に乗り換えてチーム運用を改善しつつある話
GitLab から GitHub + CircleCI に乗り換えてチーム運用を改善しつつある話
 
Kilimanjaro Event
Kilimanjaro EventKilimanjaro Event
Kilimanjaro Event
 
10th jan 2013_miyazaki
10th jan 2013_miyazaki10th jan 2013_miyazaki
10th jan 2013_miyazaki
 
Tonchidot
TonchidotTonchidot
Tonchidot
 
Monthly Lightning Talk Playback 2014-12
Monthly Lightning Talk Playback 2014-12Monthly Lightning Talk Playback 2014-12
Monthly Lightning Talk Playback 2014-12
 

More from Junya Hayashi

断言して間違えると信頼度が低下するというベイズの話
断言して間違えると信頼度が低下するというベイズの話断言して間違えると信頼度が低下するというベイズの話
断言して間違えると信頼度が低下するというベイズの話Junya Hayashi
 
ヒキガエルは地震を予知するのか
ヒキガエルは地震を予知するのかヒキガエルは地震を予知するのか
ヒキガエルは地震を予知するのかJunya Hayashi
 
量から質への転化の法則
量から質への転化の法則量から質への転化の法則
量から質への転化の法則Junya Hayashi
 
DynamoDB Before and After GSI
DynamoDB Before and After GSIDynamoDB Before and After GSI
DynamoDB Before and After GSIJunya Hayashi
 
IT業界の記事に見られる「中日ドラゴンズの論理」の落とし穴
IT業界の記事に見られる「中日ドラゴンズの論理」の落とし穴IT業界の記事に見られる「中日ドラゴンズの論理」の落とし穴
IT業界の記事に見られる「中日ドラゴンズの論理」の落とし穴Junya Hayashi
 
カタンの流れを検証してみた
カタンの流れを検証してみたカタンの流れを検証してみた
カタンの流れを検証してみたJunya Hayashi
 
サンクトペテルブルクのパラドックス
サンクトペテルブルクのパラドックスサンクトペテルブルクのパラドックス
サンクトペテルブルクのパラドックスJunya Hayashi
 
サイコロを100万回振ってみた
サイコロを100万回振ってみたサイコロを100万回振ってみた
サイコロを100万回振ってみたJunya Hayashi
 

More from Junya Hayashi (10)

断言して間違えると信頼度が低下するというベイズの話
断言して間違えると信頼度が低下するというベイズの話断言して間違えると信頼度が低下するというベイズの話
断言して間違えると信頼度が低下するというベイズの話
 
ヒキガエルは地震を予知するのか
ヒキガエルは地震を予知するのかヒキガエルは地震を予知するのか
ヒキガエルは地震を予知するのか
 
量から質への転化の法則
量から質への転化の法則量から質への転化の法則
量から質への転化の法則
 
DynamoDB Before and After GSI
DynamoDB Before and After GSIDynamoDB Before and After GSI
DynamoDB Before and After GSI
 
IT業界の記事に見られる「中日ドラゴンズの論理」の落とし穴
IT業界の記事に見られる「中日ドラゴンズの論理」の落とし穴IT業界の記事に見られる「中日ドラゴンズの論理」の落とし穴
IT業界の記事に見られる「中日ドラゴンズの論理」の落とし穴
 
U分布と宇宙
U分布と宇宙U分布と宇宙
U分布と宇宙
 
カタンの流れを検証してみた
カタンの流れを検証してみたカタンの流れを検証してみた
カタンの流れを検証してみた
 
サンクトペテルブルクのパラドックス
サンクトペテルブルクのパラドックスサンクトペテルブルクのパラドックス
サンクトペテルブルクのパラドックス
 
サイコロを100万回振ってみた
サイコロを100万回振ってみたサイコロを100万回振ってみた
サイコロを100万回振ってみた
 
Cross2013_GREE
Cross2013_GREECross2013_GREE
Cross2013_GREE
 

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