こんにちは。2週間、インターンとしてゲーム開発現場のクライアントサイドに参加させてもらった伊藤圭佑です。

私はこれまで文化祭のゲーム制作や個人オンラインゲームの運営開発などを行ってきましたが、何十人という人が協力して 1つの大きなゲームを作るといった経験はありませんでした。

そんな中、今回はゲーム開発の現場に入り、どんなことをして何を感じたかをお伝えできればと思います。

1日目

入社手続きと自己紹介を軽く行い、昼頃にこれから2週間メンターとして付いて頂く青木さんと顔合わせランチがありました。そして参加させて頂くプロジェクトがダービースタリオンマスターズ(ダビマス)であることを、このとき知らされました。

ランチ後から部署に配属され、作業が始まります。この日の作業……つまりこのプロジェクトで一番最初にやった仕事はこのゲームを遊ぶことでした!
「遊ぶ」というと何もしてない感じですが、このタイミングでプレイする時間が十分あったおかげでダビマスがどんなゲームなのかや楽しいポイントがどこなのかをしっかり共有できた上でプロジェクトに参加することができたと思っています。プレイは大事。
ちなみに15時ぐらいから定時までずっとプレイしていたんですが、最初プレイしたときは絶対攻略Wikiを見ないぞ!と思い進めていたところ、かなり難しく、結局途中からWikiに助けを求めつつ進めていきました。それでも配合を考えながら進めないと優勝できないバランスになっているようで、やり込みごたえのある感じでした。

2日目

この日から、どのような機能を実装するかや、プロジェクトの進め方について共有を受けました。ダビマスチームではスクラムというアジャイル開発の手法を取り入れていて、ホワイトボードをどうやって使っているかや、どのぐらいの粒度のタスクを作ると良いかなどの説明を受けました。

作ることが決まった機能(スクラムなので正しくはストーリー)は”ダビマス公式のYoutube動画をアプリから再生できるUIを作る” という感じの機能でした。この日から朝会に参加し、「今日~~をやります」といって、ホワイトボードのタスクを貼ったり、動かしたりし始めました。

この日の作業としては、主に開発環境の構築と共有とコードリーディングでした。共有はこのストーリーの元々の担当者だった石井さんから受けていました。
使われている言語はC++だったのですが、自分はC++98あたりと思っていたら 、ダビマスではC++11を採用していて新しい機能たちに感動していました。

環境構築の一環として、開発で使っているGitの環境も整えました。これまでかなり簡単にしか使ったことがなかったのでCUIのみで作業してきたのですが、今回はForkを使うことにしました。このときフロントエンドの皆さんがGitクライアントに何を使っているか聞いたところ、tigやForkやSourceTreeなど使いたいクライアントを使っているという感じでした。

3日目

この日からコードを書く作業が始まりました。
この日はデータベース上にあるyoutubeのURLやタイトルのデータ、それらをまとめたグループデータ等をクライアント側に取り込むコードを書き、最初のコミットをしました。

そしてこの日はクライアントのプレイ会というものがあり、それに参加させてもらいました。これはクライアントサイドの人たちが集まってゲームをプレイしてみてゲームに対する理解を深めようという場で、このときは会議室で私のプレイをプロジェクターに写しながらこれは何あれは何みたいなことを話してゲームのわからない部分の理解を深めました。
私はこの日初めて馬のパラメータが何に影響するのかを知りました。

4日目

この日も大きくはデータの取り込み部分に関する作業をしていました。
前日は単にデータ取り込みをしたのですが、この後の作業として要素の存在しないグループを表示しない等の機能を実装するため、そういった機能を実現しやすいように存在するかどうかのフィルターをかけたインタフェースを用意しました。
このコードが15時ぐらいに完成し、初めてリモートにプッシュしました。ダビマスチームではマージリクエストを送るときはクライアントの誰か2人にコードレビューをお願いし、LGTMが1つ以上付いたらマージするという流れでした。これはクライアントの人たち全体で誰がどんなことをやっているのかをなるべく分離せず、かつスピード感を失わないようにするための工夫とのことでした。
私が書いたコードもレビューしてもらい、例えば定数埋め込みに#defineを使わない方が良いという話や、 イベントデータのフラグをクライアント側が持つかリモートで持つかの話などコードの全体の設計の話から細かい実装の話までいろいろな部分にフィードバックを頂きました。

その後色々対応し、17時頃に初めてリモートにマージされました。ChatWorkでめっちゃクラッカー鳴らされてて嬉しかったのを覚えています。

5日目

データの読み込み部分は概ね終わったので、この日からUIの部分に入りました。そのため、UIエディターやデータベースにテストデータを追加するなどの操作方法の共有を受けました。

また、この日にはチームのKPT(Keep Problem Try)があったのでそれに参加させてもらいました。KPTは4グループに分かれ、それぞれのチームでホワイトボードにKPTを付箋で貼っていき話し合いをした後、それらをまとめて他のチームに共有するという流れになっていました。
私もおっかなびっくりいくつかのK/P/Tの付箋を貼り話し合いに参加しました。

そしてもう1つ、この日にはスプリントレビューがありました。ここ2週間のプロジェクトの成果などを、プロジェクトに関わる人たちが集まり広い会議室で共有するレビューです。こちらにも参加させてもらい、ゲーム運営していくにあたって、どういうことをどのぐらいのペースでやっているのか、ゲームを回していくのにどのようなことをしているのか、ここで知ることができました。

6日目

この日から本格的にUI部分の実装に入りました。
実装できる方法がいくつかあり、どれを使うと最も良いかの話をまず石井さんとした後、それをバリバリ実装していくという形でした。

また、この日にはスプリント計画があり、次の2週間の間にやるストーリー出しやそれらの工数出しを行いました。

7日目

この日はデータベースのデータにテストデータを追加しました。
また、同時に動画選択一覧画面の実装も終えることができました。

この日は、前日に私が梅酒が好きだと言っていた事から、メンターの青木さんが突発的な飲み会を企画してくれ、クライアントとサーバーの方々で飲み会に行って、しこたま梅酒を飲みました。めっちゃ美味しかったです。この時に皆さんがどんな方なのかということを、かなり知れたかなぁと思います。

8日目

この日は各動画のダイアログ表示機能の実装を行い、その殆どを終わらせました。
また、イラストのデータやUIのデータのレイアウトをどうするかの話をデザイナーの方々と行い、作っていくレイアウトのすり合わせを行っていました。


この日データを最新するために本番環境と同じデータを持ってきてしまったため 、翌日少し問題になりました。

9日目

この日はタップで動画が再生される機能への関連付けを行い、最後のプッシュをしました。

コードレビューをしてもらうとき、前日にブランチの中でマージしてしていたためコミットログがかなり汚くなってしまいました。石井さんと話した結果、Cherry-pickもかなりめんどくさい事になっていたので一旦そのまま行こうということになりました(一応差分表示は普通なので)。
次からRebase使っていきます。

この日の17時過ぎぐらいにコードレビューの対応が終了し、今回最後のマージを行ってもらいました。
そして最後にビルドして実機テストを行い、それをデザイナーやプランナーの方々に見せに行ったところどうも挙動を間違えて作っていたことに気づき急いで修正しました。

これの対応が19時半ぐらいに終わり、20時にマージされ完全に作業が終わりました。

10日目(最終日)

最終日は主にこの日の午後にあるプレゼンの資料作成と、この記事の下書きを作成していました。
その途中でもう1度KPTに参加させてもらいました。

16:30から30分間これまでお世話になったクライアントやサーバーの方々の前でプレゼンをし、インターンのすべての日程が終わりました。

インターンをまとめて

この2週間は「ドリコムに新卒として入るとどうやって働くことになるのか」を一番学べたと思っています。青木さんにも同時期に入った新卒の方と対応は全く変えていないと言われ、本当にそうなんだと思いました。インターン生という形でお客様扱いされるのではなく、がっつりプロジェクトに入れたのは本当に良かったと感じました。

また、毎日用意していただいたランチ会は参加した人がなりたい方向性や聞きたいことが聞けるような人とご一緒できるように取り計らって頂いていて、例えば私はエンジニアからプランナーに進みたいなと考えているのですが今回のランチではそういったエンジニア->プランナーやプランナーとして働いている方とも話すことができる機会を頂き、インターンとして参加した担当部分以外でもものすごく多くのことを知ることができ大変勉強になったインターンでした。

このインターンに参加することで、ドリコムという会社が
  • どういったところで
  • どんな技術を使っていて
  • どんな雰囲気で
  • 自分の思い描いていることができるかどうか

が全て分かります。また、内部のコードを読む時間はしっかりあるので、すごく上手いことできた基盤なども読め、技術力の向上にも繋がります。分からなかったらすぐに聞ける環境でもあります。

インターンの選択肢としていかがでしょうか。