team

DeNAの多様な部門をカルチャーや開発体制、事例などを含めて紹介します

任天堂社との協業

任天堂社との業務提携での開発/運用を行っているチームについて紹介します。

任天堂社との業務提携においては大きく分けて二つの事業を構成しており、一つはニンテンドーアカウントを中心とした会員基盤システムの開発/運用業務、もう一つは任天堂社がパブリッシュしているスマートデバイスアプリの開発/運用業務になります。

どちらの事業においても任天堂社の基本戦略である「任天堂IPに触れる人口の拡大」に貢献できるように、ニンテンドーアカウントや各スマートデバイスアプリそれぞれをグローバルに展開するためのサーバーサイドからクライアントサイドまで幅広い技術領域における開発・運用を担っています。

チームカルチャー

我々のミッションは任天堂社との業務提携を通して世界中のお客様にサービスとデライトを届けることです。その中で任天堂社をはじめとした各ステークホルダー、そして何よりお客様が本当に望んでいるソリューションを提供することを目指しています。そのために何がより望ましいソリューションなのかということを任天堂・DeNAで一緒に考え、時に議論を戦わせながら、適切なコストとスケジュールで提供し、それを維持し続けられるようにということを大事にして日々の開発に取り組んでいます。

扱っているプロダクトの特徴と得られる知見

ニンテンドーアカウントや各スマートデバイスアプリはグローバルにリリースされている世界規模のサービスであり、アカウント数やアクセス負荷も世界レベルで見ても有数のものとなっています。そのため平常時から十分な可用性を備えたシステムを構築しておく必要があります。またリリース時やリリース後に発生する各種イベントなどにおいては、さらなる突発的な大量アクセスが見込まれますが、それに対してもあらゆる技術的なアプローチにより対策を行っています。その中で得られる技術的な知見や経験は業界内でも類稀なものとなっていると言えるのではないかと考えています。

グローバルサービスだからこその課題やソリューションと出会えるというのも、一つの特徴といえます。法令面でいえばサービスを展開してる各国独自の法令が存在する項目などもあり、そのために必要な機能(例えばペアレンタルコントロールや個人情報保護など)を開発/運用する経験から、世界に向けてサービスを展開する上で非常に重要な知見を得ることができます。それ以外にも効率的なローカライズを行うためのシステムの構成など、技術的にもこのようなグローバルなサービスを構築する上で必要となる貴重な知見が得られる環境なのではないかと思います。

開発スタイル

ニンテンドーアカウントを中心とした会員基盤サービスにおいては、ステークホルダーが多岐にわたるため要件定義フェーズや設計フェーズなどで成果物を明確に規定して関係者間の認識ずれが起きないように開発を進めることが多いです。 具体的にはProduct Requirement Document(PRD)の作成を通じて関係者間で何を作るのかという部分をしっかりと認識を合わせてからシステム設計に進めていくようにしています。 また様々なデバイスの多種多様なゲームクライアントから利用されるプラットフォームであるため、スケジュールとともに品質にもしっかりと向き合ってアウトプットできるようにというところを重要視して、検証フェーズもしっかりと確保して開発に当たっています。

スマートデバイスアプリの開発においては、任天堂社からの企画概要や施策の狙い等の共有を受けて仕様の検討や機能の設計・開発を行っていくというスタイルが多いです。 仕様検討や設計を進める中でお客様に対して適切なフローを模索しながら、細部を詰めていき、各種検証や負荷試験等を経てリリースされます。 開発の規模感は機能の大きさによって様々ですが、小さいものであれば数週間、大きなものだと半年程かけて進行するものもあり、機能が大きくなるとマーケティング等の施策と連動して動くため、スケジュールや負荷等あらゆることを綿密に考慮して開発を行っていく必要があります。

また前述の通りアクセス規模についても相当規模となるため、その負荷に十分に耐えられる高可用性を実現するために、 アマゾン ウェブ サービス(AWS) や Google Cloud Platform(GCP) のマネージドサービスを積極的に活用し、各クラウド事業者と密に技術戦略を議論しながら、世界中のお客様に安心・安全にご利用いただけるシステムを維持・改善していくために日夜努力しています。 そんな中でも20代の若手も多く活躍している現場となっており、例えば新卒3年目でも既にエース級に活躍できているメンバーなどもいます。

エンジニアリングにおける取り組み

積極的なシステムリノベーション

利用するお客様が急激に増加することでスケーラビリティの担保が困難になる事態に陥ったり、開発初期に採用した技術スタックが市場トレンドと乖離することで開発効率が低下したり、このような課題は長期間システム運用を継続することで多かれ少なかれ発生する課題ではないかと思います。 我々のチームで運用している各プロダクトにおいても例外ではありません。そのため、我々は積極的にモダナイゼーションやリアーキテクチャ・リライトに取り組んでいます。我々のチームではこれらを総称して「システムリノベーション」と呼んでおり、システムリノベーション専門の組織を4年ほど前から立ち上げ、技術的課題に積極的に取り組んでいます。 大規模プラットフォームとして持続可能性や理解容易性、変更可能性の向上を目的としてインフラストラクチャのフルマネージド化から、アプリケーションの実装においてもリアーキテクチャ・コードのリライトを積極的に実施しています。 その中で得られた技術的な知見は任天堂社とともにオープンに共有し合って、今後のサービス開発や他プロダクトにおいてもナレッジが活用できるように積極的に展開するようにしています。

ワーキンググループの取り組み

開発に利用している技術要素については適宜各チームでのキャッチアップやリノベーションを通じて知見が更新されていくタイミングがありますが、採用していない、または予定のない技術要素については、ワーキンググループという形で開発で採用しているかどうかに依存しないような形で最新技術に関する情報収集を行うようにしています。 題材としては今後発展が期待される Cloud Native Computing Foundationの各種プロダクトやAWS/GCPでリリースされているものの中からまだ知見を蓄積できていないものについて、そのプロダクトの設計思想からどのように利用するかなどを任天堂社含めてチームやプロダクトに還元できる形を目指して調査内容をアウトプットするようにしています。

事例紹介

スーパーマリオ ランにおけるバックエンドでの取り組みをAWS・GCPの事例として以下の記事で取り上げていただいています。

マリオカート ツアーにおけるゲームサーバーの取り組みをAWS導入事例として以下の記事で取り上げていただいています。

技術スタック

開発言語 サーバーサイド: Perl, Java, Ruby, Go, TypeScript
フロントエンド: HTML, CSS, JavaScript, TypeScript, Vue.js
クライアントサイド: C#(Unity), C++, Objective-C, Swift, Java, Kotlin
AWS ECS, Fargate, EC2
SES, SQS, S3, ElastiCache
CloudWatch, Athena
GCP App Engine, Cloud Run, Compute Engine
Pub/Sub, Dataflow
BigQuery, Cloud Storage
Logging, Monitoring
データベース Amazon Aurora
GCP Firestore in Datastore mode
MySQL
Elasticsearch
技術要素 OIDC, OAuth2.0, RESTful API, Microservices
Library Google Play Billing Library(Android), StoreKit(iOS),Protocol Buffers
開発ツール GitHub, JIRA, Confluence, CircleCI, Jenkins, Docker, Jetbrain IDE, etc.

チーム構成

サーバーサイドエンジニア

  • 任天堂会員基盤のプラットフォームである「ニンテンドーアカウント」の開発・運用を行うサーバーサイドエンジニアです。大きくはニンテンドーアカウントのグローバル大規模IDプロバイダーとしてのサーバーサイドの開発/運用とその付帯サービスであるマイニンテンドーのポイントサービスの開発・運用を行っています。また任天堂社のスマートデバイスアプリケーションが利用するBaaSや、Nintendo Switch のフレンド機能などを提供するバックエンドシステムの開発/運用を行っているチームもあります。それぞれAWSやGCPなどのPublic Cloudが提供するマネージドでスケーラブルなサービスを積極的に活用することで、より可用性や運用効率の高いシステムとするべく任天堂社との活発な議論を元に日々改善に取り組んでいます。
  • 現在以下のポジションを募集しています。

フロントエンドエンジニア

  • 主にニンテンドーアカウントやマイニンテンドーのフロントエンドの開発を行うエンジニアです。

SDKエンジニア

  • スマートデバイスアプリケーションの開発において各外部プラットフォームとの連携をプラットフォーム間の差異を意識せずに組み込めるようにゲームエンジン側の開発言語でのSDKとして統一したAPIを提供しています。外部プラットフォームの進化にしっかりと追従しつつも、スマートデバイスアプリケーション開発者にとって組み込みやすく、ハンドリングしやすいI/Fを提供するように日々改善を続けています。
  • 現在以下のポジションを募集しています。

オペレーションツールエンジニア

  • ニンテンドーアカウントやスマートデバイスアプリなどの各サービスの運用を支援するオペレーションツールの開発を主導するエンジニアです。様々なステークホルダーと要件調整を行いながら開発を行うことでプラットフォームとしてより効率的に運用を行うためのオペレーションツールの開発を主導しています。
  • 現在以下のポジションを募集しています。

テクニカルコンサルタント

  • ニンテンドーアカウントからゲームクライアントまで多くのコンポーネントが連携する中で発生する複数コンポーネントにまたがった課題のシューティングや連携方法のコンサルティングを行います。開発自体は行いませんが、各コンポーネントの外部仕様を理解し課題のボトルネックを発見してその解消のために様々なステークホルダーへの働きかけを行うというポジションです。
  • 現在以下のポジションを募集しています。

ゲームサーバーエンジニア

  • 任天堂社と弊社が協働で開発するスマートデバイスアプリケーションをグローバル配信するためのゲームサーバーの開発・運用を行うポジションです。グローバルに認知されたIPとなるため、そのサーバーサイドにかかるアクセス負荷も相当なものとなります。そのような高負荷なサーバーサイドでの技術課題について、DeNAで培ったスケーラブルなサーバー構築技術を用いて任天堂社のアプリのリリース・運用を支援します。
  • 現在以下のポジションを募集しています。

recruit

DeNAでは、失敗を恐れず常に挑戦し続けるエンジニアを募集しています。