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
58
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
51
phina.jsで弾幕シューティングを作る / Creating a bullet-hell shooter with phina.js
hyuyukun
0
210
ピアノ経験ゼロからピアノを練習して弾いてみた / I practiced and played the piano from zero piano experience.
hyuyukun
1
120
Blenderに入門しました / I started to use Blender
hyuyukun
0
130
気軽にパソコンを吹き飛ばせるようにするために / To initialize your computer easily
hyuyukun
0
67
僕っぽいことを喋るBotをマストドンで育てています / I'm growing a bot on mastodon that talks like me.
hyuyukun
0
100
4年と半年かけてようやくフロントエンドを書けるようになった / It took me 4 years and 6 months to be able to write the frontend
hyuyukun
0
310
Neofetchライクな自己紹介ツールyuyufetchを作った / Created yuyufetch, a Neofetch-like self-introduction tool
hyuyukun
1
280
世界観を考察するのが好き?Sound Horizonはいいぞ / Introduction to Sound Horizon
hyuyukun
0
1k
Other Decks in Technology
See All in Technology
高速なプロダクト開発を実現、創業期から掲げるエンタープライズアーキテクチャ
kawauso
2
9.3k
使いたいMCPサーバーはWeb APIをラップして自分で作る #QiitaBash
bengo4com
0
1.9k
無意味な開発生産性の議論から抜け出すための予兆検知とお金とAI
i35_267
4
13k
NewSQLや分散データベースを支えるRaftの仕組み - 仕組みを理解して知る得意不得意
hacomono
PRO
2
160
Yahoo!しごとカタログ 新しい境地を創るエンジニア募集!
lycorptech_jp
PRO
0
110
生まれ変わった AWS Security Hub (Preview) を紹介 #reInforce_osaka / reInforce New Security Hub
masahirokawahara
0
470
CRE Camp #1 エンジニアリングを民主化するCREチームでありたい話
mntsq
1
130
「クラウドコスト絶対削減」を支える技術—FinOpsを超えた徹底的なクラウドコスト削減の実践論
delta_tech
4
170
DatabricksにOLTPデータベース『Lakebase』がやってきた!
inoutk
0
110
SEQUENCE object comparison - db tech showcase 2025 LT2
nori_shinoda
0
140
OSSのSNSツール「Misskey」をさわってみよう(右下ワイプで私のOSCの20年を振り返ります) / 20250705-osc2025-do
akkiesoft
0
170
Enhancing SaaS Product Reliability and Release Velocity through Optimized Testing Approach
ropqa
1
230
Featured
See All Featured
Optimising Largest Contentful Paint
csswizardry
37
3.3k
We Have a Design System, Now What?
morganepeng
53
7.7k
Fireside Chat
paigeccino
37
3.5k
Site-Speed That Sticks
csswizardry
10
690
Typedesign – Prime Four
hannesfritz
42
2.7k
Navigating Team Friction
lara
187
15k
BBQ
matthewcrist
89
9.7k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
281
13k
It's Worth the Effort
3n
185
28k
Rebuilding a faster, lazier Slack
samanthasiow
82
9.1k
Rails Girls Zürich Keynote
gr2m
95
14k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
34
3.1k
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
ありがとうございました!