CA Tech Dojo体験記

インターン詳細情報

開催日: 2020年8月24日(月)~2020年9月11日(金)

詳細ページ

インターン内容

今回のインターンで扱ったゲームはコインを取得し、スコアを競うテンプルランのようなゲーム(ゲームプレイ動画)です。そのゲームのサーバーサイドのプログラムを書くインターンを三週間やりました。既に完成しているゲームのクライアント側と自分で作成したサーバーサイドのプログラムをつなぎ合わせて行くイメージです。ドキュメントが用意されていて、それに従ってAPIを作成するとゲームに機能が増えていきます。最初の1週間で基本課題であるランキングやユーザー情報取得、ユーザー作成APIなどを作成し、その後に各自発展課題に取り組んでいくという流れです。今回は自分はレイヤードアーキテクチャとテストの導入に取り組みました。

応募した経緯

  • Goでバックエンドの開発をやってみたい
  • 体系的にサーバーサイドの知識をつけたい
  • ゲーム開発をやったことがないので、体験してみたい
  • サイバーエージェントの社風について知りたい

学んだこと

  • レイヤードアーキテクチャについて
  • Goでのテストの書き方
  • ゲーム開発の技術的な面白さ
  • キャッシュの扱い
  • 様々なライブラリ
  • パフォーマンス・チューニングを行う手順
  • サイバーエージェントでの働き方

反省点

無理に共通化しなければよかった

一度一つの関数に書いてから、その後に中身を少しずつ切り出していくような流れでこれからは開発していきたい。最初に変に共通化したせいで、後々修正するのが大変だった。また、プログラムを書き始める前にコメントとして手順を書いておき、それに従ってプログラムを書くのが自分に合っていることに気づいた。これからは最初にまずコメントを書き、それに従いプログラムを書く、その後にリファクタする流れで開発をしていこうと思う。

最初からちゃんとビジネスロジックをどこにまとめておくかというのを意識して書けばよかった

今回は最初に与えられたプログラムはMVCを崩したようなアーキテクチャだった。ビジネスロジックをモデル側に持たせるか、コントローラー側に持たせるかを最初の時点で決めてなかったのが良くなかった。後からレイヤードアーキテクチャを導入するのが大変だったのと、途中開発が遅くなってしまった。最初からどこの層に何を置く(どういう責任をもたせる)かをこれからは意識して書こうと思う。

アーキテクチャの勉強をする時に、手をあまり動かさず読んで理解しようとしていたが、自分にとってこの学び方は効率があまり良くなかった

手を動かし始めたら急に理解が進んだので、ある程度の段階で本や説明を読むのは辞めてプログラムを書いたほうが自分にとって効率よく学べるように思えた。これからは手を動かしながら理解する方向で学んでいこうと思う。

基本課題、レイヤードアーキテクチャの理解・導入に時間が多くかかった結果、今回はパフォーマンス・チューニングに取り組めなかった。これに関してはとても残念ではあるが、失敗自体が学びであると肯定的に捉え、悪かったところは反省し、次に開発するときは同じような失敗をしないようにしたい。今回取り組みたかったけど、時間的に取り組めなかったことに関しては、これから学習をする。また、今回学んだことはとても大切なことばかりなので、自分が学んだことを記事としてまとめて更に理解を深められたらなと思う。

感想

自分で考えて、本当に詰まったら質問するという流れでインターンは進んだ。質問する時にはメンターの方からおまけの関連情報を出して頂けたり、実際の業務だとどうしているかについてもお話し頂けて、とても勉強になったし、新たな興味が湧くことがとても多かった。好奇心から様々な質問をしたが、それぞれの質問に対してめちゃくちゃ誠実に丁寧に答えて頂けて、毎日が刺激的でとても学びにもなり、楽しかった。もっと前にこのインターンに出会えれば良かったなと凄く思う。

最後になりますが、メンターや運営の方々、三週間もの長い期間業務もある中、手厚いサポートをどうもありがとうございました。今までで一番楽しく、学びになったインターンでした。元々フロントエンドエンジニアとして今後のキャリアを歩んでいこうと思っていたのですが、今回のインターンで気持ちが大きく変わり、サーバーサイドエンジニアとして働きたいです。ただ、まだまだ足りない知識が多いので自分のペースで少しずつ毎日学んでいきたいと思います。