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
携帯電話時代から続くモバイルゲームとアプリの関係
Search
gree_tech
PRO
September 18, 2020
Technology
0
350
携帯電話時代から続くモバイルゲームとアプリの関係
GREE Tech Conference 2020 で発表された資料です。
https://techcon.gree.jp/2020/session/Session-5
gree_tech
PRO
September 18, 2020
Tweet
Share
More Decks by gree_tech
See All by gree_tech
REALITY株式会社における開発生産性向上の取り組み: 失敗と成功から学んだこと
gree_tech
PRO
2
130
『ヘブンバーンズレッド』におけるフィールドギミックの裏側
gree_tech
PRO
2
92
セキュリティインシデント対応の体制・運用の試行錯誤 / greetechcon2024-session-a1
gree_tech
PRO
1
100
『アナザーエデン 時空を超える猫』国内海外同時運営実現への道のり ~別々で開発されたアプリを安定して同時リリースするまでの取り組み~
gree_tech
PRO
1
81
『アサルトリリィ Last Bullet』におけるクラウドストリーミング技術を用いたブラウザゲーム化の紹介
gree_tech
PRO
1
92
UnityによるPCアプリの新しい選択肢。「PC版 Google Play Games」への対応について
gree_tech
PRO
1
110
実機ビルドのエラーによる検証ブロッカーを0に!『ヘブンバーンズレッド』のスモークテスト自動化の取り組み
gree_tech
PRO
1
110
"ゲームQA業界の技術向上を目指す! 会社を超えた研究会の取り組み"
gree_tech
PRO
1
140
Jamstack でリニューアルするグリーグループのメディア
gree_tech
PRO
2
300
Other Decks in Technology
See All in Technology
誰も全体を知らない ~ ロールの垣根を超えて引き上げる開発生産性 / Boosting Development Productivity Across Roles
kakehashi
1
230
初心者向けAWS Securityの勉強会mini Security-JAWSを9ヶ月ぐらい実施してきての近況
cmusudakeisuke
0
130
ドメインの本質を掴む / Get the essence of the domain
sinsoku
2
160
Platform Engineering for Software Developers and Architects
syntasso
1
520
テストコード品質を高めるためにMutation Testingライブラリ・Strykerを実戦導入してみた話
ysknsid25
7
2.7k
インフラとバックエンドとフロントエンドをくまなく調べて遅いアプリを早くした件
tubone24
1
430
マルチモーダル / AI Agent / LLMOps 3つの技術トレンドで理解するLLMの今後の展望
hirosatogamo
37
12k
ISUCONに強くなるかもしれない日々の過ごしかた/Findy ISUCON 2024-11-14
fujiwara3
8
870
The Role of Developer Relations in AI Product Success.
giftojabu1
0
130
IBC 2024 動画技術関連レポート / IBC 2024 Report
cyberagentdevelopers
PRO
1
110
マルチプロダクトな開発組織で 「開発生産性」に向き合うために試みたこと / Improving Multi-Product Dev Productivity
sugamasao
1
310
Introduction to Works of ML Engineer in LY Corporation
lycorp_recruit_jp
0
140
Featured
See All Featured
We Have a Design System, Now What?
morganepeng
50
7.2k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
29
2.3k
Statistics for Hackers
jakevdp
796
220k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
33
1.9k
The Cult of Friendly URLs
andyhume
78
6k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
28
9.1k
Practical Orchestrator
shlominoach
186
10k
How to Think Like a Performance Engineer
csswizardry
20
1.1k
Put a Button on it: Removing Barriers to Going Fast.
kastner
59
3.5k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
26
1.4k
Why Our Code Smells
bkeepers
PRO
334
57k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
44
6.8k
Transcript
携帯電話時代から続く モバイルゲームと アプリの関係 グリー株式会社 リードエンジニア 和田孝尚
• 2011年 グリー株式会社 入社 • 2013年 釣り★スタ チーム 所属 自己紹介
2 和田孝尚 リードエンジニア アプリチーム所属 主にアプリ側を全般的に担当
つかみのコーナー 3 運動不足の季節
楽したい 無理しても続かないし 4
できるかな 5 コ
6 ⓘ Start presenting to display the poll results on
this slide. 手がコの字に曲がる?
毎日コツコツ 7 負荷 30
この数字の意味するものは? 8 13
今年で13周年 9
楽したい 今回のキーワード 10
まずは 11
だいたいの流れ 12 1.サービスの説明 1.アプリ開発 と 今までの流れ 1.アプリ開発 と 現在の状況
• 2007年5月サービス開始 • 世界初のモバイルソーシャルゲーム • アプリは2011年から提供 釣り★スタとは 13
画面サンプル 14
ブラウザゲー ム どうみても 15
なんですけど 16
アクションゲーム 魚釣り部分は 17
ふむふむ歴史コーナー 18 2007年〜 FlashLite みなさんよくご存知の 2011年〜 JavaScript 職人によるCanvas操作 2013年〜 LWF*
SWFをHTML5処理に変換 2015年〜 XXXXXXX ここが今回のお話 魚釣りのアクション部分実装の歴史 *LWF(LightWeightSWF)GREE開発のフレームワーク
シンプルなWebViewアプリ リリース当初は 19
現在は 20
きっかけは 21
• 一部機種でタップ遅延が発生 • アニメーション類もモッサリ 何が起きた 22
アクションゲーム 釣り★スタはあくまでも 23
すべてのユーザに 等しい体験を 掲げられた目標 24
ネイティブ化 というわけで提案 25
ネイティブ処理部分で トラブルを起こさない 条件がある 26
ユーザの離脱が怖いから いつでも元に戻せる さらにいうと 27
Webアプリ なのでは? それって 28
楽できなそ う 提案したものの 29
アプリの審査 最大のネックは 30
• 審査期間の待ちでサービスを止めな い • いつでも以前の状態に切り替え可能 • サービス運用に影響しない仕組み 要求をまとめると 31
可能なのか? そもそも 32
開発のおはなし というわけで 33 2014年頃
2013年当時の状況おさらい 34 環境 言語 処理内容 Android Java GREE-SDK(WebView) iOS Objective-C
GREE-SDK(WebView) 普通だ
• あくまで基本はWebViewベース • Webの処理をネイティブに移行 • iOS/Android同時に開発したい アプリの基本 35
cocos2dやってた流れで 36
Cocos2d-JS 突然の 37
• JavaScriptでcocos2dxの処理を記述 • Webでも動く?(PC以外は厳しそう • iOS/Android同時に開発できそう ざっくり紹介 38
ビルド アプリなので 39 伏線
• 書くものがC++からJavaScriptに • JavaScriptのエンジン分処理が追加 • デバッグが手間 ざっくりな印象 40 伏線
ブラウザ上の動作 41
• 実機固有の処理は不可能 • 完全に同じ処理は動かない • いざとなったらWebアプリにでき る? 当時の感想です 42
運用 絶賛稼働中 43
現状の運用範囲内に収まるのか? 現実的な問題 44 画像等の素材は極力、既存の物を利用 アプリ用の素材は必要最低限に抑える 伏線
• サーバ側の処理は基本そのまま • HTMLをjson等に変更するイメージ 稼働中の処理を考慮 45
アプリは受け皿 方向性として 46
• あくまで基本はWebViewベース • Webの処理をネイティブに移行 • iOS/Android同時に開発したい 要求のふりかえり 47
• アプリ側はあくまでWebベース • 命令は基本的にサーバ側主導 • 変更する可能性の表示物を排除 要求に対しての 48
• あくまで基本はWebViewベース • Webの処理をネイティブに移行 • iOS/Android同時に開発したい 要求のふりかえり 49 問題解決
というわけで 50
アンケートタイム 運命の選択 51
• リソース管理で楽をする • JavaScript開発で楽をする • 開発環境で楽をする おしながき 52
53 ⓘ Start presenting to display the poll results on
this slide. どのはなしにしよう
• 1:リソース管理で楽をする • 2:JavaScript開発で楽をする • 3:開発環境で楽をする おしながき 54
リソース管理で楽をする 膨大な画像量とリソース管理 55 2014年〜現在
ユーザの各所持アイテム 56
開発時点で7年分 来年で14周年 57 2014年
都度ダウンロードする方針 さすがに 58
無理 そもそもできるんだっけ? 59
• 通信処理XMLHttpRequestのみ • 内部的に文字列に強制変換 • 今は違います(開発時の問題 できること自体は限られている 60
ないなら作れの精神 欲しいもの 61
• JSで存在するものしか実装できない • 必要な処理はC++で実装 • C++の実装をJavaScriptから呼ぶ 結局書くんだC++ 62
JavaScript-Binding 略してJSB 63
コード実装 64 JSClass js_class = { "ImageLoader", JSCLASS_HAS_PRIVATE, JS_PropertyStub, JS_DeletePropertyStub,
JS_PropertyStub, JS_StrictPropertyStub, JS_EnumerateStub, JS_ResolveStub, JS_ConvertStub, basic_object_finalize 〜中略〜 static JSFunctionSpec funcs[] = { JS_BINDED_FUNC_FOR_DEF(ImageLoader, loadURL), JS_FS_END };
楽できない 痒いとこに手が届かない 65
現在へ 楽チンポイント 66 50楽チン
言語ひとつで 67 JavaScript開発で楽をする 2014年頃
多分無理 ここは素直に 68
関連ライブラリへの対応 ですよね 69
• 既に動いているライブラリ等 • 既に稼働中のアプリ内の認証 • 新規開発のようで違う そもそも 70
• iOS固有処理はObj-C • Android固有処理はjava • C++とObj-C(Obj-C++) • C++とJava(JNI) 結局js以外も書くんだ 71
結局のところ 72 iOSのプロジェクト Androidのプロジェクト Cocos2dx Cocos2d-js Objective-C JAVA 増えた部分
安定してしまえば 書くのはJavaScriptのみ とはいえ 73
Web系の部署なので JavaScriptなら人員確保しやすい? 技術的な難易度は問題なし 74 母体となる原型の処理への理解も必要 そもそも言語的な経験者少数
楽できない 知識範囲がそこそこ必要 75
現在へ 楽チンポイント 76 35楽チン
よろしくおねがいします 77 開発環境で楽をする 2014年頃
古い画像しかないんですが 78
アレっぽい 79
実は存在した運命の選択 80
2014年当時の 81 • 当時のバージョン4 • サポート範囲 不一致 • 古い端末だと少し厳しい •
当時のバージョン2.2 • サポート範囲 一致 • 古い端末でもそこそこ動く
サポート範囲だけ見ると 82
提供 終了 突然の 83
デバッグできて便利 84
更新の度にビルドしたくない せっかく使うなら 85
そもそも 86 JS Xcodeのプロジェクト JS ビルドされたアプリ
参照しているファイルはそもそも別物 そりゃそうじゃ 87
だったら 88 JS Xcodeのプロジェクト JS ビルドされたアプリ
コード実装 89 let project_path = "XXXX/Project/"; let develop_path = project_path+"DebugFiles/DevelopJS/";
let appFiles = [ developPath + "XXXXX.js", developPath + "YYYYY.js", developPath + "ZZZZZ.js" ]; for(let i=0; i<appFiles.length; i++) { require(appFiles[i]); }
直接編集しても動作は変わらず もうひとこえ 90
もう一回requireすればいけるのでは? おそらく 91
コード実装 92 js_list.forEach((js_file)=>{ sys.cleanScript(js_file); }); cc.director.purgeCachedData(); sys.garbageCollect(); cc.game.run();
• cleanScriptでrequireした内容を消去 • メモリ上のキャッシュや値を初期化 • シミュレータのみ利用可能 動いた 93
現在へ 楽チンポイント 94 -120楽チ ン
最近のはなし 95 開発資産の活用 2018-2019年
仕事の合間にコソコソ作成 96
• 実装時の表示物配置が一番時間かかる • 定型文はどの画面も共通とする • デザイン案から見えない部分のみ実装 新規開発時の問題に取り組む 97
こんな感じに 98
• ツール内でテンプレソース埋め込み • 問題解決したら特定の行を削除 • 全部消えたら、一通り開発完了 お手本をどう探すのかも対応 99
楽チンポイント 100 117楽チン
Metal 順調そうに見えるけど 101
新バージョンで消滅 102 jsのプロジェク ト生成できない 2019-2020年
どこかでお会いしたような 103
• CocosCreatorからCocos2d-JS • ベースはWeb、アプリも出力可能 • JavaScriptの記述周りけっこう別物 新世界 104
大ピンチ 楽できない! 105
ほんとにこれ時間内に収まるの? 106
ARカメラ キーワードは 107
だいたいの流れ 108 1.サービスの説明 1.カメラ処理の提案 1.カメラ周りの開発
• 2007年7月サービス開始 • 育成シミュレーションゲーム • アプリは2011年から提供 踊り子クリノッペとは 109
こんな感じ 110
ブラウザゲー ム どうみても 111 2度目
シンプルなWebViewアプリ リリース当初から 112 2度目
ARカメラ つくりたい 113 2020年
やりたいこと 114 +
アプリ実装 したくない 正直なところ 115
Android 絶対めんどくさい 特に 116
楽したい どうにかして 117
考えるんだ 118 環境 言語 処理内容 Android Java GREE-SDK(WebView) iOS Objective-C
GREE-SDK(WebView) 無理だ 2度目
Webで できる? それって 119
できそう 120 環境 バージョン Android Chrome 74.0.3729.157 iOS iOS11以上のSafari WebViewは動作せず
iOSアプリが無理だけどブラウザなら?
すべてのユーザに 等しい体験を 掲げられた目標 121 2度目
なんとか2言語分 122 環境 利用する言語 ブラウザ Android JavaScript iOS アプリ Android
iOS Objective-C フラグ
• ブラウザで楽しよう • iOSアプリで楽しよう • Androidアプリで楽しよう おしながき 123
124 ⓘ Start presenting to display the poll results on
this slide. このはなしにする
• 1:ブラウザで楽しよう • 2:iOSアプリで楽しよう • 3:Androidアプリで楽しよう おしながき 125
楽したい ブラウザで 126
• 簡単なサンプルは出てくる • スマホでのサンプル少なめ • 解像度の問題はいろいろ出てきそう 状況整理 127
<video id="player" controls autoplay></video> <script> var player = document.getElementById('player'); var
handleSuccess = function(stream) { player.srcObject = stream; }; navigator.mediaDevices.getUserMedia({video: true}) .then(handleSuccess); </script> カメラへのアクセス 128
• タグでわかるけどビデオ • 写真ぽくするなら一時停止 • 加工するならcanvasで処理 把握した 129
加工するとこんな 130
画像投稿したい 撮影したら 131
釣りスタでも やったことあるな それって 132
だいたいそんな感じ 133 使う部分 カメラ画像 リサイズ
あとは普通にHTML 134
• ブラウザの横向きは非対応に • カメラは縦長と限らない • フロントカメラは別途反転 悩んだ問題そんななかった 135
リリース 楽チンポイント 136 88楽チン
楽したい iOSアプリで 137
• サンプルすぐ出てくる • カメラ+画像合成の例もたくさん • 解像度の対応辛そう 久々にiOSの画面書く 138
解像度対応 したくない 正直なところ 139
部分的にだけど 140
カメラの表示 崩れる 結合すると 141
よしなにしてもらうにも手続きが必要 142 表示箇所 アプリ画面 カメラ画像 サイズ不定
釣りスタでも やったことあるな それって 143
リリース 楽チンポイント 144 36楽チン
楽したい Androidアプリで 145
AndroidシステムのWebViewで Chromeと互換性があるだろう 状況整理 146
うごかすと黒い 147
• Chromeと互換性があるのは5から • アプリ自体のカメラの権限が必要 • バージョンにより対応が異なる 原因確認 148
• 権限周りのサンプルは多め • ユーザを設定画面に案内 • 再起動後に直前の画面を復元 わかってみると 149
釣りスタでも やったことあるな それって 150
リリース 楽チンポイント 151 18楽チン
よろしく 152 リリース
締めの挨拶 最後に 153
楽あれば苦あ り ですよね 154
155