初めまして、24年新卒エンジニアのたいたいです。
現在サーバーエンジニアとしてゲーム開発を行なっております。
私の業務経歴について、
学生時代はクライアントとして経験を積んできたため、入社から1年間はクライアントとしてゲーム開発を行いました。
その後、未経験のサーバーへの職種変更を希望し、経験を積みながら約1年ほどゲーム開発を行ってきました。
今回は、この経験で得られた学びについて簡単にご紹介したいと思います!
サーバーに少しでも興味がある方の参考になれば幸いです!
目次
なぜサーバーへ職種変更?
はじめに、なぜ私がサーバーへ変更したのかというと、
「単純に興味があったから」というのが最も大きな理由です。
クライアントとして業務していると、仕様相談やAPIなどでサーバーとやり取りを行います。
私はそのやり取りの中で、「あるデータを送ったら処理された違うデータが返ってくる」くらいしか理解していなかったので、
クライアントから飛び出していったデータがどのような旅をして返ってきたのか知りたくなったわけですね。
(※他職種で自分の可能性も試してみたい、サーバー知識がある方がクライアント業務が捗りそうなどの理由もあります)

※最初は、データの保管先にアクセスしているくらいの認識だった。
サーバーになって得た学び
サーバーに変わって業務を経験し、
新しい言語やツールの使い方などの技術を習得していく中で、非常に多くの学びがありました。
特に良かったことは「視野が広がった」と感じたことです。
私はジョブチェンジして、サーバー側からの視点という武器を手に入れました。
これにより、両方の視点から実装を把握することができ、より正確な実装を把握することができるようになりました。

例えば、不具合調査系のタスクでは、まず、不具合と思われる発生箇所の仕様と実装を把握するところから始まりますが、
クライアント側だけではサーバー側の正確な実装が分からないため、分かる範囲で調査を行い、簡単な確認でも内容をまとめて依頼して、結果を待っているというのが至極当然の流れでした。
これが両方の視点を持ったことで、必要な箇所をサッと自分で確認でき、クライアント側とサーバー側の実装を仕様と照らし合わせて、どの部分にズレがあって、どちらの実装が正しいのか見ることができました。
また、データの扱いや認識が一致していそうかを全体を通して把握することもでき、不具合が起きる流れも特定できるようになりました。
他にも、逆にサーバー側だと、どのような画面で、どのような操作をしてデータが送られてくるのか分かりにくかったりしますが、Unityを使用すると画面を操作しながら、APIログの確認ができて意外と便利だったりといった発見もありました。
クライアントとサーバーの違いについて
サーバーへ変わったことで初めて分かった、クライアントとの違いも大きな学びの1つでした。
個人的な印象になりますが、いくつか簡単にご紹介いたします。
〜 業務の流れ 〜
クライアントで業務をしていた際は、設計を考え、動くものを作成し、プランナー/デザイナーの方に見ていただき、フィードバックを受けて修正し、より良くしていくといった流れで作業を行いました。
これがサーバーの業務では、フィードバックを受けるという過程が減り、代わりに設計とテストにかける時間が増えました。特に設計が重要で、マスタとコードの両方を考え、その状況に合った設計を考える必要がありました。
〜 データの扱い方 〜
クライアントでは、データを取得し、処理し、画面に表示したり、ユーザーの操作したデータを送り、結果をもらうなど自分が中心になってデータを扱っていました。
これがサーバーでは、いつ/誰が/どのデータを取得してもその状況で正しいデータを返せるようにするという、取得される側の立場でデータの扱い方を考える必要があり難しく、セキュリティーや不具合にも直結するため責任も伴うことが分かりました。
〜 実装の進め方 〜
クライアントでは、文字、画像/動画、アニメーション、画面遷移、ボタン、POPUPなど表示周りの機能が中心で、それらの要素の組み合わせ方や状態遷移を考えながら処理する必要がありました。
これがサーバーでは、ほとんどデータの扱いのみを考えればよく、クライアントよりもスッキリとした実装になっていると感じました。
サーバー負荷、データ処理時間、ログなどについても考慮する必要はありますが、標準的な処理規模であればデータ構造やロジックに注力して作業ができるのはエンジニアとしては嬉しかったです。(実装中によく見る画面が、動く華やかなアーティストさんから無機質な文字や数字になったのは少し残念)
〜 開発環境 〜
開発時に使用するツールやサービス、言語など開発環境も大きく変化しました。
クライアントでの主な開発はUnityを使用して、言語はC#で行ってきました。
サーバーになってからは、主な開発はGCPを使用するようになり、言語もGoを新しく学びました。私は、Go言語を何も知らない状態からのスタートでしたが、C#に比べてシンプルに処理を書くことができ、学びやすい印象でした。
また、よくサーバーと言われてイメージするようなコマンドライン操作や、データベースでデータ操作するためのSQLにも頻繁に触れる機会があり、勉強して使えるようになりました。(うれしい)
新しく学んだツールやサービスの一例も以下に記載いたしますので、参考になれば幸いです!
【新たに学んだツール、サービス例】
- GCP(Spaner、CloudBuild、CloudRun、BigQuery、firebase、IAM、CloudStrage、SecretManager、Artifact Registry…)
- AWS(S3、CloudFront)
- Docker
- Postman
- Jenkins など
最後にひとこと
約1年間サーバーを経験した感想ですが、単純に知識と出来ることが増えてとても成長できたと実感しました!
特に最初は新しいツールやサービスに触れる機会が多く覚えることも多いですが、その分使いこなせるようになった時の達成感はかなり高かったです。
正直なところ、サーバーはデータの管理をするだけでつまらなそうといった印象がありましたが、実際経験してみると業務の幅も広く、対応している全ての業務が線で繋がって見えてくるため、新しい視点を持つことは結構面白いです!