L.L
まずは自己紹介をお願いします。
クロストーク
ベテランエンジニアに聞く!
こだわりと技術論
ベテランエンジニアに聞く!
こだわりと技術論
ゲーム業界歴20年、長年オンラインゲーム開発に携わってきたベテランエンジニア。
過去の開発から得られた確かな技術と、技術へのこだわりを新卒エンジニアがインタビュー!
エンジニアとして活躍するために大切にしていることや、リーダーの役割、Aiming文化についてもお話します。
T.Y
2012年中途入社。複数のプロジェクトに参画後、『陰の実力者になりたくて!マスターオブガーデン』にてリードエンジニアを務め、現在はエンジニアマネジメント業務も担当。
L.L
2017年新卒入社。『幻塔戦記グリフォン~新章~』の開発を経て現在は『陰の実力者になりたくて!マスターオブガーデン』にてリードエンジニアとして活躍中。
T.Y
2012年中途入社。複数のプロジェクトに参画後、『陰の実力者になりたくて!マスターオブガーデン』にてリードエンジニアを務め、現在はエンジニアマネジメント業務も担当。
L.L
2017年新卒入社。『幻塔戦記グリフォン~新章~』の開発を経て現在は『陰の実力者になりたくて!マスターオブガーデン』にてリードエンジニアとして活躍中。
L.L
まずは自己紹介をお願いします。
T.Y
Aimingに入社して 14 年目で、エンジニア歴は 20 年程度です。
学生の頃はゲーム系の専門学校に通っていて、DirectXを使ってPCゲームを制作していました。
前職の会社は新卒で入社をしており、クライアントエンジニアとしてPCのMMORPGの開発を主に担当していました。
L.L
当時のゲーム開発環境は現在と異なっていたんでしょうか?
T.Y
そうですね。今と違ってUnityのような誰もが使えるゲームエンジンはありませんでした。ゲームエンジン自体は存在はしていましたが、非常に高価なものでしたね。何千万も払ってライセンス契約をして大企業だけが使うみたいなものでした。
L.L
何千万ですか?!そんなに高かったんですね!当時はどういう風にゲーム開発を行っていたんでしょうか?
T.Y
今でも自社エンジンを使ってる会社もあると思いますが、当時は各会社で独自のエンジンを使うのが一般的だったと思います。その時に働いていた会社では大規模なものではありませんが自社のライブラリーがあり、それを使って開発していました。
L.L
Aimingに入社されたきっかけはなんでしょうか?
T.Y
当時はスマートフォン向けにゲームの普及が始まった頃で、その開発に興味がありました。その中で、Aiming がスマートフォン向けのオンラインゲームを開発している企業ということを知り、入社を決めました。
L.L
入社って2012年ですよね?
私は当時大学生でした!確かに当時はスマートフォンで遊べるゲームが流行りはじめたころでしたね。Aimingに入社後は何の開発に携わられたんですか?
T.Y
最初は『幻塔戦記グリフォン~新章~』、その後は『ゲシュタルトオーディン』、『World of Demons – 百鬼魔道 -』の開発にクライアントエンジニアとして携わりました。
そして『陰の実力者になりたくて!マスターオブガーデン』ではリードエンジニアとして開発を行いました。2年前からは、ゲームの開発だけでなくマネージャーとしてのマネジメント業務も担当しています。
L.L
少し気になるのですが、Unityを使って開発を始めたのはいつごろからですか?
T.Y
Aimingに入社して最初に担当したプロジェクトで初めてUnityに触れました。その時は他のプロジェクトメンバーもほとんどがUnityを初めて触る人ばかりでしたね。当時Unityはまだ出始めのころでバージョンは 3.5 だったと思います。
L.L
全員初心者でそれぞれが勉強していると認識の違いが出てくると思いますが、どういう風に進めていましたか?
T.Y
チームメンバーはUnityでの開発が初めてでしたが、Aimingの中にはもうUnityを触ってる別のプロジェクトがあったので慣れている社員に教えてもらったり、技術責任者をしている社員にアドバイスもらったりして進めていました。
L.L
入社後かなり苦労されたんじゃないですか?
T.Y
そうですね、先ほども少し触れましたが、Aiming 入社当初は初めて触れる開発環境や企業文化に苦労しました。
Unity だけでなく C# での開発も初めてだったので、最初はとても大変でした。Unity のエディタの使い方や、C# の書き方、Unity のライフサイクルなど、最初は戸惑うことが多かったです。
ただ、C++での開発経験はあったのでC#には比較的早く慣れることができました。
それとコードレビューも Aiming に来てから経験しました。前職ではコードレビューや設計レビューのようなものは一切ありませんでしたが、Aimingでは入社当時からレビュー文化が根付いていました。
L.L
コードレビューが無かったということは、もしかしてGitHubとかも使ってないですか?
T.Y
ないですね、そもそも私が働き始めた時にはまだ Git が無かったので VSS や SVN を使っていました。
L.L
Gitのない世界…。想像がつかないですね。
コードレビューをすることについて、どういう風に感じました?
T.Y
コードレビューをして他の人のコードを見ること、自分のコードを見てもらうこと、どちらもとても勉強になり、良いコードを書くことができるようになりました。今ではコードレビューなしで開発するなんて考えられません。
L.L
コードレビューにおいて大事にしているところはどんなところですか?
T.Y
関数や変数などに適切な名前を付けられているかという点を重視しています。
名前を正しくつけないと間違った使われ方をしたり、意図しない修正が行われてしまう可能性が出てくるからです。
例えば Get~という関数を呼び出した時に状態が変わるとは思わないですよね。
L.L
ああ、確かに値を取得したいだけなのに状態を変えるべきではないですね。
T.Y
名前からは推測しづらい挙動をされると作りづらいですよね。
それに我々が作っているものはオンラインゲームなのでリリースして運用フェーズに入っても開発が続いていきます。そうすると最初に作った人もいなくなり、別の担当者に変わっていく。自分が作ったものでも数か月も経つと作った頃のことは忘れてしまう。そういう時に名前が正しく付けられていないと不具合の温床になったり開発効率が下がったりと言ったことが起こりやすくなります。
そういった問題を回避するために、まず名前を正しく付けることを徹底したいですね。
L.L
なるほど、今後は命名に気をつけます。
L.L
オンラインゲーム開発をしているため、セキュリティとチート対策についてお伺いしたいと思います。 チート対策はどこまで重要でしょうか。
T.Y
セキュリティやチート対策は、ゲーム開発において非常に重要な要素です。特にオンラインゲームでは、チートや不正行為が発生すると、ゲームのバランスが崩れたり、ユーザーの信頼を失ったりする可能性があります。例えばアイテムが無限に増殖します、なんてことになったらもう目も当てられないので、チート対策が一番重要と言っても過言ではないですよね。
L.L
では、具体的にチーター対策をするには、どうしたら良いでしょうか?
T.Y
原則としてクライアント にロジックを持たないことだと考えています。クライアント側で処理を行うと、チートツールを使われた際に簡単に改ざんされてしまいます。
したがって、できるだけサーバー側で処理を行い、クライアント側では結果を受け取るだけにすることが肝心です。
どうしてもクライアントにロジックを持たざるをえないのであれば、サーバー側で検証可能にしておくとか。その瞬間はチートを検出できないとしても、後にチートを検出できるような仕組みを整えておくとかでしょうか。
L.L
ユーザーが快適にゲームを体験できるようにクライアント側で計算をするが、万が一なにかある時にサーバー側で良くないデータを検知できるように保存しているってことですよね。
T.Y
企画段階からセキュリティ的な課題も含めて検討していくことが重要ですね。
セキュリティ上問題がある仕様が出てきた場合、ゲーム性を考慮しつつ代替案を提案します。
L.L
これまでの開発で、技術的に大変だったことはありますか?
T.Y
アラビア語の文字をビットマップフォントで出した時は大変だったと思います。その作品では様々な言語に対応する必要がありましたが、繁体字、簡体字等の漢字でも苦労はありましたが、それよりもアラビア語には苦労しました。
L.L
何が大変でしたか?
T.Y
まず文字を書くのが右から左で逆ですし、その中で外来語が出てくると、 例えばAimingという固有名詞がアルファベットで出てくると、そこは左から右に書く。
右から左に書く文字の中で急に見慣れたアルファベットが、左から右表記の単語が入ってくるんです。
L.L
なるほど。テキストデータも右から左用に書いているんですか?
T.Y
内部的に保持しているデータは表示順の事は考えずに他の言語と同じようになっています。
しかもアラビア語って文字が変化するんですよね。直前にくる文字によってその後の文字の形が変化します。単独でその文字が表示される場合と何かとくっついた場合とで全然違う形になる場合があります。「あ」という文字に表示用のパターンがあるようなものです。
L.L
それはテキストデータ上でもう変換済みじゃなくてですか?
T.Y
テキストデータは表示のバリエーションは持っていなくて、表示する時に変化させています。
L.L
1 つ 1 つ前の文字を見て後ろの文字を判定してるんでしょうか?難しそうです。
大変そうですけど、面白いですね。
L.L
プロジェクトのエンジニアリーダーとして求められることは何ですか?
T.Y
エンジニアリーダーには、技術的な能力だけでなく、チームのマネジメント能力やコミュニケーション力も求められます。
そこで私が重要だと考えるのは「洞察力」と「論理的思考力」です。
開発を進める中でさまざまな課題や問題が発生しますが、それらを正確に把握し、適切な解決策を見つける力が求められます。
多くの場合、問題に対する解決策は何かを削減したり、代替手段を考えたりすることになりますが、そのためには本質的な部分をしっかりと見極めることが大切です。
それを見誤ると、解決策が的外れになり、結果的に開発が遅れてしまうこともあります。本質を捉えた上で適切な解決策を見つけるためには、論理的思考力が不可欠です。過去に同じような事例があるわけではなく、全く新しい課題に直面することもあります。その際には、過去の経験を元に仮説を立てて検証していくことが必要です。
さらに、問題を早期に発見することも重要です。開発の進行中に問題が発生する前に見つけて対策を講じることができれば、開発スピードを上げることができます。問題が発覚するのが遅れるほど、解決にかかるコストは増大します。
色々な意思決定を行い、チームを導いていくことがエンジニアリーダーに求められる役割だと考えています。リーダーとして技術的な課題だけでなくチーム全体のパフォーマンスや進行状況にも目を配り、最適な解決策を導き出すことが重要です。
L.L
論理的思考力を鍛えるために普段からどんなことを意識したら良いですか?
T.Y
難しいことを言いますね。
L.L
知りたい!
T.Y
一番 は経験だと思いますがなんとなく経験してるだけでは時間がかかってしまうと思うので、問題が起こった時に、自分だったらどう判断するかを考えてみて、リーダーが違う判断をした場合は、どうしてその判断をしたのかを考えてみると良いと思います。
自分と判断が同じだったとしても、その判断をした理由が間違っていたら良くないです。大切なのは判断を下した理由を分かっているかどうかですね。判断基準が分からないと他に応用できないです。結果が同じだけであれば、同じ問題にしか対処できないです。判断基準をきちんと理解できれば、応用問題にも対処できるはずです。
L.L
Aimingで長く働いている理由は?
T.Y
やっぱり良いゲームを作れる人たちだと思ってるのでそこが大きいと思います。
自分はグラフィックのクオリティがすごく高いなと思っていて。グラフィックのクオリティが高いと開発していてとても励みになります。そんなクオリティの高いグラフィックが自分の手でゲームとして動くものになっていくのは開発していて楽しい瞬間ですね。そういうのはモチベーションに繋がります。
L.L
僕は他の会社を経験したことはないので新卒の立場からですが、尊敬できる人が多く在籍しており、技術的にも人間的にも優秀な人がいるからこそ、Aimingにエンジニアとして居続けたいと思うのが一番大きな理由です。
自分の知らないことや調べても理解できないことを質問しても、するっと答えて教えてくれる社員がたくさんいるんですよね。自分が目指しているなりたいエンジニアになれる環境が整っていると思っていて、働く環境としては満足しています。Aimingは良いゲームを開発できる会社だと思います。僕は毎週2、3本程度ゲームをやりますが、Aimingのようなレベルが高く開発できるゲーム会社は本当に少ないと思っています。Aimingが開発しているような規模の大きいゲームを作れる会社は限られます。その視点から考えると魅力的だと思いますね。それとオフィスの椅子が気持ち良いです(笑)
T.Y
あと、Aimingはあまり上下関係が激しい会社ではないと思っていて、ゲーム開発エンジニアではない基盤開発チームとかとも気軽に話せたりします。
やる気があれば受け入れてくれる土壌なので働きやすいと思います。また、ずっとオンラインゲームを作ってる会社でノウハウが蓄積されているため、そういうことを学びたい人には合っているとおもいます。Aimingに根付いている文化は先ほども挙げたコードレビューと勉強会ですね。もはやコードレビューをしないなんてのはありえないですね。人に見てもらって検証し、コードのクオリティを上げていく。そしてチームメンバー全体のクオリティが上がってくるんだと思っています。これは、引き続き大事にし続けていきます。
勉強会も積極的に継続して開催していて、エンジニアだけでなく、企画やデザイナーも含めて積極的にやっていますよね。すごく良いことだと思います。
L.L
日頃からどういう風に勉強してますか?
T.Y
興味があることは何でもやってみるのが大事かなって思います。
本を読んで記事読んで終わりじゃなくて実際に動かしてみることまでやってみるのが良いと思う。
L.L
最近は記事や本を見てサンプルコードが載っていて、見てそうなんだって分かったつもりになって終わりがちなんですよね。
手を動かそうとしても手を動かす力が出てこないんですけどどうしたら良いでしょうか?
T.Y
そうですね、手を動かすのは少しハードルが上がりますし、時間が作れなかったりして自分で動かしてみるのは難しい時もありますよね。そういう時でも概要を理解してどういう使い方が出来そうか想像しておくと、後にそれが使える場面に出会ったときに活用できますよ。
L.L
読者へ一言お願いします!
T.Y
現在はリードエンジニアやマネージャーとして、チームメンバーが最大限のパフォーマンスを発揮できるよう、日々試行錯誤しています。
エンジニアとしてゲーム開発に携わることは非常に楽しく、やりがいを感じています。自分が関わったゲームが多くの人に遊ばれることは、何より嬉しい瞬間です。
ですが、その喜びや達成感を感じられるのも、信頼できる仲間たちがいるからこそだと強く感じています。長年エンジニアとして働く中で、自分一人の力というのは意外と限られていることに気づきました。しかし、Aiming には気軽に相談できる仲間が多く、自分の意見をしっかりと伝え合える環境が整っています。このような環境が、安心して開発に集中できる大きな支えとなっています。もしこのメッセージを読んで興味を持っていただけたなら、ぜひ一緒に働き共に成長していきましょう!
他のクロストーク