任天堂社との協業
任天堂社との業務提携での開発/運用を行っているチームについて紹介します。
任天堂社との業務提携においては大きく分けて二つの事業を構成しており、一つはニンテンドーアカウントを中心とした会員基盤システムの開発/運用業務、もう一つは任天堂社がパブリッシュしているスマートデバイスアプリの開発/運用業務になります。
どちらの事業においても任天堂社の基本戦略である「任天堂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で培ったスケーラブルなサーバー構築技術を用いて任天堂社のアプリのリリース・運用を支援します。