ソフトウェア開発職 の仕事

職種紹介

ソフトウェア開発職の役割って?

当社では、ソフトウェア開発職の業務分野を大きく4つに分けています。

(1)ゲームタイトル開発

(2)基盤環境開発/技術研究

(3)グラフィックシステム開発

(4)ネットワーク開発

これらは本人の志向や能力をベースに、状況に応じて配属されます。いったん配属されたからといって固定されるわけではなく、志向や状況の変化に応じて担当分野が変わることもあります。

いずれの分野でもコーディングだけ担当することはなく、実現すべき項目の要求分析からコーディングまで、総合的な工程に携わります。

どんな仕事なの?

4分野の違いは?

(1)ゲームタイトル開発

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

[主な内容]

  • ハイエンドゲーム開発のためのエンジン開発

  • ゲームグラフィックの描画処理やメニューの表示・制御

  • ネットワーク関連プログラム(主にクライアント側やP2P部分)

  • プロジェクトで必要な開発環境(ゲームで起こるイベントの処理やサウンド実装等)を整備するためのツール開発

など。

ゲームを開発する上でのさまざまな制約(期間・人員・コスト・ハードの性能等)を考慮した上で最大限のおもしろさを現実的な技術の積み重ねとして実現していきます。タイトルを完成させることを重要視し、ゲーム本体の実装のみならず、効果的であればさまざまな技術的手段を積極的に投入していきます。

当社のソフトウェア開発職の仕事は、「ゲームを作る」というよりは「ゲームを作るための仕組みを作る」という色合いが強いのが特徴です。

たとえばキャラクタAIを手がける場合、AIを実装するために必要なシステムの開発やメンテナンスなどをソフトウェア開発職が担当し、企画職がそのシステムを使ってキャラクタのAIを組むといった役割分担をしています。

(2)基盤環境開発/技術研究

技術面・人材育成面から、社内全体の開発力を底上げする

[主な内容]

  • 開発者の制作支援ツール、プラグイン・ライブラリの開発と保守

  • ミドルウェアの管理・サポート

  • 技術調査・研究

  • 教育研修

など。

プロジェクトを横断して使用できるツールやライブラリ、ミドルウェアを通して開発を効率化し、技術力を強化する役割を担っています。

また新しい技術の調査・研究や、教育・研修などを通して、社内全体の開発力を底上げする位置づけでもあります。

ソフトウェア開発職のなかでも、長期的な視点から社内全体の問題解決に軸足を置くのが特徴です。

(3)グラフィックシステム開発

ゲームグラフィックを進化させるグラフィックス技術の専門家

[主な内容]

  • グラフィックスエンジン開発

  • 次世代グラフィックス技術研究

  • パフォーマンスチューニング

  • 技術導入のサポート

  • グラフィックに関するミドルウェアの管理、運用

など。

ゲームグラフィックスエンジンを開発したり、次の世代を見据えた新しいグラフィックス技術の研究をするグラフィックスプログラミングのスペシャリストです。

魅力的な絵作りができる環境を提供するためには、最新技術や難しい技術を導入するだけではなく、カスタマイズして使いやすくすることや、デザイナーにわかりやすく説明することもとても重要です。

絵作りの意図を理解し、3Dグラフィックアーティストと協力して、ゲームの魅力を最大限に引き出し、ユーザーに「プレイしたい!」と思ってもらえるようなグラフィック表現を実現します。

(4)ネットワーク開発

オンラインコンテンツを構築するためのネットワーク技術の専門家

[主な内容]

  • ネットワークに関するライブラリ開発

  • サーバーフレームワーク開発

  • 運用のためのシステム開発

  • ツール開発

  • 実装(サーバー及びクライアント)

など。

サーバープログラムの設計・実装やデータベース構築を中心に、ゲームコンテンツと連携するwebやモバイルサービスの設計・実装なども含めて、「オンラインコンテンツ」全体を構築するために必要なネットワーク技術全般を担当します。

たとえば、ネットワークの特性を使ったアイデアを企画職に提案したり、プラットフォーム側で提供されているマッチングやランキングの機能だけでは足りない場合に独自サーバーの実装を行なうなどもしています。「ネットワーク」という専門性を活かしてゲームをより良くするために、提案から実装までできる幅の広さがあります。

リードエンジニアとは?

「リードエンジニア」「メインプログラマー」などいろいろな呼び名がありますが、その役割は「開発の効率化」という視点を持ち、顕在的・潜在的な問題を見つけ出して、解決の指標を示すことです。

具体的には、開発環境構築を担当するソフトウェア開発者と連携・協力して、プロジェクトの環境を整えることや、新しい開発支援ツールやライブラリを開発するといったことを行います。業務の一つとしてプログラミングも担当しますが、この「開発の効率化」がより重要な役割となります。

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

技術者の視点で「開発の効率化」というと、成果物作成手段の効率化をイメージするかもしれませんが、それだけではありません。

成果物は一度作成して終わりではなく、評価・フィードバックを受け、修正することを繰り返して品質を上げていくものです。

私たちはこの繰り返しをも効率化するために、定量的な評価を与える仕組みを考案し、自動化を推し進めています。

そして、その実現を支えるキーワードが、「機械学習」「視線追跡」「統計解析」「データ分析」「データマイニング」「ビッグデータ」といったものだと考えています。これらの分野は様々な研究がなされ歴史のあるものですが、これまで社内で積極的に活用されることはなく、身近な技術とはいえませんでした。しかし、よりコンテンツの質を高めるために避けることのできない重要な要素と捉え、その研究を始めています。

今後はこのようなことに興味や素養のある技術者を迎え、さらにこの取り組みを加速させていきたいと考えています。

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

プログラムをすることが仕事なので、プログラム言語とアルゴリズムの知識は必須です。

開発言語としては主にC++を使用していますが、C++でなくても、何かしらの言語を一通り習得しておく必要があります。

アルゴリズムの知識は、解決手法を考える際の大元の知識になるので、クオリティの高い仕事をするために必要です。

ゲーム開発では、数学(ベクトル・行列など)や物理(速度・加速度・力学など)、グラフィックス、ネットワーク、データベース、ハードウェアなど広範囲の知識も必要です。更に専門性をいかした仕事をしようとすると、たとえばネットワークであればDB関連知識や通信技術(P2P/Server-Client)、セキュリティ関連知識(暗号化、DRM)、サーバーサイドプログラム開発経験などが役に立ちます。

とはいえ、たとえソフトウェア開発者としてキャリアがあっても、ゲーム作りの知識がある人は多くはありません。また、技術が常に進化していく中で新しいものを作り続けるためには、現役の開発者であっても、日々調査や学習が必要になります。

そのため、新卒採用では技術者としての基礎力や資質を、キャリア採用であっても、情報感度を高め必要なものを自ら学び取りいかしていく自己革新力を重視した採用をしています。これらを持ち合わせていれば、ゲーム開発に限らず、専門知識や技術自体は日々の業務を通じて身に着けることが可能です。

インタビュー

PROFILE

職種:ソフトウェア開発職

入社:2009年入社

最適化することの魅力

私はこれまで主にタイトル開発チームに所属し、ゲームサーバーとの通信などのネットワーク部分や、開発環境整備などを担当してきました。

今のプロジェクトではリードエンジニアも担当し、仕事の幅が広がってきています。

これまでゲーム開発をしてきて、ゲーム作りで難しいのは、正解が見えづらいところだと感じています。 企画職が「こうすればおもしろくなる」と考え、実装してみたものの、やってみたら意図していたものにならなかったというケースは多々あります。ソフトウェア開発者の手を借りなくても別のアイデアを実現できる環境を提供できれば、それだけ企画職が試行錯誤できる時間が増えることになります。

私はソフトウェア開発職の仕事自体は『何かを最適化する仕事』だと考えています。作業工程の効率化、プログラムそのものの高速化、チーム全体の最適化など、最適化の内容にも色々あります。これらを実現するということはいずれもチームのパフォーマンス向上につながり、コンテンツやソフトウェア品質の向上につながります。

こういった最適化を少しずつ積み重ねていくことでゲームがよりおもしろく、良いものになっていく。それがソフトウェア開発という職種の魅力ではないかと考えています。

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

近年こうした開発の効率化という流れの中で、「Unity」や「Unreal Engine」といった統合開発環境(ゲームエンジン)を活用することが主流になってきています。

こうした汎用的なゲームエンジンは便利な反面、そのエンジンで実現できるアイデアのみでゲームを作らなくてはいけないという制限も生じてしまいます。

そのため当社ではそれらは使わずに、独自でハイエンドゲームの開発統合環境を構築し、ゲーム開発に取り組んでいます。

もちろん目的に合っていれば既存のエンジンやミドルウェアを利用するほうが効率的ですから、私たちもミドルウェアなどを多く活用しています。

大切なのは、企画の性質ややりたいことに応じてどのように実現するのが最適かを検討し柔軟に対応することと、自分たちの強みや核になる技術を常に研究していくことだと考えています。

また、最近の開発体制ではゲーム内容の実装を企画職中心に進められるようになっています。その結果、ソフトウェア開発者はタスクシステムなどの各種システムの最適化など技術的な課題に注力しやすくなっています。

GDCやCEDECで発表される内容を取り入れるチャンスもあります。

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

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

私はゲーム業界や別の業界で流行っていることに強く興味があり、新人の頃CEDECでJenkinsを使ったCIツールの導入の話を聞きに行きました。

Jenkinsは既にWeb業界などで流行っていて社内で導入する価値が高いと考えていたので当時のプロジェクトでCIをやってみたいという話をして、自動ビルドなどの機能の実装を進めていきました。その後、他のプロジェクトでもCIをする文化が定着しつつあります。

弊社のソフトウェア開発者になればさまざまな業務を経験して成長していくことも可能です。

幅広い知識を深めたい、自分からこうしていきたいと発信できる人には働きやすい職場です。