見出し画像

CA Tech Challenge(プロトスプリントリーグ )にサーバーサイド担当として参加して優勝した

2021年3月19日(金)~2021年3月21日(日)までの3日間で,サイバーエージェントさんのプロトスプリントリーグ(CA Tech Challenge)というインターンにサーバーサイド担当として参加してきました!

サーバーサイド担当として参加している方のブログが少ない気がしたので,(今後も同じ形のインターンがあるかは分かりませんが)サーバーサイド担当として,これから参加する人の参考になれば幸いです...!

プロトスプリントリーグ とは

プロトスプリントリーグは,3日間でお題に沿ったゲームをチームで開発し,ゲームとしての総合的な完成度の高さを競うハッカソン型のインターンです.

お題は事前に発表され,開発期間の3日間は現場で実際に働いているエンジニア社員のバックアップのもと開発を進めます.

また、別開催のサイバーサイドのインターンシップ(CA Tech DOjo)参加者がチームに1人ずつ配属されて、バックエンドとの繋ぎ込みも含めてチーム開発を経験できます.

ゲームエンジンはUnityで,参加者の人はUnityゴリゴリで自分が開発したゲームの作品などを皆持ってました(少なくとも自分のチームは)👀

今回はクライアントの参加者が28名でサーバーサイドの参加者7名だったため,5名1チームの計7チームに分かれて,各チーム3名ずつメンターさん(2名がクライアント,1名がサーバーサイド )が付いてくれる贅沢な構成でした🤤

公式の記事もあるのでそちらも参考にすると良いかもしれません👀https://www.cyberagent.co.jp/way/features/list/detail/id=25584

画像3

目標設定

技術的な目標

参加前の自分は,CA Tech Dojoで基礎的なAPIの作成や少し発展的なこともローカル環境ではできるようになってきているというような感じでした.このインターンでは実際にデプロイ環境を用意して頂けるということで,デプロイ周りのキャッチアップと業務を少し意識してCI/CDに取り組んでみようと考えていました.

技術以外の目標

今回はクライアントとの繋ぎ込みをデプロイまで含めて経験できる貴重な機会だったので,API仕様をドキュメント化したり,クライアントの人とコミュニケーションを密にしながらゲーム開発を楽しみたいなと考えていました .

スクリーンショット 2021-03-18 17.42.29

事前準備

チームが発表されてからは,率先して「顔合わせとミーティングやろう」と言ってくれるチームメンバー(最高🔥)がいて,それに乗っかって開発期間に入るまでに3回ミーティングしました!

1回目は顔合わせ・自己紹介が主で,クライアントの人は自分が作ったゲームなどをプレゼンしあっていました👀  自分はゲームだったりフロントの成果物はこれといってなかったのでDojoで作ったAPIの機能を話しました🗣  みんな成果物があってゲームへの熱がすごい伝わってきました🔥

2回目のミーティングは事前に発表された「シューティングorパズル」というお題から,実際に自分達がどんなゲームを作るか企画しました.
色々とコンプライアンス(?)の問題で実際に作成したゲームの世界観は伏せますが,割とアイデア出しを始めて1, 2時間で出てきたアイデアで結構すんなり決まった記憶があります.

自分は普段ゲームをしないので,正直ゲーム名など知識がなくて話についていけなくて(「ウマ娘ってなんなんだ...?」ってなった)あまり意見を言えなかったのがちょっと残念でした😢  こういうところでアイデア出しの知識があればゲームなど特定の分野の知識がなくてもアイデア出しを主導できるなと思い,そこら辺の知識も付けていきたいなと思いました.  (クレイジーエイトとか色々フレームワークありますよね👀)

3日目はAPIとの繋ぎ込みイメージ(自分の担当するところ)とクラス設計を行いました.APIとの繋ぎ込みのイメージは,Dojoで開発したスゴリらんのAPIや画面を見せながら,「このタイミングでAPIを叩いて〜...」とかって説明して事前にある程度のイメージができればなと思って説明しました🔥  自分は予定があったのでその後は参加できなかったのですが,クライアントの皆んなはクラス設計をしていたみたいです(すごい)

振り返ってみると,やっぱりこの事前準備がかなり重要だった気がします.きっと3日間もミーティングしたチームはあまりないと思いますし,ここでアイスブレイクしておくことで,「この人は音やドット絵が得意」「この人はUI/UX得意」「ロジック得意そうだから繋ぎ込み担当してくれそう」などなどなんとなく各々の得意分野が分かって,開発期間に入って新しいタスクが発生してもスムーズに役割分担できた気がします👀

画像5

開発期間の3日間の流れ

1日目は事前のミーティングでかなり企画もできていたため,スムーズに開発に入ることができたと思います!  自分もサーバーサイド担当として企画していた内容に必要なAPIの作成を始めました.2個APIを作ったところでクライアントと連携するためのAPI仕様書をSwaggerで作って共有したり,チームに1つデプロイ環境としてもらえるVMにsshで接続して,クライアントのサンプルをrsyncコマンドで同期してデプロイされているか動作確認するなど,ざっくり全体として必要な手順を触ってみました.夕会でチームメンバー全員が進捗を共有して,フロントの方もこっち側から見ていて順調そうでした👀

2日目は昼過ぎに中間発表があるので,クライアントはそれまでにインゲームをある程度遊べる形にしたいなというような感じで黙々開発していました.サーバーサイドの自分も残りのAPIの実装をして,目標の1つとしていた自動デプロイをするためにメンターさんにGitHubのリポジトリの権限をもらったり準備していました.

スライドなどの中間発表の準備も滞りなく完了して現状のプレイ動画も撮って中間発表に挑みました.中間発表はプレゼンが3分間で,その後に別のチームのメンターさん2人にフィードバックをもらえました.非常に参考になるフィードバックでシューティングしたときの爽快感だったり,ゲームを単調にさせないためのイベントがあったら良い等々,これから自分達が実装しようとしていたマップ機能も含め,とても参考になりました.中には動画での準備が間に合わず画像でゲームを説明しているチームもありました.ただ,せっかくフィードバックがもらえる機会なので,ここまでで動くものを作っているとより良いフィードバックがもらえたりするので良いと思います😎

終わってからは(記憶が曖昧...多少前後していたかも)フィードバックも参考にしつつ,再度明日までに実装したい機能を整理しました!APIの実装も完了したので自分は自動デプロイができるようymlをゴニョゴニョ書いていました🔥  周りのサーバーサイド担当の人も2日目終わる頃にはAPIが実装完了していた気がします.夕会で進捗の共有をした時は,そろそろ機能に優先度を付けていくと良いとアドバイスをいくつももらいました.

1日目の夜の時点で「2日目に備えて今日は寝よう」と言っていたぐらいだったので2日目は19:00を過ぎても開発を続けていました🔥  自分もymlを永遠にゴニョゴニョ書いていました.クライアントの方は企画していた機能全てを実装するという強い意志のもと圧倒的集中力で実装を進めていましたね.人事のななさんから5時間は寝るように言われていましたが,朝までymlをひたすら試行錯誤して書き続けて自分は6時から3時間寝ました😪  (クライアントの人はほぼ全員完徹だったようです...👀)

3日目は15:00に競技終了でその後最終発表があるので,3日目とは言え,1, 2日目に比べればかなり時間が少なかったです.自分は自動デプロイの方はひとまずひと段落したので,クライアントのメンバーがビルドしたコードをrsyncコマンドでVMに反映するのが主な作業でした.

と!思っていたら!朝会が終わって少しして,ランキング機能のAPIが今実装しているゲームと乖離しているのに気付きました😇  自分達が実装しているゲームのランキングはスコアが小さいほど高くなるのですが,実装済みのAPIはスコアが高いほどランキングも高いという実装になっていて,「うわ!やらかした!!!」と思ってすぐにチームで共有して修正しました😇  幸い修正箇所が少なかったので問題なかったですが,一瞬マジで焦りました笑

その後は逐次クライアントのメンバーがビルドしてくれたファイルをrsyncでVMに反映する作業でした(rsync祭り)あとはクライアントのメンバーが開発している間手が空いていたので,デプロイしたゲームをプレイして動作確認して問題点や「ここどうなんだろ?」という点を共有していました.アイデア出しなどであまり意見を言えなかった分,ここぞと言わんばかりに積極的に意見を出しました🔥  クライアントのメンバーがすごくて,報告したらすぐに改善して再度ビルドしてという工程を高速で7回ぐらい繰り返して爆速で改善していきました.最後の方は「そうえばゲーム名決めてないじゃん!」とかレベルデザインなどバタバタしましたね👀  そのまま15:00なって開発時間が終了してデプロイして無事動作するものが完成しました🎉  最終的に企画していた機能を全て入れられてチームメンバーも一安心でした!(凄い)

これはメンターさんが懇親会で言っていたことですが,「2日目の夕会の時点でかなり残タスクがあったので全て実装するのは厳しそうだなと思っていたけど,全てやり切って本当にすごい」と言って頂きました!自分から見ても2~3日目の開発速度は圧倒的で本当に凄かったです.「音はこの人!」「ロジックはこの人!」みたいな感じで役割が明確になっていて,かつメンバーが徹夜してまで本気で開発していたからこそだと思います👏  本当に熱が凄かった...

そして最終発表もチームメンバーが自分達のゲームに合った綺麗なデザインのスライドを作ってくれて無事発表を終えることができました.フィードバックでもすごく褒めて頂いて「リリースして欲しい」等々すごく達成感を感じるコメントばかりでした.

そして運命の結果発表...

スクリーンショット 2021-03-14 18.14.47 2

スクリーンショット 2021-03-14 18.15.44

発表された瞬間歓喜しました🔥  見事優勝を頂きました!!!
優勝理由は,ゲームを単調にさせないための工夫(イベントやアイテム),音やUIの分かりやすさなどゲーム全体の完成度が高いとのことでした!

自分はサーバーサイド担当で自分が作ったゲームなわけではないですけど,確かにテストプレイしていてゲームとして普通に楽しかったですし,なんかゲーム自体にも愛着が湧いてきていてすごい嬉しかったです🥺

5分面談の時間に限らず,自主的に様子見でZoomに入ってきてくださったり,2日目の夜は「仕事終わってからでも困ったら全然メンション当てて」とも言ってくれて,本当にサポートして頂いたメンターさんに感謝です🙇‍♂️

Dojoのときも感じましたが,こういうカルチャーが根付いている気がして本当に良いメンターさん,良い会社だなぁと思いました👀

開発以外のイベント

開発以外にも運営の方が色々な企画をしてくださり,サイバーエージェント,特にゲーム事業のSGEについて知る機会や他の参加者と交流する機会がありました.特に懇親会の際のLT会は非常にSGEの理解に繋がりました.

SGE全体の説明だったり,各子会社の違いや小会社間の連携などDojoのときは知らなかったこともたくさん知れて非常にためになりました.(Dojoより詳しい&豪華な説明だった気が...👀)

その後もクライアントとサーバーにメンバーが別れてさらにそれぞれの分野のメンターさんがLTをしてくださりました.業務内容の詳しい説明だったりゲームAPIを開発する楽しさを改めて知ることができました!

チーム内の懇親会もありましたが,優勝が決まったばかりでメンターさんも含めてずっとエモい話ばかりしていて(というかエモくなってしまう)凄い楽しかったです.いや〜良いチームに巡り合えた...

学べたこと

まずは技術的なこととして目標としていた自動デプロイを実装できて良かったです!他にもrsyncコマンドやsshなどなどサーバー周りを勉強することができて非常に貴重な機会でした.今後は自分でVPS契約して触ってみようかなと思っています💪

あとはクライアントとの連携も非常に学びになることが多かったです.ドキュメントなどを用意して連携できる環境を用意することはもちろん,3日目の朝に気付いたように仕様は明確にしておかないと後々手戻りが発生してしまうので事前のコミュニケーションが重要だと実感しました.(今回は規模が小さかったから修正が間に合ったものの大規模だとどうなるか...と考えたら今のうちに経験できて良かったです)

最後に

最後になりますが,チームメンバー,メンターさん,運営の方々,本当にありがとうございました!🙇‍♂️
これはDojoの時も思いましたが,サイバーエージェントのインターンに参加している人はみんな人間力が高くて凄い人ばかりで,こんな人たちと働きたいなぁと思いました🥺

メンターさんからも「今後もチーム内でお互い連絡し合って欲しいくらいコミュニケーションが上手く取れいた」と言ってもらえるほど,非常に技術のバランスやメンバー自体の人当たりが良くて充実した3日間でした...!自分達のチームは基本的に昼間でも夜中でもZoomを繋げて作業していたのですが,聞くところによると全てのチームがZoomを繋げっぱにしているわけではないようなのでここら辺のチーム全体の雰囲気も開発をする上で恵まれていたのかなと思います!(率先してチームビルディングしてくれたメンバーにも感謝🙇‍♂️)

インターン終了後にチームメンバーから「今後も開発したい!」という提案があって,今後もこのチームでゲームを開発することになったので,サーバーサイド担当としてインフラ周りだったり,キャッチアップして今後も頑張りたいです💪

メンターさんや運営の方々もDojoに引き続き,たくさんサポートしてくださって,本当に良い会社だなぁと思いました...

以上です!これから参加する人の参考になれば幸いです...!

この記事が気に入ったらサポートをしてみませんか?