Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
KLab Server Side Camp お疲れさまでした! / KLab Server S...
Search
Hiroya-W
September 07, 2022
Technology
0
49
KLab Server Side Camp お疲れさまでした! / KLab Server Side Camp
Hiroya-W
September 07, 2022
Tweet
Share
More Decks by Hiroya-W
See All by Hiroya-W
PSRにのっかってバックエンドサーバを書く / Write a backend server using PSR
hyuyukun
0
26
phina.jsで弾幕シューティングを作る / Creating a bullet-hell shooter with phina.js
hyuyukun
0
120
ピアノ経験ゼロからピアノを練習して弾いてみた / I practiced and played the piano from zero piano experience.
hyuyukun
1
73
Blenderに入門しました / I started to use Blender
hyuyukun
0
110
気軽にパソコンを吹き飛ばせるようにするために / To initialize your computer easily
hyuyukun
0
44
僕っぽいことを喋るBotをマストドンで育てています / I'm growing a bot on mastodon that talks like me.
hyuyukun
0
72
4年と半年かけてようやくフロントエンドを書けるようになった / It took me 4 years and 6 months to be able to write the frontend
hyuyukun
0
280
Neofetchライクな自己紹介ツールyuyufetchを作った / Created yuyufetch, a Neofetch-like self-introduction tool
hyuyukun
1
220
世界観を考察するのが好き?Sound Horizonはいいぞ / Introduction to Sound Horizon
hyuyukun
0
960
Other Decks in Technology
See All in Technology
Amazon CloudWatch Network Monitor のススメ
yuki_ink
1
210
Exadata Database Service on Dedicated Infrastructure(ExaDB-D) UI スクリーン・キャプチャ集
oracle4engineer
PRO
2
3.2k
CDCL による厳密解法を採用した MILP ソルバー
imai448
3
170
Lambda10周年!Lambdaは何をもたらしたか
smt7174
2
110
Oracle Cloud Infrastructureデータベース・クラウド:各バージョンのサポート期間
oracle4engineer
PRO
29
13k
SRE×AIOpsを始めよう!GuardDutyによるお手軽脅威検出
amixedcolor
0
190
Taming you application's environments
salaboy
0
200
組織成長を加速させるオンボーディングの取り組み
sudoakiy
2
220
VideoMamba: State Space Model for Efficient Video Understanding
chou500
0
190
テストコード品質を高めるためにMutation Testingライブラリ・Strykerを実戦導入してみた話
ysknsid25
7
2.7k
【Startup CTO of the Year 2024 / Audience Award】アセンド取締役CTO 丹羽健
niwatakeru
0
1.3k
IBC 2024 動画技術関連レポート / IBC 2024 Report
cyberagentdevelopers
PRO
1
120
Featured
See All Featured
Gamification - CAS2011
davidbonilla
80
5k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
33
1.9k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
27
840
Code Review Best Practice
trishagee
64
17k
The Pragmatic Product Professional
lauravandoore
31
6.3k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
356
29k
Reflections from 52 weeks, 52 projects
jeffersonlam
346
20k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
232
17k
Art, The Web, and Tiny UX
lynnandtonic
297
20k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
31
2.7k
Mobile First: as difficult as doing things right
swwweet
222
8.9k
Building Flexible Design Systems
yeseniaperezcruz
327
38k
Transcript
KLab Server Side Camp お疲れさまでした! ゆゆ(@Hyuyu_kun) in KLab Server Side
Camp 第3回 2022/09/07
自己紹介 n ゆゆ / 渡邉 紘矢 ゆゆ君@Hyuyu_kun Hiroya-W • 京都工芸繊維大学
大学院 情報工学専攻 M1 • ソフトウェア工学の研究をしている • インフラにも興味があるので、インフラが分かるサーバーサイドになりたい と思って参加していました 2
期間中のコミット 3 n 合計 90コミット • 新機能 30コミット • 機能修正,
削除 10コミット • バグ, typo修正 14コミット • リファクタリング 15コミット • ドキュメントの変更 2コミット • ツールの準備 5コミット • PR Merge 14コミット
取り組んだ内容 n meet、slackでのスタンプなど、リアクションは積極的に やっていこうと思ってた • 自分以外も、全員そういった雰囲気があって期間中とても楽しかったし、 気持ちよく開発できた n 4日目、5日目は実装しながら #play
に居座ってた • 自分の実装は終わってないけどテストプレイしていると、自分の実装抜けが分かって良かった • テストプレイが楽しかった n 全エンドポイントを実装して、4人でマルチプレイが出来た! 4
実装で工夫したところ 5
各エンドポイント n /room/join • 排他ロック取って、4人以上にならないように考慮してみた n /room/leave • オーナーが退出した場合は、別のプレイヤーがオーナーになるようにした •
部屋に入っているユーザを順に見ていって、最初に見つかったオーナーじゃないプレイヤーを選択 • ルームから最後1人のプレイヤーが退出した時、そのルームを削除するように n /room/list • 不要な部屋を表示しないように • プレイ中の部屋 • 満員になった部屋 6
Swagger UIでSchemaに説明が表示されるように 7
poetryでプロジェクト管理するようにした 8 n Dockerfileでpoetryをインストール n requirements.txtの内容をpoetryへ移行 • ライブラリのバージョン管理 n Python仮想環境もpoetryで作成するように
ファイル分割 9 n api.py, model.pyが肥大化したので…。 • Pythonでの良い開発方法を知るのも、個人的な今回の目標だった n 参考 •
Bigger Applications - Multiple Files • https://fastapi.tiangolo.com/tutorial/bigger-applications/ • Full Stack FastAPI and PostgreSQL - Base Project Generator • https://github.com/tiangolo/full-stack-fastapi-postgresql
ファイル分割 - schemas 10 n Schemas • Request, Responseのデータ型
ファイル分割 - routers 11 n routers • エンドポイントの実装
ファイル分割 - その他 12 n dependencies.py • 各エンドポイントのDependsで使われる • get_auth_token(cred:
HTTPAuthorizationCredentials) -> str n exceptions.py • 例外処理とハンドラ • InvalidToken • RoomNotFound • InvalidJudgeResult • 例外発生時にレスポンスとして返すHTTP Status、エラー内容を定義 n 余裕があればmodel.pyを分割する方法が知りたい
今後やりたいこと n プレイヤーの人数が大規模になったときのことを考慮したい • クエリの負荷 • そのクエリ、インデックス使えてる? • ロックの使い所 •
同時にアクセスされた時に、正しいデータを返して処理出来ている確信を持ってコードは書けていない n ゲームとして • プレイヤーのタイムアウト • サーバーサイドに接続できなくて(?)、クライアント側でぬるぽが発生 -> 部屋作り直しをN回 13
感想 n 参加前:サーバーサイドやってみたい! n 最終日:サーバーサイド書けそう!って自信がついた • とはいえ、まだどこが辛くなるポイントかよく分かっていない • Pythonだけじゃなくて、SQLの知識も結構必要 •
テーブル設計 • Fast API、Pydantic、SQLAlchemyを使った、データ型を意識できる開発の体験は良かった n Server Side Campというだけあって、サーバーサイドに専念できた 5日間だった • メンターさん、運営さん、今回のインターン生のみんなと参加出来て良かったです。 ありがとうございました。 14
ありがとうございました!