Slide 1

Slide 1 text

SINoALICE -シノアリス- グローバル版 全139ヵ国リリースへの道のり 株式会社ポケラボ エンジニアマネージャー 覚張 泰幸

Slide 2

Slide 2 text

覚張 泰幸 (Yasuyuki Kakuhari) 『SINoALICE -シノアリス-』エンジニア統括として立ち上げから参画 現在は同タイトルのグローバル版のエンジニア統括を担当している ● [2013年リリース] 戦乱のサムライキングダム ● [未リリース] 新規アクションRPG ● [2017年リリース] SINoALICE -シノアリス- ● [2020年リリース] SINoALICE -シノアリス- (グローバル版) 2013年 株式会社ポケラボ 入社 登壇者の紹介 2

Slide 3

Slide 3 text

https://pokelabo.co.jp/ 株式会社ポケラボの紹介 3

Slide 4

Slide 4 text

https://sinoalice.jp/ SINoALICE -シノアリス-の紹介 4 (c) 2017-2020 SQUARE ENIX CO., LTD. All Rights Reserved.

Slide 5

Slide 5 text

https://sinoalice.global/ SINoALICE -シノアリス- (グローバル版)の紹介 5 (c) 2017-2020 SQUARE ENIX CO., LTD. All Rights Reserved.

Slide 6

Slide 6 text

GREE Tech Conferenceで初公開!! CEDEC等ではシノアリスの色々なグラフを中心に紹介して来たが、GREE Tech Conferenceでは実装事例, ノウハウを紹介 勿論コレらの内容はGREE Tech Conferenceでしか聞けない!! 全139ヵ国リリースへの道のり 6

Slide 7

Slide 7 text

グローバル版って何?? • localize周りの考慮も入っていなければ、ソースコード上に日本語がベタベタで入っ ている箇所も多数.. 開発時のシノアリスの予算ってx億円だった気が.. • 海外に展開出来る様なアーキテクチャを想定していない • 地球って77億人くらいいるんでしたっけ... (2020年調べ) ポケラボ自社Pub海外、負け続けている歴史..!! • 海外パブリッシャーとの協業はナレッジがあるが、自社Pubは... そもそも.. 7

Slide 8

Slide 8 text

【サーバー (PHP) 編】 S-1. 前代未聞の139ヵ国, 7言語対応!! S-2. ワールド分割関連, レイテンシ関連 S-3. localize処理 S-4. 負荷対策関連コードの移植 / 実装 全139ヵ国リリースへの道のり (Index) 8

Slide 9

Slide 9 text

【クライアント (Unity) 編】 C-1. クライアント側の対応 C-2. 全世界共通バイナリでの実現 C-3. localize処理 C-4. 負荷対策関連コードの移植 / 実装 全139ヵ国リリースへの道のり (Index) 9

Slide 10

Slide 10 text

【other (その他) 編】 O-1. 人周り O-2. シノアリス国内で踏み切れなかったコト O-3. プラットフォーム審査対応 O-4. 海外版ならではの不具合 全139ヵ国リリースへの道のり (Index) 10

Slide 11

Slide 11 text

Server 11 サーバー (PHP) 編

Slide 12

Slide 12 text

アイスランド アイルランド アゼルバイジャンアメリカ合衆国 アラブ首長国連邦 アルジェリア アルゼンチン アルバ アルバニア アルメニア アンゴラアンティグア・バーブーダ イエメン イギリス イスラエル イタリア イラク イラン インド インドネシア ウガンダ ウクライナ ウズベキスタン ウルグアイ エクアドル エジプト エストニア エルサルバドル オーストラリア オーストリア オマーンオランダ オランダ領アンティル ガーナ カーボベルデ カザフスタン カナダ ガボン カメルーン カンボジア ギニアビサウ キプロスキューバ ギリシャ キルギス グアテマラ クウェート グルジア クロアチア ケイマン諸島 ケニア コートジボワールコスタリカ コロンビア ザンビア ジャマイカ シンガポール ジンバブエ スイス スウェーデン スーダンスペインスリランカ スロバキア スロベニア セネガル セルビアソロモン諸島 タークス・カイコス諸島 タイ タジキスタン タンザニア チェコ共和国 チュニジア チリ デンマーク ドイツ トーゴ ドミニカ共和国 トリニダード・トバゴ トルクメニスタン トルコ ナイジェリア ナミビア ニジェール ニュージーランド ネパール ノルウェー バーレーン ハイチ パキスタン パナマ バハマ パプアニューギニア バミューダ パラグアイ ハンガリー バングラデシュ フィジー フィリピン フィンランド ブラジルフランス ブルガリア ブルキナファソ ベナン ベネズエラ ベラルーシ ベリーズペルー ポーランド ボスニア・ヘルツェゴビナ ボツワナ ボリビアポルトガル ホンジュラス マケドニア マリ マルタ マレーシア ミャンマー メキシコ モーリシャス モザンビーク モルドバモロッコ ヨルダンラオス ラトビア リトアニア リヒテンシュタイン ルーマニア ルクセンブルグ ルワンダ レバノン ロシア 英領ヴァージン諸島 大韓民国 南アフリカ 英語 ドイツ語 スペイン語 フランス語 韓国語 タイ語 (日本語) S-1. 前代未聞の139ヵ国, 7言語対応!! 12

Slide 13

Slide 13 text

139ヵ国分の価格設定 • Appleはtierを指定するだけなので、まぁ国内他アプリと変わらず • Googleは価格テンプレートと言う機能がある物の、使い物にならない!! 価格テンプレートのエクスポート, インポート機能がない!! 商品から価格テンプレートに移行させる際、税抜き, 税込みで価格がずれる!! 為替から入力する機能もあるが、Appleと価格を揃えなければならない!! S-1. 前代未聞の139ヵ国, 7言語対応!! 13

Slide 14

Slide 14 text

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.

Slide 15

Slide 15 text

139ヵ国分の価格設定 • 事前に通貨とtierの対応表を全て作成し、個別インポートにて対応!! • パッと見一番遠回りな感じがあるが、一番近道 6言語分のゲーム訴求画像作成 ・UnityのEditor拡張を使いながら作成!! (GameViewの中身だけを保存) ・解像度の高いモニタが自宅にない為、MacBook Pro 16inchを90度回転して対 応..!! S-1. 前代未聞の139ヵ国, 7言語対応!! 15

Slide 16

Slide 16 text

利用規約, 法律問題 • 国によって細かい部分が異なる • 諸々出し分けられる様に改修 S-1. 前代未聞の139ヵ国, 7言語対応!! 16 2017-2020 Pokelabo Inc./SQUARE ENIX CO., LTD. All Rights Reserved.

Slide 17

Slide 17 text

レイテンシを考慮し、2ワールドでの展開 • アジアパシフィック シンガポールリージョン (ap-southeast-1) • アメリカ / EU オハイオリージョン (us-east-2) S-2. ワールド分割関連, レイテンシ関連 17 2017-2020 Pokelabo Inc./SQUARE ENIX CO., LTD. All Rights Reserved.

Slide 18

Slide 18 text

リリース前に各国の拠点から接続試験 • 本来ならば直接出向きたかった所だが、昨今のコロナ事情もあり外部の協力会社様 に依頼 現地の担当と綿密な連携を行い、動作を担保 S-2. ワールド分割関連, レイテンシ関連 18

Slide 19

Slide 19 text

綿密な連携 • 海外時間に合わせて接続確認を行う為、現地時間に合わせて徹 夜での対応 紅蓮魂 : i am pokelabo engineer !! S-2. ワールド分割関連, レイテンシ関連 19 2017-2020 Pokelabo Inc./SQUARE ENIX CO., LTD. All Rights Reserved.

Slide 20

Slide 20 text

localize専用のMstを作成し、データを翻訳 • 全ての翻訳を司るMstを作成 tableName : テーブル名 tablecolumn : カラム名 JP : 日本語 EN : 英語 KR : 韓国語 DE : ドイツ語 FR : フランス語 ES : スペイン語 TH : タイ語 S-3. localize処理 20

Slide 21

Slide 21 text

テーブル名 (tableName), カラム名 (TableColumn), JPを予め抽出, 入力し、翻訳 者に各言語の翻訳を依頼 JPが同じであっても、テーブル名, カラム名が異なる場合は個別に翻訳を行う tableNameは同一だが、tableColumnが異なるの で別レコード S-3. localize処理 21

Slide 22

Slide 22 text

スクリプトで翻訳テーブルを作成 saffixに[_言語]を統一で入れ、tableを 作成 CardMst_EN SkillMst_KR CharacterMst_FR and more... S-3. localize処理 22

Slide 23

Slide 23 text

メリット: • 翻訳情報の一元管理が出来る 翻訳者が各々のMstを意識する必要がない • unique制約により、重複した翻訳を防ぐコトが出来る 用語の統一 • C-3. localize処理で詳細を後述するが、クライアント側の実装が楽 & パフォーマ ンス面で優位 クラアントはあくまでもビューワー 予め翻訳済みのデータでやり取りを行う為、余計なオーバーヘッドが発生しない S-3. localize処理 23

Slide 24

Slide 24 text

Ver29.2で対応出来ていない負荷対策コードを移植 • 2年分の負荷対策コードをガンガン入れ込み シノアリス国内は3月時点でVer59.0の開発中であり、差分が大量にあった 元々同じソースコードなので、ガンガン入れ込み   • リリース後に手を入れられなかった部分を修正 シノアリス海外はリリース前なので、ずっと手を入れたいと思っていたコードの修正が 容易 シノアリス国内でボトルネックとなっている部分を改修 S-4. 負荷対策関連コードの移植 / 実装 24

Slide 25

Slide 25 text

負荷試験 シノアリス国内リリース規模 (100万DAU) を凌ぐべく、現状の負荷から目標値を定 義 internal 目標RPS : 22,569 external 目標PRS : 31,801 シノアリス国内の実績があるので、より良い数値が出れば担保出来る!! S-4. 負荷対策関連コードの移植 / 実装 25

Slide 26

Slide 26 text

シノアリス国内でボトルネックになっており、今回対応を入れた箇所の一例 • sharding対応 キャラクターデータ • 非正規化 データが取り難い箇所の非正規化 S-4. 負荷対策関連コードの移植 / 実装 26

Slide 27

Slide 27 text

シノアリス国内とのグラフ差 S-4. 負荷対策関連コードの移植 / 実装 27 2020/06/25 シノアリス国内ニーアコラボ復刻時 sys_load (RDS)

Slide 28

Slide 28 text

シノアリス国内とのグラフ差 S-4. 負荷対策関連コードの移植 / 実装 28 2020/07/16 シノアリス海外ニーアコラボ時 sys_load (RDS)

Slide 29

Slide 29 text

Client 29 クライアント (Unity) 編

Slide 30

Slide 30 text

クライアント埋め込み文字 埋め込まれた場所の抽出 & 管理番号の付与 & Best Fitを入れる作業 C-1. クライアント側の対応 30 2017-2020 Pokelabo Inc./SQUARE ENIX CO., LTD. All Rights Reserved.

Slide 31

Slide 31 text

139ヵ国同時パブリッシュ 日本, 繁体字, 簡体字を除く共通バイナリを実現 故にシノアリスに関しては全4つのバイナリが存在 ※簡体字未リリース (2020-09現在) C-2. 全世界共通バイナリでの実現 31

Slide 32

Slide 32 text

大まかな対応項目 (他にもあるけど) • 国毎の個別対応 GDPR対応, GRAC対応, PEGI対応, 倫理対応.. • 言語 (画像, 翻訳) 日本語が含まれる全ての表示項目が該当 • 時間 地域時間での表示に対応!! (一律UTC+0, UTC+0900にせず) C-2. 全世界共通バイナリでの実現 32

Slide 33

Slide 33 text

サーバー側で翻訳処理を行っている為、驚 異の作業なし!! ※正確にはTextFieldに対し、翻訳文字列の長さ 調整 (タイ語長い!!) 等の作業は発生するが、基本 的に何もしなくても動く ※Unity側はあくまでもマスタから読み込んで表示 のみを行っており、言語の違いを意識しない S-3. localize処理で紹介したマスタデータを伴う翻訳 C-3. localize処理 33 2017-2020 Pokelabo Inc./SQUARE ENIX CO., LTD. All Rights Reserved.

Slide 34

Slide 34 text

各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.

Slide 35

Slide 35 text

言語の選択 ≒ 言語Mstの選択 と言う概念。 DLする言語Mstの切り替え C-3. localize処理 35 2017-2020 Pokelabo Inc./SQUARE ENIX CO., LTD. All Rights Reserved.

Slide 36

Slide 36 text

全てMst DLする言語Mstの切り替え C-3. localize処理 36 2017-2020 Pokelabo Inc./SQUARE ENIX CO., LTD. All Rights Reserved.

Slide 37

Slide 37 text

クライアント側で時間の判定を誤ってしま い、修正する為にはクライアント側のアップ デートが必要... 謎の時間表記でユーザー様は大混乱.. ※時間のコンバート処理が漏れ、JSTで表記されてし まっている状態 ※通常は端末のロケーションに沿った現地時間が表 示される実装 変更に強い C-3. localize処理 37 2017-2020 Pokelabo Inc./SQUARE ENIX CO., LTD. All Rights Reserved.

Slide 38

Slide 38 text

(UTC+9) を表記するコトで回避..!! ※全ての文字列はUnity外で管理されているので、 バイナリ変更なしで差し替えが可能 ※当然ですが、後日端末のロケーションに沿った現地 時間が表示される様に修正 変更に強い C-3. localize処理 38 2017-2020 Pokelabo Inc./SQUARE ENIX CO., LTD. All Rights Reserved.

Slide 39

Slide 39 text

シノアリス国内で実装した チューニングコードを移植 移植 C-4. 負荷対策関連コードの移植 / 実装 39 2017-2020 Pokelabo Inc./SQUARE ENIX CO., LTD. All Rights Reserved.

Slide 40

Slide 40 text

Other 40 other (その他) 編

Slide 41

Slide 41 text

O-1. 人周り 41 とは言えシノアリス国内最優先!! 今やグリーグループの旗艦タイトルであるシノアリス国内の運営に支障が出てはなら ない シノアリス国内からの人員異動は僅か3名!! ナレッジの共有体制 スケジュールがタイトかつ人員が限られている案件であった為、メンバー全てが同じ 粒度で物事を話せる状態を構築 (特にクライアント側) プランナーにもJenkins経由での作業移譲を積極的に行い、協力体制を構築

Slide 42

Slide 42 text

O-2. シノアリス国内で踏み切れなかったコト 42 長年直せなかったtypo修正 quest (モノガタリに関連するテーブル) がqeustになっているとても気持ち悪い問 題の修正 シノアリス国内は今もqeustでガンバってます..!! 念願の.NETのupdate シノアリス国内は運用中と言うコトも有り.NET 3.5を利用し続けているが、今回新規 タイトルなので、.NET4.xを採用 脱Legacy..!!

Slide 43

Slide 43 text

O-3. プラットフォーム審査対応 43 審査対応 Androidフィーチャー獲得の為、完璧な翻訳 & 完璧な動作を早々に求められる (c) 2017-2020 SQUARE ENIX CO., LTD. All Rights Reserved.

Slide 44

Slide 44 text

O-4. 海外版ならではの不具合 44 あるあるな不具合 外国語読めない問題が引き起こす翻訳ミス 2017-2020 Pokelabo Inc./SQUARE ENIX CO., LTD. All Rights Reserved.

Slide 45

Slide 45 text

海外展開を全く考慮していない状態からでも、何とかなる • 当たり前の発想を少し変えるだけで、意外と何とかなったりする • 「出来ない理由を考える」より「出来る方法を考える」方が、楽しいし何とかなる localizeの手法は様々なので、localizeを諦めている会社さんもノリと勢いで一回検討し てみてはどうだろうか?? • 海外に日本のGameを発信しよう!! • 相談乗りますよ^ー^ まとめ 45

Slide 46

Slide 46 text

Happy Hacking !! 46

Slide 47

Slide 47 text

47