新卒1年目の振り返り

この投稿は [グレンジ Advent Calendar 2021](https://qiita.com/advent-calendar/2021/grenge) の 24日目の記事です。
クリスマス・イヴですね。

こんにちは、[株式会社グレンジ](https://www.grenge.co.jp/)でサーバーサイドエンジニアをしています。
新卒の島田（[@konnyaku256](https://twitter.com/konnyaku256)）です。

私は、今年4月に株式会社サイバーエージェントへ新卒で入社しました。
新卒研修のあと、SGE（サイバーエージェントのゲーム事業部）へ配属となり、現在は株式会社グレンジでスマホゲームの開発・運営を担当しています。

まだ1年経っていませんが、これまでにたくさんの経験や学びありました。
この記事では、新卒でエンジニアとして入社してからこれまでにやったこと、学んだことを振り返りたいと思います。

新卒エンジニアの働き方の事例を知っていただければ嬉しいです。

# 配属希望理由と働いてみた感想
まずは、配属希望理由と実際に働いてみた感想を書きたいと思います。

希望理由
私はリアルタイム通信を使った多人数オンライン対戦ゲームに興味がありました。
グレンジでは、関連技術として、[OpenMatchをプロダクションに採用した実績](https://youtu.be/HbAowQinpFk)があり、開発してみたい、技術を学びたいと思いました。

感想
OpenMatchを使ったプロジェクトはクローズしてしまいましたが、社内に詳しい人が数人いて、学びが多いです。
また、開発・運用経験の豊富な人が多く、日々強い人たちのとなりで運用を学べているのがいいところだなと思っています。

# 1年間でやったこと
大まかに次にような流れでいろいろ担当させていただきました。

4月　入社 / 全体研修
5月　SGE配属 / SGE研修/ 5月末に子会社配属
6月　6時間以内の小規模開発 / エンジニアLT会の運営開始（毎月開催）
7月　お知らせ画像の運用改善
8月　お知らせ画像の運用改善
9月　CDの改善 / 管理画面の機能改善 / アプリの既存機能改修
10月 外部連携用APIの開発
11月 ローカル開発環境の構築
12月 デバッグ機能の改善 / プランナー業務の効率化 / アドベントカレンダーの運営

# お知らせ画像の運用改善（7月〜8月）
担当ゲームの既存のリリースフローでは、アプリケーションサーバーとゲーム内のお知らせで使用する画像のリリースが分離されておらず、双方のリリース物が出揃うまでリリースできない問題がありました。
これは本来、必ずしも同時にリリースする必要はなかったため、上記画像のファイル構成やデプロイの仕組みを見直し、サーバーリリースと上記画像のリリースフローを疎結合にしました。
内容としては、内製のデプロイツールやJenkinsのデプロイジョブを修正しました。
また、画像のリリースについては非エンジニアでもリリースができるようにするため、専用のSlack Appを実装して導入しました。
前提として、既存の使用されている画像ファイルの一覧やデプロイフローについて細かく調査したり、開発環境やステージング環境に変更を加える前にテスト環境を用意したりする必要があり、想像よりも多くの項目を把握しておくことが求められましたが、このタスクを通じてソフトウェア開発の基本を学ぶことができました。

# ローカル開発環境の構築（11月）
このタスクでは、既存のローカル開発環境（Ansible/Vagrant構成）が抱えていた構築や変更のしづらさを解決するため、Docker/Kubernetes構成での再構築を行いました。
これによって、既存の環境よりも構築が容易になり、また、変更に強い構成にすることができました。
PHPやgem,npmなど指定したソフトウェアのバージョンをインストールしたり、ソフトウェアの依存関係を解決するのが難しかったですが、NginxやRedisなどのミドルウェアやKubernetesの理解を深めることができ、個人的にかなり面白いタスクでした。
※実はWindows環境での動作に問題があり、完全に移行することはできていません。

# エンジニアLT会の運営
同期の[gamu](https://qiita.com/gamu)と協力して、社内のエンジニア向けLT会を月1で開催しています。
6月に第1回を開催し、これまでに計6回、のべ21人の方に発表していただくことができました。
特定の技術をテーマに知見を共有したり、趣味を発表して交流促進につなげたりしています。

# アドベントカレンダーの運営
この記事を投稿している、[グレンジ Advent Calendar 2021](https://qiita.com/advent-calendar/2021/grenge) です。
こちらも同期の[gamu](https://qiita.com/gamu)と協力して運営しており、自分たちで投稿するのはもちろん、執筆依頼をしたり、記事の共有をしたりしています。
昨年以前もアドベントカレンダーはありましたが、今年は投稿数からも盛り上がりがよくわかると思います。

# 普段の業務例
普段は次のようなスケジュールで業務を行なっています。

10:00 出勤
10:00-10:05 チームの朝会
10:30-11:00 プロジェクトの全体朝会
12:30-13:30 昼休憩
15:00-16:00 次リリースバージョンのレビュー会
16:00-16:15 サーバーのリリース作業
18:00-18:30 チームの夕会 / KPT
19:00 退勤

主な作業内容の比率と内訳は次のような感じです。

エンジニアリング（6時間）
・担当機能の開発
・リリース作業
・障害対応

ミーティング（2時間）
・朝会 / 夕会 / KPT
・レビュー会

# 業務で印象に残っているエピソード
10月に行なった、外部連携用APIの開発です。
外部サービスから実行されるAPI（内容としては、ゲーム内アイテム付与機能）の開発を行いました。
このタスクでは、社外のエンジニアの方とコミュニケーションを取りながら開発する経験ができました。

# 1年間の目標と達成度
私は1年間の目標として、「DevOpsで課題を50個（1週間あたり1個以上のペース）解決する」ということを設定していました。
配属当初からDevOpsに力を入れたい、と宣言しており、タスクの大小はありますが、これまで担当したタスクの8割程度はDevOps関連のものになっています。
ただ、2021/12/24現在での達成度は、42%（現時点で21/50個解決）で、これからもっとペースを上げないと達成は厳しい状況ではあります。

# 配属後に成長したところ
調査・設計・見積もりについて細かく考える意識がつきました。
大規模なタスクになればなるほど、調査・設計・見積もりが重要になってくるので、見積もりを超えてしまわないためにどうしたらよいか考えるようになりました。

また、運用について考えるようになりました。
企業のプロジェクトは人、お金、コードベースなどあらゆる規模が大きく、やるべきことはたくさんありますが、その中で実際にできることは限られていました。
緊急度や重要度から次にやるべきことは何かを考えるようになりました。


# まとめ
いかがだったでしょうか。
新卒エンジニアの働き方の事例を知っていただければ嬉しいです。

明日はついにアドカレ最終日、[gamu](https://qiita.com/gamu)さんの記事が投稿される予定です。 お楽しみに！