Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
SINoALICE -シノアリス- グローバル版、全139ヵ国リリースへの道のり
Search
gree_tech
PRO
September 18, 2020
Technology
0
280
SINoALICE -シノアリス- グローバル版、全139ヵ国リリースへの道のり
GREE Tech Conference 2020 で発表された資料です。
https://techcon.gree.jp/2020/session/Session-8
gree_tech
PRO
September 18, 2020
Tweet
Share
More Decks by gree_tech
See All by gree_tech
kustomizeをいい感じに使う方法
gree_tech
PRO
3
1.2k
スケーラビリティとコスト管理 Google Cloud Spanner 費用最適化の取り組み
gree_tech
PRO
0
540
「アナザーエデン 時空を超える猫」の5年前のログを引っ越してデータドリブンで事業運用プロセスを改善した話
gree_tech
PRO
0
380
Unity,PHP+Jenkins+GAS 多言語対応を意識させない開発を目指したシステム構築
gree_tech
PRO
0
830
全社総会における「REALITY Spaces」の活用と、Addressableを用いたコンテンツ配信技術について
gree_tech
PRO
0
500
AWSのEKS環境でログ機能を構築/リリースしたお話
gree_tech
PRO
0
380
「ヘブンバーンズレッド」の大規模アップデートにおける国内及び翻訳QAの取り組み
gree_tech
PRO
0
460
アプリ「REALITY」の12言語対応プロセスの仕組みと品質向上の取り組み
gree_tech
PRO
0
700
REALITYアプリのメンテナンスなしでの機能リリースを実現する、Istio導入とB/Gデプロイ実現の取り組み
gree_tech
PRO
0
570
Other Decks in Technology
See All in Technology
Autonomous Database Cloud 技術詳細 / adb-s_technical_detail_jp
oracle4engineer
PRO
15
36k
TDD - Test Driven Drupal
opdavies
0
3k
Kaggleで学ぶ系列データのための深層学習モデリング
yu4u
7
1.7k
AI JIMY - 登壇(インストール編)
hanacchi
0
150
多言語化対応における TypeScript の型定義を通して開発のしやすさについて考えた / TSKaigi TypeScript Multilingualization
nabeliwo
2
390
AWS アーキテクチャ作図入門/aws-architecture-diagram-101
ma2shita
16
6.7k
サイボウズ 開発本部採用ピッチ / Cybozu Engineer Recruit
cybozuinsideout
PRO
9
37k
データベース04: SQL (1/3) 単純質問 & 集約演算
trycycle
0
170
LLM評価の落とし穴~開発者目線で気をつけるポイント~
rishigami
12
3.3k
Exadata Database Service on Dedicated Infrastructure(ExaDB-D) UI スクリーン・キャプチャ集
oracle4engineer
PRO
2
1.7k
YJIT Makes Rails 1.7x faster / RubyKaigi 2024
k0kubun
4
560
TypeScript の抽象構文木を用いた、数百を超える API の大規模リファクタリング戦略
yanaemon
6
1.3k
Featured
See All Featured
A designer walks into a library…
pauljervisheath
201
23k
Why You Should Never Use an ORM
jnunemaker
PRO
51
8.7k
The Art of Programming - Codeland 2020
erikaheidi
43
12k
Six Lessons from altMBA
skipperchong
22
3k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
34
6.1k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
34
8.9k
Why Our Code Smells
bkeepers
PRO
331
56k
Embracing the Ebb and Flow
colly
80
4.2k
Writing Fast Ruby
sferik
622
60k
Designing for humans not robots
tammielis
247
25k
Teambox: Starting and Learning
jrom
128
8.4k
Fontdeck: Realign not Redesign
paulrobertlloyd
76
4.9k
Transcript
SINoALICE -シノアリス- グローバル版 全139ヵ国リリースへの道のり 株式会社ポケラボ エンジニアマネージャー 覚張 泰幸
覚張 泰幸 (Yasuyuki Kakuhari) 『SINoALICE -シノアリス-』エンジニア統括として立ち上げから参画 現在は同タイトルのグローバル版のエンジニア統括を担当している • [2013年リリース] 戦乱のサムライキングダム
• [未リリース] 新規アクションRPG • [2017年リリース] SINoALICE -シノアリス- • [2020年リリース] SINoALICE -シノアリス- (グローバル版) 2013年 株式会社ポケラボ 入社 登壇者の紹介 2
https://pokelabo.co.jp/ 株式会社ポケラボの紹介 3
https://sinoalice.jp/ SINoALICE -シノアリス-の紹介 4 (c) 2017-2020 SQUARE ENIX CO., LTD.
All Rights Reserved.
https://sinoalice.global/ SINoALICE -シノアリス- (グローバル版)の紹介 5 (c) 2017-2020 SQUARE ENIX CO.,
LTD. All Rights Reserved.
GREE Tech Conferenceで初公開!! CEDEC等ではシノアリスの色々なグラフを中心に紹介して来たが、GREE Tech Conferenceでは実装事例, ノウハウを紹介 勿論コレらの内容はGREE Tech Conferenceでしか聞けない!!
全139ヵ国リリースへの道のり 6
グローバル版って何?? • localize周りの考慮も入っていなければ、ソースコード上に日本語がベタベタで入っ ている箇所も多数.. 開発時のシノアリスの予算ってx億円だった気が.. • 海外に展開出来る様なアーキテクチャを想定していない • 地球って77億人くらいいるんでしたっけ... (2020年調べ)
ポケラボ自社Pub海外、負け続けている歴史..!! • 海外パブリッシャーとの協業はナレッジがあるが、自社Pubは... そもそも.. 7
【サーバー (PHP) 編】 S-1. 前代未聞の139ヵ国, 7言語対応!! S-2. ワールド分割関連, レイテンシ関連 S-3.
localize処理 S-4. 負荷対策関連コードの移植 / 実装 全139ヵ国リリースへの道のり (Index) 8
【クライアント (Unity) 編】 C-1. クライアント側の対応 C-2. 全世界共通バイナリでの実現 C-3. localize処理 C-4.
負荷対策関連コードの移植 / 実装 全139ヵ国リリースへの道のり (Index) 9
【other (その他) 編】 O-1. 人周り O-2. シノアリス国内で踏み切れなかったコト O-3. プラットフォーム審査対応 O-4.
海外版ならではの不具合 全139ヵ国リリースへの道のり (Index) 10
Server 11 サーバー (PHP) 編
アイスランド アイルランド アゼルバイジャンアメリカ合衆国 アラブ首長国連邦 アルジェリア アルゼンチン アルバ アルバニア アルメニア アンゴラアンティグア・バーブーダ
イエメン イギリス イスラエル イタリア イラク イラン インド インドネシア ウガンダ ウクライナ ウズベキスタン ウルグアイ エクアドル エジプト エストニア エルサルバドル オーストラリア オーストリア オマーンオランダ オランダ領アンティル ガーナ カーボベルデ カザフスタン カナダ ガボン カメルーン カンボジア ギニアビサウ キプロスキューバ ギリシャ キルギス グアテマラ クウェート グルジア クロアチア ケイマン諸島 ケニア コートジボワールコスタリカ コロンビア ザンビア ジャマイカ シンガポール ジンバブエ スイス スウェーデン スーダンスペインスリランカ スロバキア スロベニア セネガル セルビアソロモン諸島 タークス・カイコス諸島 タイ タジキスタン タンザニア チェコ共和国 チュニジア チリ デンマーク ドイツ トーゴ ドミニカ共和国 トリニダード・トバゴ トルクメニスタン トルコ ナイジェリア ナミビア ニジェール ニュージーランド ネパール ノルウェー バーレーン ハイチ パキスタン パナマ バハマ パプアニューギニア バミューダ パラグアイ ハンガリー バングラデシュ フィジー フィリピン フィンランド ブラジルフランス ブルガリア ブルキナファソ ベナン ベネズエラ ベラルーシ ベリーズペルー ポーランド ボスニア・ヘルツェゴビナ ボツワナ ボリビアポルトガル ホンジュラス マケドニア マリ マルタ マレーシア ミャンマー メキシコ モーリシャス モザンビーク モルドバモロッコ ヨルダンラオス ラトビア リトアニア リヒテンシュタイン ルーマニア ルクセンブルグ ルワンダ レバノン ロシア 英領ヴァージン諸島 大韓民国 南アフリカ 英語 ドイツ語 スペイン語 フランス語 韓国語 タイ語 (日本語) S-1. 前代未聞の139ヵ国, 7言語対応!! 12
139ヵ国分の価格設定 • Appleはtierを指定するだけなので、まぁ国内他アプリと変わらず • Googleは価格テンプレートと言う機能がある物の、使い物にならない!! 価格テンプレートのエクスポート, インポート機能がない!! 商品から価格テンプレートに移行させる際、税抜き, 税込みで価格がずれる!! 為替から入力する機能もあるが、Appleと価格を揃えなければならない!!
S-1. 前代未聞の139ヵ国, 7言語対応!! 13
6言語分のゲーム訴求画像作成 • Googleはどんな画像を突っ込んでもよしなにリサイズしてくれる • Appleは厳密に画像サイズが定義されており、最低3サイズのスクショを用意しない とならない 1言語5枚 * 6言語 *
3サイズ = 90枚 のゲーム訴求画像.. S-1. 前代未聞の139ヵ国, 7言語対応!! 14 2017-2020 Pokelabo Inc./SQUARE ENIX CO., LTD. All Rights Reserved.
139ヵ国分の価格設定 • 事前に通貨とtierの対応表を全て作成し、個別インポートにて対応!! • パッと見一番遠回りな感じがあるが、一番近道 6言語分のゲーム訴求画像作成 ・UnityのEditor拡張を使いながら作成!! (GameViewの中身だけを保存) ・解像度の高いモニタが自宅にない為、MacBook Pro
16inchを90度回転して対 応..!! S-1. 前代未聞の139ヵ国, 7言語対応!! 15
利用規約, 法律問題 • 国によって細かい部分が異なる • 諸々出し分けられる様に改修 S-1. 前代未聞の139ヵ国, 7言語対応!! 16
2017-2020 Pokelabo Inc./SQUARE ENIX CO., LTD. All Rights Reserved.
レイテンシを考慮し、2ワールドでの展開 • アジアパシフィック シンガポールリージョン (ap-southeast-1) • アメリカ / EU オハイオリージョン
(us-east-2) S-2. ワールド分割関連, レイテンシ関連 17 2017-2020 Pokelabo Inc./SQUARE ENIX CO., LTD. All Rights Reserved.
リリース前に各国の拠点から接続試験 • 本来ならば直接出向きたかった所だが、昨今のコロナ事情もあり外部の協力会社様 に依頼 現地の担当と綿密な連携を行い、動作を担保 S-2. ワールド分割関連, レイテンシ関連 18
綿密な連携 • 海外時間に合わせて接続確認を行う為、現地時間に合わせて徹 夜での対応 紅蓮魂 : i am pokelabo engineer
!! S-2. ワールド分割関連, レイテンシ関連 19 2017-2020 Pokelabo Inc./SQUARE ENIX CO., LTD. All Rights Reserved.
localize専用のMstを作成し、データを翻訳 • 全ての翻訳を司るMstを作成 tableName : テーブル名 tablecolumn : カラム名 JP
: 日本語 EN : 英語 KR : 韓国語 DE : ドイツ語 FR : フランス語 ES : スペイン語 TH : タイ語 S-3. localize処理 20
テーブル名 (tableName), カラム名 (TableColumn), JPを予め抽出, 入力し、翻訳 者に各言語の翻訳を依頼 JPが同じであっても、テーブル名, カラム名が異なる場合は個別に翻訳を行う tableNameは同一だが、tableColumnが異なるの
で別レコード S-3. localize処理 21
スクリプトで翻訳テーブルを作成 saffixに[_言語]を統一で入れ、tableを 作成 CardMst_EN SkillMst_KR CharacterMst_FR and more... S-3. localize処理
22
メリット: • 翻訳情報の一元管理が出来る 翻訳者が各々のMstを意識する必要がない • unique制約により、重複した翻訳を防ぐコトが出来る 用語の統一 • C-3. localize処理で詳細を後述するが、クライアント側の実装が楽
& パフォーマ ンス面で優位 クラアントはあくまでもビューワー 予め翻訳済みのデータでやり取りを行う為、余計なオーバーヘッドが発生しない S-3. localize処理 23
Ver29.2で対応出来ていない負荷対策コードを移植 • 2年分の負荷対策コードをガンガン入れ込み シノアリス国内は3月時点でVer59.0の開発中であり、差分が大量にあった 元々同じソースコードなので、ガンガン入れ込み • リリース後に手を入れられなかった部分を修正 シノアリス海外はリリース前なので、ずっと手を入れたいと思っていたコードの修正が 容易
シノアリス国内でボトルネックとなっている部分を改修 S-4. 負荷対策関連コードの移植 / 実装 24
負荷試験 シノアリス国内リリース規模 (100万DAU) を凌ぐべく、現状の負荷から目標値を定 義 internal 目標RPS : 22,569 external
目標PRS : 31,801 シノアリス国内の実績があるので、より良い数値が出れば担保出来る!! S-4. 負荷対策関連コードの移植 / 実装 25
シノアリス国内でボトルネックになっており、今回対応を入れた箇所の一例 • sharding対応 キャラクターデータ • 非正規化 データが取り難い箇所の非正規化 S-4. 負荷対策関連コードの移植 /
実装 26
シノアリス国内とのグラフ差 S-4. 負荷対策関連コードの移植 / 実装 27 2020/06/25 シノアリス国内ニーアコラボ復刻時 sys_load (RDS)
シノアリス国内とのグラフ差 S-4. 負荷対策関連コードの移植 / 実装 28 2020/07/16 シノアリス海外ニーアコラボ時 sys_load (RDS)
Client 29 クライアント (Unity) 編
クライアント埋め込み文字 埋め込まれた場所の抽出 & 管理番号の付与 & Best Fitを入れる作業 C-1. クライアント側の対応 30
2017-2020 Pokelabo Inc./SQUARE ENIX CO., LTD. All Rights Reserved.
139ヵ国同時パブリッシュ 日本, 繁体字, 簡体字を除く共通バイナリを実現 故にシノアリスに関しては全4つのバイナリが存在 ※簡体字未リリース (2020-09現在) C-2. 全世界共通バイナリでの実現 31
大まかな対応項目 (他にもあるけど) • 国毎の個別対応 GDPR対応, GRAC対応, PEGI対応, 倫理対応.. • 言語
(画像, 翻訳) 日本語が含まれる全ての表示項目が該当 • 時間 地域時間での表示に対応!! (一律UTC+0, UTC+0900にせず) C-2. 全世界共通バイナリでの実現 32
サーバー側で翻訳処理を行っている為、驚 異の作業なし!! ※正確にはTextFieldに対し、翻訳文字列の長さ 調整 (タイ語長い!!) 等の作業は発生するが、基本 的に何もしなくても動く ※Unity側はあくまでもマスタから読み込んで表示 のみを行っており、言語の違いを意識しない S-3.
localize処理で紹介したマスタデータを伴う翻訳 C-3. localize処理 33 2017-2020 Pokelabo Inc./SQUARE ENIX CO., LTD. All Rights Reserved.
各TextFieldに対し管理番号を割り当て、 Object生成時に翻訳を行う ※UnityTextMst的なマスター情報をサーバーから DLし、それを元に翻訳を実施 ※ゲーム内で利用するMstと同じ属性を持たせてい る為、変更があった時のみDLを行う & 変更に強い (後述) ※C#のDictionary型に詰め込み、onMemory
から読み込む Unity側だけで利用する固定文字列による翻訳 C-3. localize処理 34 2017-2020 Pokelabo Inc./SQUARE ENIX CO., LTD. All Rights Reserved.
言語の選択 ≒ 言語Mstの選択 と言う概念。 DLする言語Mstの切り替え C-3. localize処理 35 2017-2020 Pokelabo
Inc./SQUARE ENIX CO., LTD. All Rights Reserved.
全てMst DLする言語Mstの切り替え C-3. localize処理 36 2017-2020 Pokelabo Inc./SQUARE ENIX CO.,
LTD. All Rights Reserved.
クライアント側で時間の判定を誤ってしま い、修正する為にはクライアント側のアップ デートが必要... 謎の時間表記でユーザー様は大混乱.. ※時間のコンバート処理が漏れ、JSTで表記されてし まっている状態 ※通常は端末のロケーションに沿った現地時間が表 示される実装 変更に強い C-3.
localize処理 37 2017-2020 Pokelabo Inc./SQUARE ENIX CO., LTD. All Rights Reserved.
(UTC+9) を表記するコトで回避..!! ※全ての文字列はUnity外で管理されているので、 バイナリ変更なしで差し替えが可能 ※当然ですが、後日端末のロケーションに沿った現地 時間が表示される様に修正 変更に強い C-3. localize処理 38
2017-2020 Pokelabo Inc./SQUARE ENIX CO., LTD. All Rights Reserved.
シノアリス国内で実装した チューニングコードを移植 移植 C-4. 負荷対策関連コードの移植 / 実装 39 2017-2020 Pokelabo
Inc./SQUARE ENIX CO., LTD. All Rights Reserved.
Other 40 other (その他) 編
O-1. 人周り 41 とは言えシノアリス国内最優先!! 今やグリーグループの旗艦タイトルであるシノアリス国内の運営に支障が出てはなら ない シノアリス国内からの人員異動は僅か3名!! ナレッジの共有体制 スケジュールがタイトかつ人員が限られている案件であった為、メンバー全てが同じ 粒度で物事を話せる状態を構築
(特にクライアント側) プランナーにもJenkins経由での作業移譲を積極的に行い、協力体制を構築
O-2. シノアリス国内で踏み切れなかったコト 42 長年直せなかったtypo修正 quest (モノガタリに関連するテーブル) がqeustになっているとても気持ち悪い問 題の修正 シノアリス国内は今もqeustでガンバってます..!! 念願の.NETのupdate
シノアリス国内は運用中と言うコトも有り.NET 3.5を利用し続けているが、今回新規 タイトルなので、.NET4.xを採用 脱Legacy..!!
O-3. プラットフォーム審査対応 43 審査対応 Androidフィーチャー獲得の為、完璧な翻訳 & 完璧な動作を早々に求められる (c) 2017-2020 SQUARE
ENIX CO., LTD. All Rights Reserved.
O-4. 海外版ならではの不具合 44 あるあるな不具合 外国語読めない問題が引き起こす翻訳ミス 2017-2020 Pokelabo Inc./SQUARE ENIX CO.,
LTD. All Rights Reserved.
海外展開を全く考慮していない状態からでも、何とかなる • 当たり前の発想を少し変えるだけで、意外と何とかなったりする • 「出来ない理由を考える」より「出来る方法を考える」方が、楽しいし何とかなる localizeの手法は様々なので、localizeを諦めている会社さんもノリと勢いで一回検討し てみてはどうだろうか?? • 海外に日本のGameを発信しよう!! •
相談乗りますよ^ー^ まとめ 45
Happy Hacking !! 46
47