KLab サーバーサイドキャンプに参加しました〜

#要するに

* pythonでサーバーサイドをやってみたい人におすすめ
* サーバーサイドの入門本を読んでから行くのがbetter
* 教材の音ゲーのクオリティーもすごい

#自己紹介

* 暇人窟 [@fzk_hrkw_kuee](https://mobile.twitter.com/fzk_hrkw_kuee)
* 電気電子のひと　学部3回
* マイコンとか低レイヤが好き  (ちゃんとやってるとは言っていない)

#概要
pythonで音ゲーの通信対戦のバックエンドを作る

* fastAPIでやる pydanticも使用
* SQLalchemyで生のSQL文を書く(ORMは使わない)
* githubのcodespacesを使用  
→ローカルに何もなくてもできる！

#モチベーション
バックエンドの基礎の本は読んだことはあったのですが、実践的な経験を得るため参加しました。  
他の受講生は(専門外だが)多少バックエンドに触れたことがある人がほとんど、といった印象でした。
バックエンドの目的や構成などの事前知識が最低限無いとやや厳しいキャンプだったと思います。
化学系の人、ロボット系の人などさまざまなバックグラウンドの人が参加されていました。
学部3,4回生がボリュームゾーンでした。

#形態

* google meetで講義
* slackで連絡・質問・雑談など

雰囲気が堅くなく、居心地は良かったです。
こちらのスケジュールにもかなり柔軟に対応して下さったので感謝(事前連絡はしましょう)
(参加できなかったのですが)座談会もありました。
技術から就活までいろいろな質問が出ていて、想定よりも盛り上がっていたようです。
「学生とメンターだけでなく学生どうしのつながりも」と運営側はヨコのつながりも推奨していました。
実際後半では作ったサーバーで対戦する人もいて、受講生どうしの会話もそれなりにあったと思います。

#実装
枠組みはだいたいできてる
だいたいPOSTリクエスト
クエリパラメータは使わずjsonを投げる
ユーザー登録・設定に関する/user APIと
対戦に関する/room APIがある

userの方はだいたい組み上がっており、チュートリアル的実装
roomの方は仕様を渡されあとは自分で設計

#流れ
初日: とにかくSQLに触れる
　　途中からipythonでSQLalchemyにも触る

2日目: FastAPI,pydanticの説明  
　　実装するAPIの仕様をもらい、あとはひたすら実装
　　以降は実装する上でのポイントを解説

年末年始　ブランク
　
3日目: テーブルの構成、複合主キー

4日目: トランザクションとロック　ルームの人数制限をどう扱うか

5日目: 実装、成果発表、懇親会

#感想
##講義など
質問がしやすい雰囲気だったのが何より助かりました。　DMの質問も許容してもらえるなど、運営側がとても努力してくれていました。
対応も迅速で、ストレスなく開発が進められました。

また、受講生全体の進度に合わせて構成を適宜調整してくれました。毎回講義資料が進度に合わせて改訂され、講義構成が変わることもありました。
既に分かっているところにむやみに時間を割くことがなく、講義のスピード感はかなり良かったです(人によってはやや速く感じるかも)。

##課題に関して
codespacesのおかげで環境構築に手間がかからない、というのはかなり助かりました。コンテナバンザイ！
また、ブラウザからAPIを叩ける Swagger UIはかなり重宝しました。

日程に対して課題はやや難易度が高く見受けられました
(受講生全員がサーバを正常に動作させられた訳ではない)。
APIの仕様にあうサーバを設計する段階から始める、自由度がある課題なので、不慣れな人はやや取っつきにくく感じそうだなと思いました(一方で慣れてる人だと3日目に動作までこぎ着けた例も)。
難しく感じた人にはもう少し指針(実装する関数の入出力を指定するなど)があってもいいかなとおもいました。



##ゲームに関して
音ゲーは本当にアプリとして見かけても何の違和感もないクオリティーでした。
初日からオフラインモードで遊べたので結構楽しめましたね。
まさか初日からほぼ全ての曲でフルコンを取る猛者がいるとは思いませんでしたが、、
なんでも音ゲー目当てにキャンプに参加されたそうです。すごい…

![1641784816770.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2491138/701e0a97-58c5-540b-20ec-632416a0c5d8.jpeg)
![1641784821847.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2491138/995c1070-bad5-d65f-fa36-4045c9ad269e.jpeg)




##その他
インターン前日に、なんと実装のお供にと大量のお菓子を送って頂きました！めちゃくちゃ嬉しい!!
![20211222_195525_HDR.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2491138/2f0eb29d-2cdd-d0b3-81f8-851d4f8e8e10.jpeg)

また、最終日の懇親会用にお酒とおつまみを(こちらも大量！)頂戴しました！おつまみのチョイスがこれまた良い！
ノベルティの他に、修了証書まで頂きました。
<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">続いて、修了証の贈呈の一枚です。皆さん、5日間本当におつかれさまでした！<br><br>（ちなみに、修了証の右下のハンコは、サーバサイドキャンプ専用のオリジナルデザインだったりします…！）<a href="https://twitter.com/hashtag/KLabServerSideCamp?src=hash&amp;ref_src=twsrc%5Etfw">#KLabServerSideCamp</a><a href="https://twitter.com/hashtag/%E3%82%B5%E3%83%BC%E3%83%90%E3%82%B5%E3%82%A4%E3%83%89%E3%82%AD%E3%83%A3%E3%83%B3%E3%83%97?src=hash&amp;ref_src=twsrc%5Etfw">#サーバサイドキャンプ</a> <a href="https://t.co/mazXOGUjkb">pic.twitter.com/mazXOGUjkb</a></p>&mdash; Kの27乗 (@oktillion27) <a href="https://twitter.com/oktillion27/status/1479417364899069954?ref_src=twsrc%5Etfw">January 7, 2022</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script> 
貰えると嬉しいものですね。達成感もひとしおです。

KLabさんには技術者を大切にする風土があるようです。ゲームエンジニア等の道に進むならばかなり魅力的な企業だと思います！

#まとめ

* バックエンドを少しだけ触った人が次に挑む内容として◎
* やや自由度が高い　(必要な人には)もう少し指針があっても良いかも
* 雰囲気が非常に良い、質問への対応も速くて親切


KLabさん、ありがとうございました!!