ソフトウェア開発の仕事

職種紹介
【 ソフトウェア開発の役割って? 】
様々なシーンでのプログラミングを担当

当社では、プログラマの業務分野を大きく3つに分けています。

(1)ゲームタイトル開発
(2)基盤環境開発/技術研究
(3)グラフィックシステム開発

これらは本人の志向や能力をベースに、状況に応じて配属されます。いったん配属されたからといって、それに固定されるわけではなく、志向や状況の変化に応じて担当分野を変えることもあります。
またいずれの分野でも、コーディングだけ担当することはなく、実現すべき項目の要求分析からコーディングまで、総合的な工程に携わります。

【 どんな仕事なの? 】
3分野の違いは?

(1)ゲームタイトル開発
技術によってタイトルの実現を支え、開発の現場を加速する

[主な内容]
・ハイエンドゲーム開発のためのエンジン開発
・ゲームグラフィックの描画処理やメニューの表示・制御
・ネットワーク関連プログラム(主にクライアント側やP2P部分)
・プロジェクトで必要な開発環境(ゲームで起こるイベントの処理やサウンド実装等)を整備するためのツール開発
など。

ゲームを開発する上でのさまざまな制約(期間・人員・コスト・ハードの性能等)を考慮した上で、最大限のおもしろさを実現するため、現実的な技術の積み重ねとして実現していきます。タイトルを完成させることを重要視し、ゲーム本体の実装のみならず、効果的であればさまざまな技術的手段を積極的に投入していきます。
当社のエンジニアの仕事は、「ゲームを作る」というよりは「ゲームを作るための仕組みを作る」という色合いが強いのが特徴です。たとえばキャラクタAIを手がける場合、AIを実装するために必要なシステムの開発やメンテナンスなどをソフトウェア開発が担当し、企画職がそのシステムを使ってキャラクタのAIを組むといった役割分担をしています。

(2)基盤環境開発/技術研究
技術面・人材育成面から、社内全体の開発力を底上げする

[主な内容]
・開発者の制作支援ツール、プラグイン・ライブラリの開発と保守
・ミドルウェアの管理・サポート
・技術調査・研究
・教育研修
など。

プロジェクトを横断して使用できるツールやライブラリなどの開発・保守や、ミドルウェアの管理やサポートをするなどして開発を効率化し、技術力を強化する役割を担っています。
また新しい技術の調査・研究や、教育・研修などを通して、社内全体の開発力を底上げする位置づけでもあります。ソフトウェア開発のなかでも、長期的な視点から社内全体の問題解決に軸足を置くのが特徴です。

(3)グラフィックシステム開発
ゲームグラフィックを進化させるグラフィックス技術のスペシャリスト

[主な内容]
・グラフィックスエンジン開発
・次世代グラフィックス技術研究
・パフォーマンスチューニング
・技術導入のサポート
・グラフィックに関するミドルウェアの管理、運用
など。

ゲームグラフィックスエンジンを開発したり、次の世代を見据えた新しいグラフィックス技術の研究をするグラフィックスプログラミングのスペシャリストです。
魅力的な絵作りができる環境を提供するためには、最新技術や難しい技術を導入するだけではなく、さらにカスタマイズして使いやすくしたり、デザイナーにわかりやすく説明することもとても重要です。
ゲームの魅力を最大限に引き出し、ユーザーさんに「プレイしたい!」と思わせるようなグラフィック表現のため、ゲームグラフィックデザイナーと協力し、どういう絵作りをしたいのかを理解して、技術で実現していきます。

メイン(リード)プログラマとは?

リードプログラマとしてコンテンツのプログラムも行いますが、それ以上の役目があります。
それは、「開発の効率化」という視点を持ち、顕在的・潜在的な問題を見つけ出して、解決の指標を示すことです。
具体的には、プロジェクト内の開発をより効率化するため、開発環境構築を担当するプログラマと連携・協力して、プロジェクトの環境を整えたり、その一環として、新しい開発支援ツールやライブラリを開発するといったことを行います。
実際のプログラム業務は必ずしもメインプログラマのみが担当する業務ではありませんが、開発上の問題の発見や解決の指標を打ち出す重要な役割を担っています。

定量的な評価とフィードバックで開発を効率化する新たな取り組み

技術者の視点で「開発の効率化」というと、成果物作成手段の効率化をイメージするかもしれませんが、それだけではありません。成果物は一度作成して終わりではなく、評価・フィードバックを受け、修正することを繰り返して品質を上げていくものです。
我々はこの繰り返しをも効率化するために、定量的な評価を与える仕組みを考案し自動化を推し進めていくことに取り組んでいます。
そして、その実現を支えるキーワードが「機械学習」「視線追跡」「統計解析」「データ分析」「データマイニング」「ビッグデータ」といったものだと考えています。これらの分野は様々な研究がなされ歴史のあるものですが、これまで社内で積極的に活用されることはなく、身近な技術とはいえませんでした。しかし、よりコンテンツの質を高めるために避けることのできない重要な要素と捉え、その活用の研究を始めています。
今後はこのようなことに興味や素養のある技術者を迎え、さらにこの取り組みを加速させていきたいと考えています。

必要な知識・求められる人材とは?

プログラムをすることが仕事なので、プログラム言語とアルゴリズムの知識は必須です。
開発言語としては現在主にC++を使用していますが、C++でなくても、何かしらの言語を一通り習得しておく必要があります。アルゴリズムの知識は、解決手法を考える際の大元の知識になりますので、クオリティの高い仕事をするために必要となります。
またゲーム開発の際は、数学(ベクトル・行列など)や物理(速度・加速度・力学など)、グラフィックス、ネットワーク、データベース、ハードウェアの知識なども必要です。ですがこうした専門知識や技術自体は日々の業務を通じて身に着けられます。ですから新卒採用では、そのために必要となる基礎力や資質を重視した採用をしています。
実際に業務を行なうためには非常に広範囲の知識が必要になるため、現役の開発者であっても、日々調査や学習をしながら業務を行なっています。つまりゲーム開発をする上では、現時点での知識以上に、何が必要かを考え、必要なものを自ら学びとり、いかす姿勢が最も重要です。

インタビュー

PROFILE
■職種:ソフトウェア開発(プログラマ)
■入社:2009年入社

【 最適化することの魅力 】

私はこれまで主にタイトル開発チームに所属し、ゲームサーバーとの通信などのネットワーク部分や、開発環境整備などを担当してきました。いまのプロジェクトではリードプログラマも担当し、仕事の幅が広がってきています。

これまでゲーム開発をしてきて、ゲーム作りで難しいのは、正解が見えづらいところだと感じています。 企画職がこうすれば面白くなると考え、実装してみたものの、やってみたら意図していたものにならなかったというケースは多々あります。プログラマの手を借りなくても別のアイデアを実現できる環境を提供できれば、それだけ企画職が試行錯誤できる時間が増えることになります。
私はプログラマの仕事自体は『何かを最適化する仕事』だと考えています。作業工程の効率化、プログラムそのものの高速化、チーム全体の最適化など、最適化の内容にも色々あります。これらを実現するということはいずれもチームのパフォーマンス向上につながり、コンテンツやソフトウェア品質の向上につながります。こういった最適化を少しずつ積み重ねていくことでゲームがより面白い、良いものになっていく。それがプログラマという職種の面白さなのではないかと考えています。

【 自分たちの開発環境にかける思い 】

近年こうした開発の効率化という流れの中で、「Unity」や「Unreal Engine」といった統合開発環境(ゲームエンジン)を活用することが主流になってきています。こうした汎用的なゲームエンジンは便利な反面、そのエンジンで実現できるアイデアのみでゲームを作らなくてはいけないという制限も生じてしまいます。そのため当社ではそれらは使わずに、独自でハイエンドゲームの開発統合環境を構築し、ゲーム開発に取り組んでいます。

もちろん目的に合っていれば既存のエンジンやミドルウェアを利用するほうが効率的ですから、私たちもミドルウェアなどを多く活用しています。大切なのは、企画の性質ややりたいことに応じてどのように実現するのが最適かを検討し柔軟に対応することと、自分たちの強みや核になる技術を常に研究していくことだと考えています。

また、最近の開発体制ではゲーム内容の実装を企画職中心に進められるようになっています。その結果、プログラマはタスクシステムなどの各種システムの最適化など技術的な課題に注力しやすくなっています。GDCやCEDECで発表される内容を取り入れるチャンスもあります。

【 やりたいと思ったら手を挙げる 】

何でもやりたいと思ったことはやらせてもらえる環境です。もちろんプロジェクトの状況など優先すべきものがある場合には難しいですが、そうでない場合、手を挙げればやらせてもらえるチャンスは非常に多いと感じます。これはちょうど会社の規模感が大きすぎず小さすぎないことから、元々やるべきことが色々とある環境で、やりたい人にはそれをさせることのできる環境にもなっているからだと思います。

私はゲーム業界や別の業界で流行っていることに強く興味があり、新人の頃CEDECでJenkinsを使ったCIツールの導入の話を聞きに行きました。Jenkinsは既にWeb業界などで流行っていて社内で導入する価値が高いと考えていたので当時のプロジェクトでCIをやってみたいという話をして、自動ビルドなどの機能の実装を進めていきました。その後、他のプロジェクトでもCIをする文化が定着しつつあります。
弊社のプログラマになればさまざまな業務を経験して成長していくことも可能です。
幅広い知識を深めたい、自分からこうしていきたいと発信できる人には働きやすい職場です。