Upgrade to Pro — share decks privately, control downloads, hide ads and more …

アーキテクトを目指す若手エンジニアのこれまで【DeNA TechCon 2021 Winter】/techcon2021 winter7

DeNA_Tech
December 27, 2021

アーキテクトを目指す若手エンジニアのこれまで【DeNA TechCon 2021 Winter】/techcon2021 winter7

エンジニアとしてどういうキャリアを積んでいきたいかが明確ではない状態でDeNAに新卒入社し、そこからアーキテクトになりたいという明確なキャリア像を持つに至った経緯や、そのキャリアの実現に向け、ゲーム基盤システム「LCX」の新規開発プロジェクトにおいて実際にどのような技術的経験を積んだのかについてお話しします。

LCX: ユーザー認証、課金、ゲーム内通貨管理など、ゲームにおける汎用的な機能を提供する基盤システム。中国を含む全世界への展開を見据えており、DeNAの中国支社であるDeNA Chinaと共同で開発を行なっている。

DeNA_Tech

December 27, 2021
Tweet

More Decks by DeNA_Tech

Other Decks in Technology

Transcript

  1. アーキテクトを目指す
    若手エンジニアのこれまで
    Naoto Ikeno

    View Slide

  2. 自己紹介
    - 池野直人
    - サーバーサイドエンジニア
    - 2017年新卒入社
    - 2017-2019: Anyca
    - 2019-2021: LCX
    - 2021-現在: 協業案件での新規開発プロジェ
    クト(開発チームリーダー)

    View Slide

  3. 本日の話
    - 2部構成
    1. 明確なキャリア像が無い状態でDeNAに新卒入社したのちに、明確な
    キャリア像(アーキテクトになりたい)を持つに至った経緯
    2. そのキャリアの実現に向け、ゲーム基盤システム「LCX」の新規開発プ
    ロジェクトにおいて、実際に積んだ技術的経験
    - DeNAでの新卒ソフトウェアエンジニアの働き方やキャリアの積み方の一例
    として、具体的なイメージを持ってもらえたら幸いです

    View Slide

  4. 明確なキャリア像(アーキテクトになりたい)
    を持つに至った経緯

    View Slide

  5. 新卒入社時の状態
    - プログラミングは大好きなので、ソフトウェアエンジニアでありたいという
    ことは間違いなさそう
    - ただし、どのようなソフトウェアエンジニアになりたいのかはわからない

    View Slide

  6. 新卒入社時の状態
    - 思っていたこと
    - どちらかというとエンドユーザーに近い部分の開発をしたい気がする
    - リアル寄りな(webで完結しない)サービスの開発に興味がある
    - その点ではオートモーティブ事業がすごく面白そう
    - 興味を汲んでもらえて、Anycaに配属になる

    View Slide

  7. Anycaについて
    - 個人間カーシェアアプリ
    - 当時はDeNAのオートモーティブ事業部の1サービスとして運営
    - 現在は合弁会社化し、株式会社DeNA SOMPO Mobilityにより運営

    View Slide

  8. Anycaでの経験
    - メインはサーバーサイドの開発と運用
    - 概要のみにとどめますが、本当に幅広くやらせてもらいました
    - サービス改善のためのデータ収集→分析→企画→実装
    - ユーザーからの問い合わせ対応(with カスタマーサポートチーム)
    - 裏側のシステム(保険連携、会計など)のリファクタリング
    - 他社との合同キャンペーンのプロジェクトの開発リーダー

    View Slide

  9. 色々経験した結果見えてきたこと①
    - 相変わらず開発は楽しいが、更に具体的にどういう時が楽しいのかがわかっ
    てきた
    - 自分の場合
    - 案外、裏側のシステムの開発も楽しい
    - どのような設計にすれば、将来にわたって活用されるシンプルで柔軟な
    システムを作れるのか考えるのが楽しい
    - 実際にその設計が活きた瞬間も楽しい

    View Slide

  10. 色々経験した結果見えてきたこと②
    - 技術的に突き抜けることでビジネスに貢献するという選択肢もある
    経験 経験からの気付き
    システムが複雑になっている部分への機
    能追加や改修に時間がかかった
    シンプルで良い設計のシステムが作れた
    らサービスの改善速度が上がる
    障害の事後処理に時間がかかった 障害が起きにくいシステムは本質的な作
    業の時間を増やす
    要件を既存機能の流用でシンプルに実
    現できた
    正しい取捨選択ができると開発コストが
    下がる

    View Slide

  11. アーキテクトになりたい
    - こういった経験を経て、「技術的に高度であることでビジネスに貢献するソ
    フトウェアエンジニア」になりたいと思うようになった
    - 具体的には
    - システム全体の最適な設計を自分で考えて実装できる人
    - 要件に対して取捨選択をし、最適な実現方法を提案できる人
    - テックリード、さらにいくとアーキテクトが近そう
    - アーキテクトになりたい

    View Slide

  12. 前半終わり
    - 明確なキャリア像が無い状態でDeNAに新卒入社した自分が、アーキテクト
    になりたいという明確なキャリア像を持つに至った経緯のご紹介でした

    View Slide

  13. LCXでの技術的経験

    View Slide

  14. LCXへの異動の経緯
    - アーキテクトになるために
    - クラウドサービスを活用した大規模サービスの開発運用経験を積みたい
    - 大規模なバックエンドを自分で設計・実装する経験を積みたい

    View Slide

  15. LCXへの異動の経緯
    - そういった経験を積めるプロジェクトが他にあればチャレンジしてみたいと
    いう話を、当時のAnycaのマネージャー(事業責任者)に相談
    - 理解と後押しをしてくれた
    - 紹介してもらった別部署のマネージャーから、LCXという新規プロジェクト
    の話を聞いた
    - まさに自分が望む経験が積める場だと思い、異動させてもらうことに

    View Slide

  16. 余談
    - Anycaの当時のマネージャー(馬場さん)
    - 現在のDeNA SOMPO Mobilityの代表取締役社長
    - 新卒エンジニアからビジネスサイドに進んだ点で自分と対照的
    - 馬場さんも本日のTechConに登壇してます

    View Slide

  17. - LCXの提供する機能
    - ユーザ認証、課金処理、ゲーム内通貨管理、分析用データ収集、...
    - LCXを使うことで、上記のような汎用的な機能を簡単にゲームに組み込める
    - アプリストアの差異もLCXが吸収、単一APIとしてゲームに提供
    API連携
    ゲーム側システム 外部API群
    Apple App Store API
    Google Play Store API
    ゲーム
    サーバー
    ゲーム
    クライアント
    LCX SDK
    LCX
    APIサーバー

    API連携
    LCX: 汎用的な機能をゲーム側システムに提供

    View Slide

  18. - 目的: 中国固有の事情への対応
    - Androidのアプリストアが多数存在している
    - ゲームを出すには中国政府の定めた基準をクリアする必要がある
    - 将来的に、日本で出したゲームを中国でも展開したり、その逆をスムーズに
    行えるようにすることもLCXのミッション
    - 中国側の開発チームとは英語でコミュニケーション
    LCX: 中国の提携会社と共同開発

    View Slide

  19. DNSゾーン管理
    管理者用コンソール
    非同期処理
    LCXでの経験①: クラウドサービスを活用した開発と運用
    LCXのシステム構成図
    分析用データ記録
    Dataflow
    Cloud
    Storage
    システム監視
    Logging BigQuery
    APIサーバー
    App
    Engine
    ゲーム
    管理者
    Cloud Run
    ゲーム側
    サーバー
    アプリ
    (LCX SDK) Pub/Sub
    DB
    Cloud
    Spanner
    秘匿情報
    Secret
    Manager
    Cloud
    IAM
    権限管理
    Monitoring
    Error
    Reporting
    定期実行タスク
    Cloud
    Scheduler
    Cloud
    DNS
    Cloud Load
    Balancing

    View Slide

  20. LCXでの経験②: 大規模トラフィックを捌くための設計運用
    - ゲームのリリース時やイベント時には1秒あたり数千以上のリクエストが飛
    んでくることもある
    - システムに不備があると簡単にリクエストが詰まってしまう
    - 大量・急激なトラフィックに耐えうる設計や運用を考える必要がある

    View Slide

  21. Compute
    Engine
    LCXでの経験②: 大規模トラフィックを捌くための設計運用
    DNSゾーン管理
    管理者用コンソール
    非同期処理
    分析用データ記録
    Dataflow
    Cloud
    Storage
    システム監視
    Logging BigQuery
    APIサーバー
    App
    Engine
    Cloud Run
    Pub/Sub
    DB
    Cloud
    Spanner
    秘匿情報
    Secret
    Manager
    Cloud
    IAM
    権限管理
    Monitoring
    Error
    Reporting
    定期実行タスク
    Cloud
    Scheduler
    Cloud
    DNS
    Cloud Load
    Balancing
    LCX
    負荷試験
    クライアント
    負荷試験を行い
    ボトルネックを調

    APIサーバーの起動
    の高速化
    ウォームアップ処理
    効率のいいテーブル設
    計・クエリ設計
    時間がかかる処理の
    非同期化
    異変にすぐに気づける監視体
    制の構築
    (可視化、アラート設定)

    View Slide

  22. LCXでの経験③: ソフトウェアアーキテクチャ設計
    - 中国提携会社による中国での運用時はAlibaba Cloud上でLCXを動かす
    - 裏で動くクラウドサービスが異なるので、クラウドとの接点部分については
    別々のコードで動かすことになるし、実装者も別
    - 挙動の差分が出にくくなるような設計にしたい
    日本での運用時 中国での運用時

    App DB Messaging
    LCX
    Pub/Sub
    Cloud
    Spanner
    App
    Engine
    ACK
    PolarDB
    Message
    Service

    App DB Messaging
    LCX

    View Slide

  23. LCXでの経験③: ソフトウェアアーキテクチャ設計
    - 大部分のコアロジックは共通
    - 実装を切り替える必要がある最低限
    の部分のみ、interfaceを切って別々
    に実装、環境に応じて切り替え
    if(外部サーバーが応答しない場合){
    retryLater(request);
    }
    retryLater(request)
    retryLater(request){
    // Pub/Subにqueueing
    }
    retryLater(request){
    // MNSにqueueing
    }
    共通interface
    GCP用実装 Alibaba用実装
    Alibaba
    MNS
    共通のコアロジック
    Pub/Sub

    View Slide

  24. LCXでの経験③: ソフトウェアアーキテクチャ設計
    - お互いの実装やクラウドサービスの
    性質を気にせず並行して開発できる
    - 大部分のコアロジックは共通なの
    で、LCXとしての表向きの挙動に差
    異が出づらい
    if(外部サーバーが応答しない場合){
    retryLater(request);
    }
    retryLater(request)
    retryLater(request){
    // Pub/Subにqueueing
    }
    retryLater(request){
    // MNSにqueueing
    }
    共通interface
    GCP用実装 Alibaba用実装
    共通のコアロジック
    Alibaba
    MNS
    Pub/Sub

    View Slide

  25. LCXでの経験④: 最適な設計や実装を考え抜く
    - LCXの意思決定や実装がゲーム側に大きなインパクトを与える
    - 良いインパクトを最大化するため、最適な設計や実装について考え抜く必要
    がある

    View Slide

  26. LCXでの経験④: 最適な設計や実装を考え抜く
    - LCXがゲームの土台に位置する
    - LCXがより速くレスポンスを返せば、
    ゲームもユーザーにより速くレスポン
    スを返せる
    - LCXのAPIの出来が良ければ、ゲーム
    はより高速に開発を進められる
    LCX
    ゲーム側
    システム
    ユーザー
    リクエスト/処理の流れ

    View Slide

  27. LCXでの経験④: 最適な設計や実装を考え抜く
    - LCXとして一度リリースした機能は様々なゲームから利用される
    - 破壊的変更や廃止は困難
    LCX
    ゲームA ゲームB ゲームC
    機能1 機能3
    機能2

    View Slide

  28. LCXでの経験④: 最適な設計や実装を考え抜く
    - 良かった事例
    - 内部設計で課金管理モジュールとゲーム内通貨管理モジュールを分離
    - 当初は一つの機能だと思っていたが、意外と連動しないことに気づく
    - ゲーム内通貨を消費したり、無償で配るような場合には、
    課金処理は関与しない
    - アイテムを直接課金により購入するような場合は、ゲーム内通貨の
    処理は関与しない
    - 別機能であると考え分離
    ⇨ コードの見通しが良くなり、機能改修がスムーズに

    View Slide

  29. LCXでの経験④: 最適な設計や実装を考え抜く
    - 悪かった事例
    - ゲーム内通貨の増減処理の際に発生するDBトランザクションのロック範
    囲が大きい設計になってしまった
    - アクセスが集中した際にトランザクション競合を引き起こしてしまいレ
    イテンシが悪化、ユーザー体験にも影響
    - 最適な設計を考えて実装し、それに対してフィードバックを
    得てさらに改善する・・・という経験を積めた

    View Slide

  30. LCXでの経験まとめ
    - LCXで経験したことの紹介は以上です
    - 目指したいキャリア像に近づくための経験が積めた
    - クラウドサービスを活用した大規模サービスの開発運用経験
    - 大規模なバックエンドを1から設計・実装する経験
    - 「webサービスのバックエンドを1から設計実装してほしい」と言われたと
    して、何をどうすればいいかの大局観を持てるようになった

    View Slide

  31. 振り返ってみると
    - 新卒入社時に思っていたのとは真逆のことを(自ら進んで)やることに
    - 興味関心は仕事をするうちに明確になったり移り変わったりすることを実感
    Before (新卒入社時の考え) After (LCXの特徴)
    ユーザーとの
    距離感
    エンドユーザーに近い部分
    の開発をしたい
    基盤システムであり、エンド
    ユーザーからは遠い
    サービスの性

    リアル寄りな(webで完結しな
    い)サービスの開発に興味が
    ある
    ゲームの裏方なので基本的に
    はwebで完結

    View Slide

  32. 現在 / まとめ
    - LCXでの経験を活かし、他社との新規の協業案件で、開発チームのリーダー
    をしながらバックエンドの設計や実装を一から行っている
    - 自身の目指す姿(アーキテクト)に少しずつ近づけているのではないか
    - DeNAでの新卒ソフトウェアエンジニアの働き方やキャリアの積み方の一例
    として、具体的なイメージを持ってもらえたら幸いです

    View Slide

  33. View Slide