Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

LCXでの技術的経験

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

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

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

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

Slide 25

Slide 25 text

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

Slide 26

Slide 26 text

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

Slide 27

Slide 27 text

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

Slide 28

Slide 28 text

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

Slide 29

Slide 29 text

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

Slide 30

Slide 30 text

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

Slide 31

Slide 31 text

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

Slide 32

Slide 32 text

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

Slide 33

Slide 33 text

No content