ポタージュを垂れ流す。

マイペースこうしん(主に旅行)

KLab Server Side Camp(第2回)に参加しました

KLab(クラブ)さんの KLab Server Side Camp(第2回)に参加してきました。

このインターンに参加するまで失礼ながら知らなかったのですが、KLabさんは、スクフェスラブライブ)とか、最近だとラピライ(ラピスリライツ)とかのゲームを作ってる会社、というとイメージが湧きやすいのかなと思います。ICPCのスポンサーもやられているのは知らなかった...

人生初のインターンだったので、個人的にはとてもいい経験になったと思います。そんな参加記です。

告知

参加記に入る前に宣伝です。

<サマーインターン、エントリー受付中>

■「KLab Server Side Camp」(第3回)

https://klab-hr.snar.jp/jobboard/detail.aspx?id=Or4L6WIHlTI

日程:9/1(木)~7(水)※平日5日間

第1次応募締切:3/31(木)23:59まで

  • オリジナルの音ゲーを題材とした「サーバサイド」開発体験インターン

  • メンターは自社エンジニアのPythonコアコミッターが務めます

#KLabServerSideCamp

#サーバサイドキャンプ

リンク先で興味を持たれた方や、以下の参加記で興味を持たれた方は是非エントリーしてみてはどうでしょうか...

参加のきっかけ

twitter経由で第1回の参加記を読んだからです。この記事読んだんだと思います。

qiita.com

単純に面白そうだな〜ってなったのと、自分が趣味として使ってた技術(FastAPIもSQLこれで触ったことは一応あった)がどうやって実際のアプリケーションに使われているんだろうと興味があったというのが一番の理由でしょうか。pythonを使って、というのもあまり聞かない気もしたので(実際の開発でもpythonを使っているようです)。

あとは、こういうインターンに参加しないと、春休みコーディングしないだろうなあというのもありました。

ちなみに、僕がこのインターンの存在を知ったタイミングは第2次応募締め切りの直前くらいで、2次はお祈り確率が高くなっていたとのことなので、運が良かったようです。何事も早めにやるのが大事ですね。

スケジュールイメージ

3月の10,11,14,15,16日の5日間で開催されました。

ちなみに、12,13は土日でしっかり休んでね〜とのことでしたが、その土日は僕は東京に行っていました

なお、今回の製作物はこちらになっています(コードとして直すべきところはタイミングを見て直したいですね)。

github.com

1日目(3/10(木))

各参加者の自己紹介から始まり、環境構築、MySQLを触ってみる、SQLAlchemyを使ってpythonからSQLを実行してみる、音ゲーで遊んでみる、といったことをしていました(講義と実習)。

開発環境にはgithub codespacesというものを使っていて、僕自身はそれに初めて触れたので、こんな便利なものもあるんや〜と少し感動していました。

音ゲーはパソコン上で動くもので、6つのキーでやるものでした。弐寺beatmania IIDX)みたいな感じでしょうか。僕はipadでdeemoとかデレマスとかそういうタイプのキーを使わない音ゲーばかりやっていたのでなかなか苦戦していました。ちなみに、KLabさんのゲームはひとつもやったことがありませんでした...

さすがにSQLなど触った経験があるだけあって特に引っかかることもなくこなせたので、大部分の時間を音ゲーのプレイに費やしていました。

2日目(3/11(金))

1日目に最低限のSQLなどの知識を確認したので、FastAPIとかpydanticとかを触ってみようという感じになりました。まずはチュートリアル的な感じでuserのAPIを完成させてみて触り方を学習します。ここまでで以後実装に必要な知識は一応得られたことになります。

午後からは本キャンプの本題となるroom APIの実装に入ります。マルチプレイをするのにバックエンド側で必要な機能を実装していきます。具体的には、対戦部屋の作成、部屋の一覧表示、部屋への入室、開始待ち、ゲーム開始、結果の送信、結果の表示、途中退室、の機能の順です。マークダウンで書かれた仕様書があり、それを基づいてやっていきます。

2日目にはたしか、部屋への入室までは実装できていた気がします。部屋が満室だと入れないようにするとか、考慮することがいろいろあって、部屋への入室機能の実装には苦労しました。

3日目(3/14(月))

土日を挟みましたが、先週からの続きをやっていきます。以後は、実習のヒントとか、ポイントの解説的な講義はありましたが、基本はもくもくと実装です。

もくもくと実装したおかげか、一応目標としていた機能は全て実装できていたはずです。皆さんかなりもくもくと作業していたので、社員さんが寂しそうでした(笑)

4日目(3/15(火))

この日は他の参加者の方々と実際にマルチプレイをし合ってデバッグ作業でした。幸いなことに?僕の書いたプログラムは特に問題なく動いてくれました。

デバッグし合っていると、自分の実装で忘れていた点などが浮かび上がってきて、ちゃんと動いてくれてはいるけど問題があるなあといったところを修正できたり、機能の追加をすることができたりしました。

また、デバッグ作業をしていたら、マルチプレイではポーズ操作ができないはずなのにできてしまい、プレイ中にやめられない想定なのにプレイがやめられてしまうという、クライアントサイドのバグを思わぬところで見つけてしまったりもしました。

(これの何が問題かというと、退室した人がプレイ中のままと誤認されて、他の退室してないプレイヤーがプレイ終了しても、いつまでたってもリザルトの画面に辿り着けないということが起きてしまいます)

また、途中でエンジニアさんの座談会の時間が設けられていました。技術ってどうやって仕入れてますとか、リモートワークこんな感じですとか、色々話していただきました。

5日目(3/16(水))

この日は最終日ということで、成果発表資料の作成と簡単なコードの修正と、それから昨日見つけてしまったクライアントサイドのバグをサーバーサイド側でなんとかしてみるか〜ということで機能を追加していました(その機能の実装はできましたが、個人的にあまり納得いくコードの書き方ではありませんでした、成果発表会の時にこの点についてコメントをいただけることができたのでよかった)。

自分の成果発表会の後には、メンターさんからコメントがいただけて、全部実装できてていいですねとか、この作りだとデッドロックが起きてしまうかもしれないだとか、こういう実装はしなくて普段はこうしてるかなとか、関数の分け方がいいだとか、色々言っていただけで、学びもありました。

もちろん、他の方の成果発表からも得られるものがありました。UML図やER図書いてる方だとか、セキュリティ意識高くSHA256をかましていたりとか、データベースの正規形意識してる方だとかがいて、すげーとなっていました。

成果発表会後は懇親会ということで、昨日の座談会の続き(?)という面もありましたが、それよりはゆるい感じで、就活の話からそうでない話まで、こちらも色々と楽しい話が聞けました。深夜ラジオみたいな感じでした。

感想

技術面

メンターの方々のhelpがかなり手厚いと感じました。質問対応が早くてなおかつ親切です。自分はあまり質問することはありませんでしたが、他人の質問を見て勉強になるなあと感じたこともありました。ちなみに、メインメンターの方はpythonのコアコミッターの方ですごいと思う。

最終日に自分の書いたコードに対してコメントをいただけたのは本当にためになったと感じます。

課題は普通に難しいんだと思います。サブメンターのエンジニアさんがそうおっしゃっていました。僕は特につまずくことなく実装できてしまいましたが、それでも悩んだ部分はあります。参加者全員が最後まで実装できたわけではないです。仕様書があるとはいえ、逐一説明されているわけではなく、データベースのテーブルの設計から始めるため、なかなか自由度が高い課題になっているかなと思います。

他の参加者の方々について

みんながみんな情報系というわけではなく、例えば化学系の方もいました。また、情報系の中でも低レイヤーが専門という方や、普段はpythonじゃなくてgo書いてますとか様々でした。

サーバーサイドの経験があってバリバリやな〜って方もいれば、ない方もいました。僕は一応あるっぽいです(そういうことを意識せずに開発していました)。

志望理由もさまざまで、僕は(真剣な方にちょっと申し訳ないなと思いつつ)気になる〜って軽いノリで参加していて、似たような志望動機の方もいましたが、就活の一環で成長したいからという方もいらっしゃいました。

参加者11名中、バ美肉している参加者が2人もいらっしゃいました。

参加者の方々を見ていると、pythonが書けて(数値計算などでも可)、gitが使えれば参加のチャンスはあるのかなと思います。

雰囲気について

雰囲気はとても良く、エンジニアさんとも、他の参加者の方とも、ワイワイやることができました。本筋に関係ない雑談もできました。エンジニアを大切にしてくれる社風なんだなと感じました。会社の雰囲気を知れたというのは大きな収穫の1つだと思います。

ゲームについて

なんとこのインターンのためだけに作っていただいたようなのですが、普通にクオリティが高く驚きです。暇な時に遊ぼうと思います。ゲームのクライアントサイド自体はunityで作られているようです。

開発用(?)というだけあって、普通にプレイもできるのですが、オートプレイモードや、一瞬でリザルトに移行するモード等も用意されています。

f:id:potaxyz:20220318185250p:plain
楽曲・難易度選択画面

f:id:potaxyz:20220318185010p:plain
プレイ画面 キャラクターがかわいい

f:id:potaxyz:20220318185530p:plain
ゲーム開始画面 通常・オート・一瞬モードとシングル・マルチプレイの切替が可能

楽曲の例:

ノベルティなど

参加証をいただきました。ちなみに、twitterでもこのアイコン使ってますが、どっかからパクってきてるわけではなくて、自分で描いたものです。ホワイトボードに描いたやつを写真撮ってます。

f:id:potaxyz:20220318185917j:plain
参加証

5日間のお供にということで、段ボール1箱分のお菓子と、自己研鑽用の本などをいただきました。

f:id:potaxyz:20220318190028j:plain
お菓子や本や扇子など

また、懇親会用にということで、お酒やおつまみ類もいただきました。成城石井のいいおつまみでした。

f:id:potaxyz:20220318190108j:plain
お酒とおつまみ

最後には修了証もいただきました。

たくさんのノベルティ等本当にありがとうございます。まだたくさん残ってるのでゆっくりいただきます。

さいごに

自分自身、あまり企業のことや就職のことに興味を持てずにいたので、このような経験ができたのはとてもよかったと感じています。

KLabさん、5日間ありがとうございました。とても楽しかったです。