こんにちは!採用担当の hagi です。
2024年8月19日〜24日 の5日間で『ゼロから学ぶWebプログラミング5daysインターン』を開催しました。
今回は、13名の参加者に、ガチャの実装・バトルシステム・レイドボスバトルの実装を行うプログラミングを体験していただきました!
ゲームのバックエンド開発の情報はインターネット上にも少なく、学校や個人開発でUnityやUnreal Engineでゲームクライアントを作っている学生にとっても、Webシステム開発に慣れている学生にとっても、普段とは違った開発の雰囲気を味わってもらえるように、オンラインゲームらしい実装を体験できる課題を設けました。
今回の取り組みピックアップ
開発環境はGitHub Codespacesで構築
今回の環境構築は、あらかじめ用意したリポジトリをForkして、Codespaceを立ち上げるだけ!
CodespaceはGitHubプロジェクトの開発環境をクラウド上でホストできるサービスです。
https://docs.github.com/ja/codespaces/overview
Codespace上でdevcontainerとdocker composeによる構成管理を行い、開発用ツールとLEMP構成のWebサーバーを用意しました。Codespaceの機能を使って、ポートフォワーディングによるPrivate/PublicなSSLエンドポイントが作成できるため、本番さながらのWebサイトを簡単に構築することができます。
GitHubアカウントを作るだけで無償で仮想マシンが利用でき、ブラウザがあれば開発ができるのでワークショップに使いやすいと感じました。決済手段の登録も不要なので学生の個人開発にもおススメです。
全体の流れ
例年のインターンと同様、Slack と Zoom で質問や連絡をしながら、GitHub上でコードレビューを行うという、インフィニットループの実際の業務の流れに近いスタイルで開発を体験してもらいました。
Slackでは個人の分報(times)チャンネルで質問や連絡を行いつつ、常時Zoom会議を開いており、気軽に口頭で質問できるようにしています。
働き始めてからの仕事の雰囲気を感じてもらうことができたのではないでしょうか。
サーバー初期構築
インフィニットループのインターンシップでは、普段はUnityやC++でゲームを作っている学生や、Linuxに不慣れな学生でも、サーバーOSの操作に親しんでもらえることを重視しています。
Codespace上でいくつかのコマンド操作に慣れ親しんでもらい、そのうえでDockerコンテナを使った環境構を、資料を読み進めながら行ってもらうことでサーバー構築が完成する流れになっています。
手順書の内容と講師の補足説明を聞きながら構築する事により、今自分が何を行っているのか理解してもらい、その経験を持ち帰ってもらえるようにしています。
サーバー構築体験の内容
- タイムゾーン設定(UTC -> Asia/Tokyo へ変更)
- apt を使用したパッケージアップデート
- OS上でWebサーバーを立ち上げてHTTP通信を確認する
- Docker Composeを使って複数コンテナを立ち上げ、それぞれのログを確認する
- Gitでユーザー名やメールアドレスなどを設定し、GitHubへのアクセスを行う
- composer / artisanを使用したPHPアプリケーションの初期設定
ゲームロジックの実装
今年からPHPフレームワークとしてLaravelを利用しました。MVC+Sのレイヤー設計となっているプロジェクトのコードを把握しながら、設計に沿って課題のロジックを実装します。
また各種課題には、それぞれ対応するユニットテストがあり、自分で実装が要件を満たしているかどうか確認できるようになっています。
各自コードを書いたらGitHub上でプルリクエストを送り、レビューでうまく実装できなかったところのコメントを受けたり、ほかの実装方法やをしながら進めていきます。
数ある課題の中から一部を紹介します!
ガチャの実装
バトルに参加するキャラクターを「レアリティごとの確率に応じて抽選するにはどうすればいいか?」というお題に取り組んでもらいました。
- バグ修正(不具合個所の特定と再現)
- 10連ガチャの実装
- レアリティ確定ガチャの実装
バトルの実装
ガチャの実装で一通り既存コードの読み方を体験してもらい、いよいよ本格的なゲームロジックの実装としてバトルの実装をしてもらいました。
- ダメージ計算処理の実装
改修前はシンプルに、設定された攻撃力の値をそのままダメージとしていました。この課題で、RPGによくあるダメージにブレのあるダメージ計算式を実装してもらいました。
ほかにも行動AIの実装や、確率的な結果をもたらす要素を実装してもらいました。
- クリティカル処理
- 一定の確率でキャラクターが与えるダメージを一定割合増加させる
- 回復コマンドの回復量にブレを生じさせる
- 敵AIを、一定の体力を下回ったら回復する行動をとるようにする
- あらかじめ実装されている魔法攻撃を、通常攻撃より強い攻撃として実装する
魔法攻撃の実装では、自分で仕様を検討する体験もしてもらいました。
バトルの実装になるとそろそろ皆さんもPHPに慣れてきて、楽しむ余裕が出てきました。
レイドバトルの実装
今回は新たなお題として、複数のプレイヤーが限られたターン数の中で協力してボスを倒すレイドバトルの実装を行ってもらいました。
- レイドバトルでターンが進むごとに強くなる敵AIを実装しよう
今回は後半に余裕があったので、レイドバトルは「レイド」らしく、グループを分けてそれぞれのグループで実装内容を相談しながら取り組んでもらいました。
最後には全員で自分たちが作った敵とバトルをして「強すぎた~!」などの感想が聞かれ、ゲームのバランスを調整することの難しさも体験してもらえたようでした。
Gitを使った共同開発の体験もしてもらうことができ、限られた時間の中でどういう役割分担で実装するか、というゲームジャム的な雰囲気も生まれました。
参加者間の会話も盛り上がり、実際の仕事の楽しさを実感してもらえたようでした。
新規キャラクターの追加
新規でプレイヤーまたは敵側のキャラクターを追加してステータスを設定してもらいました。
成果発表会
最終日はインターン生全員が、 インターンを通して身に付いたこと、苦労したこと、追加したオリジナルの要素紹介 のテーマで成果発表を行いました。
皆さんスライドを用いて素晴らしい発表を頂きました!一部抜粋して紹介します。
最後に
5日間のリモート開催でしたが、課題が一つも終わらないという参加者の方はおらず、テレビ会議やコードレビューを通じてそれぞれの参加者の成長が実感できました。
アンケート
受講後のアンケートから感想をいくつかご紹介します。
分からないところを気軽に講師陣に聞ける雰囲気があった。
課題に沿って進んでいくので、次にやりたいことが明確でよかった。 普段は自分のコード以外を見る機会があまりないので、他の方がどのように組み立てているか見ることが出来るのが有難かった。
現役のエンジニアによるコードレビューやソースコードを体験することができて、非常に参考になった。
初めてのインターンということもあり緊張していたのですが、講師陣や社員の方々が優しく接してくれたおかげで緊張もなくなりすごく充実したインターンを過ごせたなと思っています。
普段あまり接することのないゲームのバックエンドの実装でしたが、難しすぎない難易度に感じてもらえたようです。皆さんに楽しんでいただけて講師一同も嬉しく思っています!
また要望として、「グループワークやチーム制作をもっとやりたい!」という意見を多く頂きました。
この点はぜひ次回以降のインターンシップに反映させていきたいと思います!
このインターンシップをきっかけに、エンジニアとして社会に出て働く。というイメージをつかんでもらえたら幸いです。
今後もサーバーインターンシップは継続して開催する予定です!次回は春の開催を予定しています。今回は参加が出来なかった方は、ぜひとも次回はご応募下さい。
詳細な情報は随時、公式X にてお知らせします!
☆インフィニットループは一緒にインターンシップを盛り上げてくれるエンジニアを募集しています
採用情報は こちら 。ご応募お待ちしております!