インフィニットループ 広報ブログ

2024年04月09日 (火)

著者 : vjsigsig

【2024年3月】『ゼロから学ぶWebプログラミング5daysインターン』を開催しました!

こんにちは!vjsigsigです(`・ω・´)ゞ

2024年3月25日〜29日 の5日間で『ゼロから学ぶWebプログラミング5daysインターン』を開催しました。

ご好評のガチャ抽選実装はもちろん、ガチャで手に入れたカードを利用した戦闘システムのプログラミングを体験いただきました!

今回の取り組みピックアップ

開発環境はクラウドで構築

  • 接続先のホストと秘密鍵を参加者に貸し出す方式としました
  • この変更により、Windows側でLinux環境をエミュレートする仕組みを構築する時間を節約する事が出来ました

貸出サーバーとエディタはVSCodeでオールインワン

  • SSHクライアントは VSCodeRemote – SSH プラグインを使用しました
  • 改めてSSHクライアントを導入する事無く、ターミナル操作とアプリコードの改修を1つのツールで完結させる事が出来ました

実装コードはGitHubのorganizationに招待

  • インフィニットループのorganizationにインターン生を招待し、実装コードの相互レビューを行いました
  • より現場に近い実装を体験できるよう、インターン生同士や講師からコードレビューをもらいながらプログラムの修正・マージ作業をスクリプト化。深いGitの知識は必要なく、実装体験を進行することができました

インターンシップの全体進行

例年のインターンと同様、SlackZoom の両ツールを使用した講義形式のハンズオンとなりました。
Slackでは自分専用のチャンネルが存在し、相互に現在進行中の報告及びエラー内容を貼り付けてZoomと組み合わせてヘルプを行うなど、実際のゲーム開発と同様の進行を体験頂きました。
このようにスタンダードな開発スタイルを体験し、自分が就職後会社でどのように過ごすのか。ざっくりとしたイメージが出来たのでは無いかと思います。

サーバー初期構築

初期構築マニュアルをブラウザで参照しながら進めることで、サーバー構築が完成する設計としました。
貸し出したEC2インスタンスに VSCode で接続し、コマンドラインを駆使して初期構築を進行します。
手順書の内容と講師の補足説明を聞きながら構築する事によりコピペ作業だけではなく、今自分が何を行っているのか把握しながら構築を行うことが出来ました。

構築内容ピックアップ

  • timedatectlコマンド を使用したタイムゾーン設定
    • UTC -> Asia/Tokyo へ変更
  • yumコマンド を使用したパッケージアップデート
  • Apache を使ったWebサーバー構築
    • アプリ自体はDockerを使用するため、デモンストレーションのみで使用
    • ブラウザからページの閲覧を確認次第、デーモンをstop
  • Docker の導入
    • Docker公式 の手順を参照しながら導入しました
    • 英語のドキュメントを読み解きながらツールをインストールという、つまづきがちだけど大事な経験です
  • usermodコマンド を使用してユーザーグループ変更
    • ログインユーザーをdockerグループに所属する事でdockerコマンド実行に管理者権限を不要とする
  • Git の設定
    • ユーザー名やメールアドレスなどのグローバル設定
    • GitHubと連携するための鍵ペアの生成と紐付け
  • 実装コードの導入と初期設定
    • GitHubからソースコードのclone
    • docker-compose を使用したアプリケーションの立ち上げ
    • composer を使用してPHP依存ライブラリを導入

アプリケーション実装: 課題を抜粋して紹介

夏インターンの際に使用したガチャシステムと同様、今回の戦闘システムでもSlim Frameworkを使用しました。
基本的なレイヤ・ディレクトリ設計は完了しており、その設計に沿って課題に沿ったロジックを作っていく形式です。
各種課題に対応するユニットテストをクリアする事を課題のクリアとしました。
数ある課題の中の一部を紹介します!

ダメージ計算処理の実装

ダメージ計算処理とクリティカル処理の実装例
  • キャラクターが与えるダメージを一定範囲内のランダム値とする。
  • 改修前は設定された攻撃力そのものが与えるダメージとしていました。一般的なRPGで多く採用されているダメージブレをこの課題で達成しました。

クリティカル処理の実装

  • 一定の確率でキャラクターが与えるダメージを一定割合増加させる。
  • ラッキーにより大ダメージを与えられるクリティカル処理の実装を行いました。RPGでもほぼ必須の処理ですね。

敵キャラクターが一定の体力を下回ったら回復する処理の実装

回復量のブレを表現する実装例
一定の体力を下回ったら回復処理を行う実装例
  • 毎ターン敵キャラクターが自分のHPを参照し、特定の割合を下回ったら回数制限付きの回復処理をする。
  • この実装により回復前に多くのダメージを与えて一気に倒すか、制限回数を枯渇させる持久戦か。など戦略の幅を広げる事が出来ました。

MPを使用する魔法攻撃の実装

  • 用意している1種類の魔法攻撃を、通常攻撃より強い攻撃として実装する。
  • どういう魔法効果とするか、仕様を考えて実装するという工夫を凝らした課題となりました。
  • 確定クリティカル攻撃とするなど。
  • 用意していた課題の中盤、そろそろ皆さんPHPに慣れてきた頃で楽しむ余裕が出てきました。

新規キャラクターの追加

今回のインターン生の1人、好きなキャラクターを描き起こしてカードを追加してくれました!
  • 新規でプレイヤーまたは敵側のキャラクターを追加する。追加するモンスターの性能は各自で決める事とした。
  • 上記で紹介したように、オリジナルのキャラクター画像を作成された方もいました!

GitHubを利用した相互コードレビュー

実装したコードのレビューは講師からだけではなく、参加者同士でも積極的に行われていました
実際の現場でも先輩・新人の区別なくコードレビューを行う事が多く、皆さん最初は緊張しながらコメントを投稿していましたが、徐々に慣れてきてお互いの意見を尊重しながらレビューが進行し、現場顔負けのとても良い雰囲気で実装を行うことが出来ました。

成果発表会

最終日はインターン生全員が、 インターンを通して身に付いたこと、苦労したこと、追加したオリジナルの要素紹介 のテーマで成果発表を行いました。
皆さんスライドを用いて素晴らしい発表を頂きました!一部抜粋して紹介します。

インターン生が実装したお昼ゴハン紹介

恒例のインターン生お昼ゴハン紹介。今回は自炊が思いの外少なかった…!

最後に

5日間のリモート開催でしたが、課題が一つも終わらない、全くわからず途方に暮れている。という参加者の方はおらず、日を追うごとに皆さんが楽しんで実装を進めている様子がZoom越しに伝わってきました。

このインターンをきっかけに、エンジニアとして社会に出て働く。というイメージが出来たのではないかと思います!

皆さんが今後エンジニアとして活躍するための一助となれた事を講師一同嬉しく思います!

今後もサーバーインターンシップは継続して開催する予定です!次回は10月の秋インターンの開催を予定しています。
今回は参加が出来なかった方は、ぜひとも次回はご応募下さい。
詳細な情報は随時、公式X にてお知らせします!

インターン生Kさんに描いていただきました! 5日間お疲れ様でした!

☆インフィニットループは一緒にインターンシップを盛り上げてくれるエンジニアを募集しています
採用情報は こちら 。ご応募お待ちしております!