🙆‍♀️

ゲームエンジニアからWebエンジニアになってみた

に公開

初めまして、PortalKeyの渋谷です。
私はゲームの専門学校を卒業後、7年間ゲームエンジニアとしてキャリアを積んできましたが、この度思い切ってWebエンジニアに転職し、現在はPortalKeyで新たな挑戦を続けています。
約半年ほどWebエンジニアとして働いてみて感じたこと、ゲーム開発との違いや新しい気づきについてお話ししたいと思います。この記事が、キャリアに悩むゲームエンジニアの皆さんに少しでも役立てば幸いです。

はじめに

まず自分自身の経歴から話したいと思います。
冒頭でも少し触れましたが、私はゲームの専門学校を卒業後7年間ゲームエンジニアとしてキャリアを積んできました。主にUnity(C#), UnrealEngine(C++)などを用いてゲーム制作に携わり、後半ではネットワークゲームの開発にも少し関わりました。

ゲーム制作そのものもとても楽しかったのですが、次第に「開発環境を整えること」に興味が湧き、合間を見て開発ツールを作るようになりました。その中で出会ったのがElectronです。
ElectronはHtmlで書いたものをデスクトップアプリケーション化できるツールで、開発環境ツールのUIを作るのにとても便利でした。そこでWeb開発の面白さに触れることができました。
そうした中でいくつかのタイミングが重なり、私はWebエンジニアへとキャリアチェンジする決断をしました。

プログラミング言語

恐らく読んでいる方の大多数が気になるのは言語の違いですよね?
まず自分が使用していた主な言語と今使用している言語を書き記します。

ゲーム開発で用いた言語

  • C# (Unity):主にゲームロジックやツールの実装に使用
  • C++ (Unreal Engine):主にゲームロジックやツールの実装に使用
  • Python (Unreal Python, Jenkins):スクリプト自動化やツール開発
  • VBA (Excelのマクロ):データ管理や自動化ツールの作成

Web開発で用いる言語

  • HTML:UIの構築 (実際のところReactのおかげで学習コスト減)
  • TypeScript : JavaScriptに型を追加した言語、フロントエンド開発に使用
  • Go : バックエンド開発に使用 (噛めば噛むほどC言語系の味がする)

言語の違い、どう乗り越えた?

「全く被っていない…」「今までの知識が活かせないのでは…」と感じた方も多いと思います。実際、自分も最初はそう思いました。
ですが、いざ触れてみると「あれ?これ一緒じゃん」「ん?これも……」といった具合に、意外とすんなり溶け込むことができました。

その理由としては、以下の点が挙げられると思います:

  1. TypeScript:型定義があるため、C#やC++に近い感覚で扱えた
  2. Go:C言語系の派生であり、ロジックや構文に馴染みやすかった

結局、ひとつの言語を極めていればそこまで怖がる必要はないというのが、半年間働いてみた結論です。

じゃあ他の言語だとキツいの?

正直、ゲーム開発でコンパイラ型言語しか使っていない場合、スクリプト言語に慣れるまで少し苦労するかもしれません。
そこで私がオススメしたいのは、Pythonに触れておくことです。以下のようなシチュエーションで始めると良いでしょう。

  • Unreal EngineでUnreal Pythonを試してみる
  • 暇つぶしにRaspberry Piを使ってPythonで遊ぶ
  • 普段シェルスクリプトで書いている処理をPythonで書き換えてみる

この辺にチャレンジして見るとハードルがだいぶ低くなると思います。

通信周り

次に気になるのは通信周りでは無いでしょうか?
今回は自分の経験を元に感じた事を書かせていただきます。

ゲーム開発時の通信の知識

Unreal Engineのネットワーク機能を使い、リアルタイム通信を実現する対戦ゲームを開発していました。
Unreal Engineには以下のような強力な機能があり、比較的スムーズにネットワーク機能を実装できました:

  • レプリケーション:サーバーとクライアント間でのデータ同期を自動化する機能。
  • RPC(リモートプロシージャコール):サーバー側で処理を呼び出す仕組み。

これらを活用すれば、クライアント側とサーバー側での実装を効率的に進めることができ、ネットワークの仕組みを意識しつつもゲームロジックに集中することが可能でした。

Web開発で必要な通信の知識

Web開発における通信周りの知識は、ゲーム開発と比べて少し違った視点が求められました。以下が主に使用している技術です:

  • API通信
    サーバーからデータを取得するためのHTTPリクエスト。
    例えば、フロントエンドでデータを表示する際、APIを通じてリクエストを行い、レスポンスでデータを受け取ります。
    必須知識になります。

  • WebSocket
    クライアントとサーバー間でのリアルタイム通信を実現する技術。ゲームの通信に似ています。
    PortalKeyではAPI通信では行えないリアルタイム通信が必要な為使用しています。
    普通のWeb開発では必要ないケースが多い気がします。

果たして知識は活かせたのか?

自分程度の浅い知識では学び直しでした。
0から環境構築を行うのであればかなりしんどいと思いますが、自分のように整った環境に入るのであればそこまでキツいとは思いません。
特にAPI通信だけで済むのであればすぐに慣れると思います。

え、なんか簡単に移行できそうじゃない?

恐らくそう思いましたよね?ではここからは自分が辛いと感じた事を書いていきます。

1.情報が散乱しすぎ

ゲーム開発を行う時は、
キャラクター動かしてみたいなぁ
「UE4 Character Movement」 検索~
https://dev.epicgames.com/documentation/ja-jp/unreal-engine/setting-up-character-movement

UI実装してみたいなぁ
「UE4 Widget」 検索~
https://dev.epicgames.com/documentation/ja-jp/unreal-engine/creating-umg-widget-templates-in-unreal-engine

のようにまぁとりあえず最初ここ見ておけばいいか、がありますよね?
もちろんWeb側もライブラリはあるのでそのページを見ればいい…それはそうなのですが…
HTML, css辺りは歴史がありすぎて同じ挙動をするのに書き方のお作法が沢山あります。
なので調べれば調べるほどみんなが違う事を書いてる…なんてことが…
最初は恐らくめんどくさくて仕方ありません…

2.テストコードって…なに…?

自分、ゲーム開発でテストコード書いたことなかったです…
現状の開発ではGoでサーバ側の処理を書く際、本番同様の環境を用意しサンプルデータを渡す事で正しい値が返ってくるか、というチェックを実装毎に書きます。
こちらも最初はめんどくさくて仕方ありません… (自分は今でもめんどくさい…)

3.エラーの対処

サーバがエラー1つで停止したら大問題です…
「エラーでクラッシュしちゃった、まぁ再起動してね」
なんて言ってられません。
ここの扱いの違いにも戸惑いがあると思います。

さいごに

ゲームエンジニアからWebエンジニアへの転職は、想像しているほど大変なものではないと感じています。
設計やロジックの「考え方」、問題解決の「対応力」はどの分野でも通用するスキルです。エンジニアとしての経験は、分野が変わっても必ず活かせます。

もし「自分も転職したいけど、うまくやれるだろうか」と不安を感じている方がいれば、ぜひ一歩踏み出してみてください!

次回は技術的な内容にフォーカスした記事を書いてみたいと思いますので、転職したてのWebエンジニアがどんなことをしているのか気になる方は、ぜひフォローをお願いします。

ではまた👋

PortalKey Tech Blog

Discussion