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

2023年09月15日 (金)

著者 : vjsigsig

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

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

2023年8月21日〜25日の5日間『ゼロから学ぶWebプログラミング5daysインターン -エンジニア志望だけど5daysインターンでガチャとか戦闘とか作ってたら完全に理解した話する?-』を開催しました。

今回は初のリアル開催となり、より講師と近い距離でサーバープログラミング体験を行う事が出来ました。

また、題材も更に幅広く実装体験を頂くため過去好評頂いていた ガチャ実装戦闘シミュレータ を合体させた題材としました!

取り組みピックアップ

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

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

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

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

  • GitHubにインターン生を招待し、インターン生皆さんが実装したコードのレビューを講師やインターン生同士で相互に行いました
  • 例年よりも多くの実装課題を用意した事により、お互いのコードレビューがより重要に!

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

今回のインターンはリアル開催のため、口頭での質問やインターン生同士で相談しつつ、現在の進捗や知見共有のために Slack を使用した形式のハンズオン。

Slackでは自分専用のチャンネルが存在し、相互に現在進行中の報告及びエラー内容を貼り付けてヘルプを行うなど、実際のゲーム開発と同様の進行の体験を用意しました。

このようにスタンダードな開発スタイルを体験し、自分が就職後会社でどのように過ごすのか。ざっくりイメージが出来るよう工夫しました。

サーバー初期構築

構築手順書をブラウザで参照しながら初期構築が完成する設計としました。

貸し出したEC2インスタンスに VSCode で接続し、コマンドラインを駆使して初期構築を進行します。

手順書の内容と講師の補足説明を聞きながら構築する事によりコピペ作業だけではなく、今自分が何を行っているのか把握しながら構築することが出来ました。

構築内容ピックアップ

  • timedatectlコマンド を使用したタイムゾーン設定
    • UTC -> Asia/Tokyoへ変更
  • yumコマンド を使用したパッケージアップデート
  • Apache を使ったWebサーバー構築
    • アプリ自体はDockerを使用するため、デモンストレーションのみで使用
    • ブラウザからページの閲覧を確認次第、デーモンをstop
  • docker-composeプラグイン も併せて Docker 導入
    • 今回はAmazonLinux2023を使用したため、amazon-linux-extrasコマンドは使用しません
  • usermodコマンド を使用してユーザーグループ変更
    • ログインユーザーをdockerグループに所属する事でdockerコマンド実行に管理者権限を不要とする
  • Git の設定
    • ユーザー名やメールアドレスなどのグローバル設定
    • GitHubと連携するための鍵ペアの生成と紐付け
  • 実装コードの導入と初期設定
    • GitHubからソースコードのclone
    • docker-compose を使用したアプリケーションの立ち上げ
    • composer を使用してPHP依存ライブラリを導入

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

例年のインターン題材と同様、今回のガチャ&戦闘システム題材も SlimFramework を使用しました。

基本的なレイヤ・ディレクトリ設計は完了しており、その設計に沿って課題に沿ったロジックを作っていく形式です。

数ある課題の中の一部を紹介します!

ガチャ抽選処理の実装

  • 百分率の乱数を作ってみよう
  • レアリティの抽選をしてみよう

10連ガチャをRARE以上保証にする

  • 10連ガチャを最低RARE以上が1枚保証されるよう実装する
  • GachaServiceクラスのmultiGacha()が10連ガチャのスタートであるため、ここから処理を追うとわかりやすい

戦闘コマンド回復を作ってみよう

  • 戦闘中の回復コマンドを実装する
  • Services/Battle/Command/ 内の処理を参考にHealCommandを実装する
  • 実装前は回復コマンドを実行するとエラーとなる

ランダムな行動をするAIを作ってみよう

  • ランダムなコマンドを実行する敵AIを実装する
  • Services/Battle/AI/ 内の処理を参考にSimpleAIを実装する
  • 実装前は攻撃コマンドのみを実行する

新規カードの追加

  • phpMyAdminを用いて新規でキャラクターを追加する
  • 追加するキャラクターのステータスは各自自由に決めて良い

成果発表会

最終日、インターン生全員にインターンを通して身についた事、苦労した事、追加したオリジナル要素を主なテーマに成果発表頂きました。

最後に

今回は初めてインターン生をオフィスにお迎えして開催となりました。オフィスでの開催はインターン生同士や講師とのリアルなコミュニケーションを行い進行する事で例年よりも進行がやりやすく感じました。

5日間という短い期間でしたが、今回も課題が全く終わらないという参加者はおらず、最終日は全員が「時間が足りない!」と自らコーディングを楽しんでいる様子が伝わりました。

このインターンをキッカケでサーバーサイドプログラミングに改めて興味を持ち、皆さんが今後エンジニアとして活躍するための一助となれたことを講師一同、大変嬉しく思います!

これからもオフィスでの開催を継続し、参加者に実践的なスキルとエンジニアとしての自信を育てる場を提供していく予定です。

次回は2024年春に開催予定です

今回参加できなかった方も、ぜひ次回にご応募ください。詳細な情報は随時、公式ツイッター にてお知らせいたします!

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