Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

CEDEC 2015 Cocos2d-x と社内基盤の付き合い方 〜アップストリームファーストを目指して〜

2,962 views

Published on

表示が崩れる場合はダウンロードをお願いします。

Published in: Technology
  • DOWNLOAD THIS BOOKS INTO AVAILABLE FORMAT (Unlimited) ......................................................................................................................... ......................................................................................................................... Download Full PDF EBOOK here { https://tinyurl.com/yyxo9sk7 } ......................................................................................................................... Download Full EPUB Ebook here { https://tinyurl.com/yyxo9sk7 } ......................................................................................................................... ACCESS WEBSITE for All Ebooks ......................................................................................................................... Download Full PDF EBOOK here { https://tinyurl.com/yyxo9sk7 } ......................................................................................................................... Download EPUB Ebook here { https://tinyurl.com/yyxo9sk7 } ......................................................................................................................... Download doc Ebook here { https://tinyurl.com/yyxo9sk7 } ......................................................................................................................... ......................................................................................................................... ......................................................................................................................... .............. Browse by Genre Available eBooks ......................................................................................................................... Art, Biography, Business, Chick Lit, Children's, Christian, Classics, Comics, Contemporary, Cookbooks, Crime, Ebooks, Fantasy, Fiction, Graphic Novels, Historical Fiction, History, Horror, Humor And Comedy, Manga, Memoir, Music, Mystery, Non Fiction, Paranormal, Philosophy, Poetry, Psychology, Religion, Romance, Science, Science Fiction, Self Help, Suspense, Spirituality, Sports, Thriller, Travel, Young Adult,
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • DOWNLOAD THIS BOOKS INTO AVAILABLE FORMAT (Unlimited) ......................................................................................................................... ......................................................................................................................... Download Full PDF EBOOK here { https://tinyurl.com/yyxo9sk7 } ......................................................................................................................... Download Full EPUB Ebook here { https://tinyurl.com/yyxo9sk7 } ......................................................................................................................... ACCESS WEBSITE for All Ebooks ......................................................................................................................... Download Full PDF EBOOK here { https://tinyurl.com/yyxo9sk7 } ......................................................................................................................... Download EPUB Ebook here { https://tinyurl.com/yyxo9sk7 } ......................................................................................................................... Download doc Ebook here { https://tinyurl.com/yyxo9sk7 } ......................................................................................................................... ......................................................................................................................... ......................................................................................................................... .............. Browse by Genre Available eBooks ......................................................................................................................... Art, Biography, Business, Chick Lit, Children's, Christian, Classics, Comics, Contemporary, Cookbooks, Crime, Ebooks, Fantasy, Fiction, Graphic Novels, Historical Fiction, History, Horror, Humor And Comedy, Manga, Memoir, Music, Mystery, Non Fiction, Paranormal, Philosophy, Poetry, Psychology, Religion, Romance, Science, Science Fiction, Self Help, Suspense, Spirituality, Sports, Thriller, Travel, Young Adult,
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here

CEDEC 2015 Cocos2d-x と社内基盤の付き合い方 〜アップストリームファーストを目指して〜

  1. 1. Copyright Drecom Co., Ltd. All Rights Reserved. 1 Cocos2d-x と社内基盤の付き合い方 ∼アップストリームファーストを目指して∼ 株式会社ドリコム 高橋成人 木元将輝
  2. 2. Copyright Drecom Co., Ltd. All Rights Reserved. 2 理想な付き合い方 photo by Brett  Sayer 付き合い方
  3. 3. Copyright Drecom Co., Ltd. All Rights Reserved. 3 難しい photo by greg  westfall 難しい!
  4. 4. Copyright Drecom Co., Ltd. All Rights Reserved. 4 痩せたこともありました photo by Hometown  Beauty 痩せちゃうこともありました
  5. 5. Copyright Drecom Co., Ltd. All Rights Reserved. 5 自社メンテも考えました 自社メンテも してみました photo by Florian  F
  6. 6. 色々あったけど 共に歩むことにしました。 photo by Aurélien  Buttin
  7. 7. Copyright Drecom Co., Ltd. All Rights Reserved. 7 Cocos2d-x の話です、念のため
  8. 8. Copyright Drecom Co., Ltd. All Rights Reserved. 8 アップストリームへの道のりの話 photo by Kevin  Dinkel 今日の話は アップストリーム開発 へ至る道のり
  9. 9. Copyright Drecom Co., Ltd. All Rights Reserved. 9 目的 lCocos2d-x のアップストリーム 開発を採用した理由を展開 l他の方がどう付き合っていってい るか共有したい
  10. 10. Copyright Drecom Co., Ltd. All Rights Reserved. 10 Agenda lモバイルゲームと社内基盤 l次の社内基盤 lオープンソースとの付き合い方 lCocos2d-x を利用する
  11. 11. Copyright Drecom Co., Ltd. All Rights Reserved. 11 Agenda lモバイルゲームと社内基盤 l次の社内基盤 lオープンソースとの付き合い方 lCocos2d-x を利用する
  12. 12. Copyright Drecom Co., Ltd. All Rights Reserved. 12 社内基盤その名は Bisque
  13. 13. Copyright Drecom Co., Ltd. All Rights Reserved. 13 l2013年開発開始
  14. 14. Copyright Drecom Co., Ltd. All Rights Reserved. 14 Bisque の目的 lネイティブシフト lネイティブ環境の整備
  15. 15. Copyright Drecom Co., Ltd. All Rights Reserved. 15 bisque 以前のネイティブ開発環境 liOS - Cocos2d-iphone lAndroid - Cocos2d-android
  16. 16. Copyright Drecom Co., Ltd. All Rights Reserved. 16 bisque 以前のネイティブ開発環境(2) l言語が違う - Objective-C - Java l開発効率が良くない
  17. 17. Copyright Drecom Co., Ltd. All Rights Reserved. 17 次のフレームワーク
  18. 18. Copyright Drecom Co., Ltd. All Rights Reserved. 18 Cocos2d-x 対応プラットフォーム iOS
  19. 19. Copyright Drecom Co., Ltd. All Rights Reserved. 19 Cocos2d-x 特徴 H/W アクセラレータ ネイティブコード 高速 高速
  20. 20. Copyright Drecom Co., Ltd. All Rights Reserved. 20 なぜ選ばれたの? Android iOS 閲覧可能 改変可能 コスト削減 オープンソース
  21. 21. Copyright Drecom Co., Ltd. All Rights Reserved. 21 満たせたのは Cocos2d-x でした v2.0.4 採用
  22. 22. Copyright Drecom Co., Ltd. All Rights Reserved. 22 Cocos2d-x の長所と短所 ゲーム以外の機能 ほぼゼロレイヤ階層 レンダリング 画像フォーマットの表示 ゲーム機能に特化
  23. 23. Copyright Drecom Co., Ltd. All Rights Reserved. 23 短所を補う UIウィジェット 速度 アプリ内課金 暗号処理 サウンド・システム 演出 足りない 未熟 レイヤ階層 レンダリング 画像フォーマットの表示 ゲーム機能に特化
  24. 24. Copyright Drecom Co., Ltd. All Rights Reserved. 24 当時の切り札 WebView Webゲームで培ったノウハウ レンダリング、レイアウト
  25. 25. Copyright Drecom Co., Ltd. All Rights Reserved. 25 bisqueで担保 足りないもの UIウィジェット 速度 アプリ内課金 暗号処理 足りないもの 足りないもの サウンド システム 演出 未熟なもの 足りないものUX向上 足りないもの 切り札 WebView Copyright Drecom Co., Ltd. All Rights Reserved.
  26. 26. Copyright Drecom Co., Ltd. All Rights Reserved. 26 崖っぷちバスターズ® で利用しています 崖っぷちバスターズ®は、壁を壊して、敵を崖から突き落す、新感覚 のぶっ放し協力バトルゲームです。GPS連動したエリアバトルでス コアランキングを競い、エリアNo.1になることで、そのエリアを制 圧しながら拡大していくことができます。また、最大4人で遊べるマ ルチプレイ機能を搭載!仲間と連携して必殺技を繰り出せば、敵に大 ダメージを与えることができます。手に汗握るバトルが繰り広げら れる、「みんなで遊べるゲーム」の決定版です。
  27. 27. Copyright Drecom Co., Ltd. All Rights Reserved. 27 Bisque の目的 lネイティブシフト - ⃝ ネイティブアプリのリリース lネイティブ環境の整備 - ⃝ Cocos2d-x でコスト削減 - ⃝ 足りない機能は追加
  28. 28. photo by Erik  Schepers 2015年 次のフェーズへ
  29. 29. Copyright Drecom Co., Ltd. All Rights Reserved. 29 新たなる要望 利用する機能を選びたい ライセンス 未使用 3rd party libは表記を避けたい 1 パーミッション 未使用機能の許可を避けたい パッケージサイズのシェイプアップ 少しでもサイズを減らしたい
  30. 30. Copyright Drecom Co., Ltd. All Rights Reserved. 30 新たなる要望 ゲーム以外のアプリでの活用 暗号化処理のみを利用したい 2 Cocos2d-x を新しくしたい v2.0.4 は既に3年前(!) 3
  31. 31. Copyright Drecom Co., Ltd. All Rights Reserved. 31 • UIWidgetというのができた • レンダリング性能の向上 • 3D 演出の追加 • C++11 Cocos2d-x の状況 v2 v3 新しい演出や体験• 古い • 情報自体が もう少ない • 開発スピード 低下
  32. 32. Copyright Drecom Co., Ltd. All Rights Reserved. 32 状況整理 機能選択 ゲーム以外の アプリで利用 バージョン アップ 機能全部載せ Cocos2d-x付のコードを含んだ バイナリ△ バージョン v2.0.4 固定
  33. 33. Copyright Drecom Co., Ltd. All Rights Reserved. 33 Agenda lモバイルゲームと社内基盤 l次の社内基盤 lオープンソースとの付き合い方 lCocos2d-x を利用する
  34. 34. Copyright Drecom Co., Ltd. All Rights Reserved. 34 現状の bisque 構成 bisque 課金 sqlite3 サウンド 暗号処理 v2.0.4
  35. 35. Copyright Drecom Co., Ltd. All Rights Reserved. 35 現状の bisque 構成 lbisque ソースファイル - Cocos2d-x の proj ファイルで管理 lbisque 機能 - ソースコードはモジュール化済み - ビルド周りは一枚岩状態 - 機能選択はできるが、ちょっと面倒
  36. 36. Copyright Drecom Co., Ltd. All Rights Reserved. 36 bisque 機能の分離 課金 sqlite3 サウンド 暗号処理 bisque core v2.0.4
  37. 37. Copyright Drecom Co., Ltd. All Rights Reserved. 37 bisque 機能の分離(2) l機能の分離 - 必須機能を Core 化 - 選択可能機能をモジュール化 lBisque の Core 部分と機能毎に proj ファイルを用意 l欲しい機能だけ選べる
  38. 38. Copyright Drecom Co., Ltd. All Rights Reserved. 38 Cocos2d-x からの独立 課金 sqlite3 サウンド 暗号処理 bisque v2.0.4 core
  39. 39. Copyright Drecom Co., Ltd. All Rights Reserved. 39 Cocos2d-x からの独立(2) lBisque Core の proj ファイルを 別管理 lCocos2d-x と分離し、bisque と Cocos2-d x を同列モジュー ル化にした
  40. 40. Copyright Drecom Co., Ltd. All Rights Reserved. 40 before bisque 課金 sqlite3 サウンド 暗号処理 v2.0.4
  41. 41. Copyright Drecom Co., Ltd. All Rights Reserved. 41 after 課金 sqlite3 サウンド 暗号処理 bisque core v2.0.4
  42. 42. Copyright Drecom Co., Ltd. All Rights Reserved. 42 モジュール化 lbisque core と Cocos2d-x を同 列モジュール化し、対等な立場へ lbisque 内でも一部機能をサブモ ジュールとして選択できるように した。
  43. 43. Copyright Drecom Co., Ltd. All Rights Reserved. 43 例: sqlite3 使わないよ 課金 sqlite3 サウンド 暗号処理 bisque core v2.0.4
  44. 44. Copyright Drecom Co., Ltd. All Rights Reserved. 44 sqlite3 さようなら 課金 サウンド 暗号処理 bisque core v2.0.4
  45. 45. Copyright Drecom Co., Ltd. All Rights Reserved. 45 例: 暗号処理だけ使いたいよ 課金 sqlite3 サウンド 暗号処理 bisque core v2.0.4
  46. 46. Copyright Drecom Co., Ltd. All Rights Reserved. 46 Cocos2d-x さようなら 課金 sqlite3 サウンド 暗号処理 bisque core
  47. 47. Copyright Drecom Co., Ltd. All Rights Reserved. 47 利用しない機能さようなら 暗号処理 bisque core
  48. 48. Copyright Drecom Co., Ltd. All Rights Reserved. 48 暗号処理こんにちは 暗号処理 bisque core
  49. 49. Copyright Drecom Co., Ltd. All Rights Reserved. 49 Cocos2d-x と疎結合になったので… 課金 sqlite3 サウンド 暗号処理 bisque v2.0.4 core
  50. 50. Copyright Drecom Co., Ltd. All Rights Reserved. 50 例: こういうのも悪くない 課金 sqlite3 サウンド 暗号処理 bisque core
  51. 51. Copyright Drecom Co., Ltd. All Rights Reserved. 51 例: 大変そうだけどもこういうのもあり 課金 sqlite3 サウンド 暗号処理 bisque core
  52. 52. Copyright Drecom Co., Ltd. All Rights Reserved. 52 フレームワークの選択肢が広がる!! 課金 sqlite3 サウンド 暗号処理 bisque core
  53. 53. Copyright Drecom Co., Ltd. All Rights Reserved. 53 もちろんバージョンアップも楽に! 課金 sqlite3 サウンド 暗号処理 bisque v3.x core
  54. 54. Copyright Drecom Co., Ltd. All Rights Reserved. 54 コンセプト 機能選択 ゲーム以外の アプリで利用 バージョン アップ サブモジュール化で 利用機能を選択可能に⃝ バージョン v2.0.4 固定 bisque 独立により 必要最低限のバイナリ⃝
  55. 55. Copyright Drecom Co., Ltd. All Rights Reserved. 55 残りタスク 機能選択 ゲーム以外の アプリで利用 バージョン アップ ⃝ バージョン v2.0.4 固定 サブモジュール化で 利用機能を選択可能に bisque 独立により 必要最低限のバイナリ⃝
  56. 56. あとは Cocos2d-x の バージョンアップだけ! これは簡単そう! photo by Paul  Hocksenar
  57. 57. Copyright Drecom Co., Ltd. All Rights Reserved. 57 Cocos2d-x バージョン要望 EngRD RD バージョン 固定したい 運用中アプリ の安定化 最新を 使いたい 最新機能 の調査 すべての バージョン アプリ開発者 へ機能提供
  58. 58. photo by Paul  Hocksenar バージョンアップだけじゃ 足りなかったよ…
  59. 59. Copyright Drecom Co., Ltd. All Rights Reserved. 59 バージョン選択が必要だ 機能選択 ゲーム以外の アプリで利用 バージョン 選択 ⃝ バージョン v2.0.4 固定 サブモジュール化で 利用機能を選択可能に 必要最低限のバイナリ⃝
  60. 60. Copyright Drecom Co., Ltd. All Rights Reserved. 60 バージョン選択要件 l全バージョンを選択できる l全バージョンに自社機能を簡単に 入れられる l上記2つを低コストで実現できる
  61. 61. Copyright Drecom Co., Ltd. All Rights Reserved. 61 バージョン選択状況 lCocos2d-x のメインストリーム は常に変化し続ける lCocos2d-x のソースコードを変 更するとバージョンアップ時に支 障をきたす lかと言って変更しないわけには…
  62. 62. photo by Jason  Corneveaux 自社の機能を追加しながら、 メインストリームの最新を 追いかけるうまい方法って あるの?
  63. 63. Copyright Drecom Co., Ltd. All Rights Reserved. 63 あるんです Copyright Drecom Co., Ltd. All Rights Reserved.
  64. 64. Copyright Drecom Co., Ltd. All Rights Reserved. 64 Linux Copyright Drecom Co., Ltd. All Rights Reserved. • オープンソース(GPL v2) • 複数アーキテクチャ対応 • 世界で最も成功している OSS プロジェクトの一つ
  65. 65. Copyright Drecom Co., Ltd. All Rights Reserved. 65 Linux Copyright Drecom Co., Ltd. All Rights Reserved. リリース間隔 2∼3ヶ月 変更コード 200万行以上 参加企業 200社以上 アップストリーム開発
  66. 66. Copyright Drecom Co., Ltd. All Rights Reserved. 66 Agenda lモバイルゲームと社内基盤 l次の社内基盤 lオープンソースとの付き合い方 lCocos2d-x を利用する
  67. 67. Copyright Drecom Co., Ltd. All Rights Reserved. 67 アップストリーム開発 オープンソースソフトウェアに対して 企業が行ったソースコード修正を 元のオープンソースプロジェクトに 還流させるプロセス アップストリームファーストは還流を 第一優先で考えること
  68. 68. photo by Alan  Doyle アップストリームへ還流 (イメージ図)
  69. 69. Copyright Drecom Co., Ltd. All Rights Reserved. 69 アップストリーム開発 自社特有の処理は自社でメンテナンスし 汎用化可能なソースコードを還流する リリースを追いながら自社の処理も 追加できる開発手法
  70. 70. Copyright Drecom Co., Ltd. All Rights Reserved. 70 アップストリーム開発 修正を還流するためメインストリーム の最新を追いかける必要があり、 バージョン変更のコストを下げるのが 必須になる バージョン変更のコストを抑えられる
  71. 71. Copyright Drecom Co., Ltd. All Rights Reserved. 71 自社でメンテナンス
  72. 72. Copyright Drecom Co., Ltd. All Rights Reserved. 72 自社でメンテナンス l追加した処理をメンテし続ける lアップストリームが verup - 自社の変更点をすべて移行 - 時間がたつほど移行対象が増える lこれはうまく行った例
  73. 73. Copyright Drecom Co., Ltd. All Rights Reserved. 73 自社でメンテナンス(2)
  74. 74. Copyright Drecom Co., Ltd. All Rights Reserved. 74 自社でメンテナンス(3) lバージョンアップがうまくいくと は限らない l同じバージョンを使い続ける可能 性も… lバージョンアップは新しいフレー ムワークを作成する時
  75. 75. Copyright Drecom Co., Ltd. All Rights Reserved. 75 自社でメンテナンス(4) lメリット - 変更のスピードが速い - やりたい放題 lデメリット - 変更すればするほど verup が困難 - 独自フレームワーク化 - 新機能が利用できない
  76. 76. Copyright Drecom Co., Ltd. All Rights Reserved. 76 アップストリーム開発
  77. 77. Copyright Drecom Co., Ltd. All Rights Reserved. 77 アップストリーム開発(2) l自社の処理をメインラインへ還流 l対象プロジェクトが verup - 最小限の自社の変更点を移行 - 移行対象は減らせる
  78. 78. Copyright Drecom Co., Ltd. All Rights Reserved. 78 アップストリーム開発(3) l新機能を利用可能 l最新版を追える状況になる lバージョンアップは Cocos2d-x を利用する過程でしかない
  79. 79. Copyright Drecom Co., Ltd. All Rights Reserved. 79 アップストリーム開発(4) lメリット - 最新版を追いやすい - 新機能が利用可能 - (受け入れられれば)メンテコスト減 lデメリット - 追い続けなければいけない - 反映されるまで遅い(保障もなし)
  80. 80. photo by Sudhamshu  Hebbar アップストリーム開発 採用基準 はどうやった?
  81. 81. Copyright Drecom Co., Ltd. All Rights Reserved. 81 アップストリーム開発採用判断基準 lオープンさ l機能追加の頻度 lプロジェクトの熱量 lスポンサー
  82. 82. Copyright Drecom Co., Ltd. All Rights Reserved. 82 はどう? オープンさ どうして? プロジェクトの進捗が見えるのでプロジェクト の方向性を見通しやすい。そのため追いかけや すい環境になる。 Trello でリリースのロードマップ提示 github 上で進捗管理 オープンさは十分
  83. 83. Copyright Drecom Co., Ltd. All Rights Reserved. 83 はどう? 追加機能の頻度 どうして? 機能追加があるからこそアップストリームを追 う利点がある。追加機能がないのであれば追う 必要はない。 バージョンアップ時に5∼10万行追加 新機能・新プラットフォームの対応 最新版を追う利点はある
  84. 84. Copyright Drecom Co., Ltd. All Rights Reserved. 84 はどう? プロジェクトの熱量 どうして? 参加する開発者が多いことで機能追加の勢いや 品質の高さにも影響する。 github の Pull Request が 100件以上 Cocos2d-x のフォーラムも活発
  85. 85. Copyright Drecom Co., Ltd. All Rights Reserved. 85 はどう? スポンサー どうして? 実績がないと契約されない。(お金👌の関係 is シビア)安定したプロダクト運用を要求される。 数が多いに越したことはない。 SoC メーカから携帯端末メーカ、パブリッ シャーまでスポンサー、パートナーシップを組 んでいる。
  86. 86. photo by Brett  Sayer Cocos2d-x とは どう付き合っている?
  87. 87. Copyright Drecom Co., Ltd. All Rights Reserved. 87 github 自社gitlab clone pull Cocos2d-x と付き合うブランチ戦略
  88. 88. Copyright Drecom Co., Ltd. All Rights Reserved. 88 Cocos2d-x と付き合うブランチ戦略(2) lgithub から clone, pull してリポ ジトリを同期する l自社ブランチをリリースタグから 作成、変更点追加 l前ブランチから変更点を merge lリリース毎に繰り返す
  89. 89. Copyright Drecom Co., Ltd. All Rights Reserved. 89 ブランチ戦略の利点 lgithub と同期しながら変更点を 自社で管理し続けられる lgit リポジトリが同期しているの で Cocos2d-x メインストリーム へ送付する Pull request 作成が 低コストになる
  90. 90. Copyright Drecom Co., Ltd. All Rights Reserved. 90 アプリケーションでの利用方法 アプリ自社gitlab Classes Resources proj 群 cocos2dsubmodule v3.3v3.4v3.5
  91. 91. Copyright Drecom Co., Ltd. All Rights Reserved. 91 アプリケーションでの利用方法(2) lアプリ内の Cocos2d-x ディレク トリを git サブモジュールとして 扱う l利用したいバージョンのブランチ を指定する
  92. 92. Copyright Drecom Co., Ltd. All Rights Reserved. 92 この利用方法の利点 lアプリケーション側で利用する Cocos2d-x のバージョン変更が 気軽になる。 lアプリケーションを開発しつつ Cocos2d-x のソース修正が可能 Pull Request 作成が低コストに なる
  93. 93. Copyright Drecom Co., Ltd. All Rights Reserved. 93 アップストリーム開発を採用したので lCocos2d-x の最新版が利用可能 lバージョンも利用可能な土壌が出 来上がった。 l変更を還流するので社外の人もハ ッピー(になる予定)
  94. 94. Copyright Drecom Co., Ltd. All Rights Reserved. 94 バージョン 選択 アップストリームで バージョン選択可能に⃝ コンセプト 機能選択 ゲーム以外の アプリで利用 ⃝ サブモジュール化で 利用機能を選択可能に ⃝ bisque 独立により 必要最低限のバイナリ
  95. 95. Copyright Drecom Co., Ltd. All Rights Reserved. 95 Agenda lモバイルゲームと社内基盤 l次の社内基盤 lオープンソースとの付き合い方 lCocos2d-x を利用する
  96. 96. Copyright Drecom Co., Ltd. All Rights Reserved. 96 アップストリーム開発
  97. 97. Copyright Drecom Co., Ltd. All Rights Reserved. 97 Cocos2d-x 2.xから3.xで大きく変化した事
  98. 98. Copyright Drecom Co., Ltd. All Rights Reserved. 98 ・C++11準拠 ・3D機能 ・描画処理 ・ローカルストレージ機能 ・スクリプト関連
  99. 99. Copyright Drecom Co., Ltd. All Rights Reserved. 99 ・C++11準拠 ・3D機能 ・描画処理 ・ローカルストレージ機能 ・スクリプト関連 ・C++11準拠
  100. 100. Copyright Drecom Co., Ltd. All Rights Reserved. 100 ・C++11準拠 ・3D機能 ・描画処理 ・ローカルストレージ機能 ・スクリプト関連 ・3D機能
  101. 101. Copyright Drecom Co., Ltd. All Rights Reserved. 101 ・C++11準拠 ・3D機能 ・描画処理 ・ローカルストレージ機能 ・スクリプト関連 ・描画処理
  102. 102. Copyright Drecom Co., Ltd. All Rights Reserved. 102 ・C++11準拠 ・3D機能 ・描画処理 ・ローカルストレージ機能 ・スクリプト関連 ・ローカスストレージ機能
  103. 103. Copyright Drecom Co., Ltd. All Rights Reserved. 103 ・C++11準拠 ・3D機能 ・描画処理 ・ローカルストレージ機能 ・スクリプト関連・スクリプト関連
  104. 104. Copyright Drecom Co., Ltd. All Rights Reserved. 104 ・C++11準拠 ・3D機能 ・描画処理 ・ローカルストレージ機能 ・スクリプト関連 他にも色々 FileUtil Font MathLib 3D Socket MySQL ScriptBind
  105. 105. Copyright Drecom Co., Ltd. All Rights Reserved. 105 ・C++11準拠 ・3D機能 ・描画処理 ・ローカルストレージ機能 ・スクリプト関連 ・描画処理
  106. 106. Copyright Drecom Co., Ltd. All Rights Reserved. 106 Director drawScene() Scene addChild() visit() Sprite visit() draw() OpenGL  ES API glDrawArrays()version2
  107. 107. Copyright Drecom Co., Ltd. All Rights Reserved. 107 Director drawScene() render() Scene addChild() visit() render() Sprite visit() draw() Renderer addCommand() render() drawXXXX() OpenGL  ES API glDrawElements() version3
  108. 108. Copyright Drecom Co., Ltd. All Rights Reserved. 108 Director drawScene() render() Scene addChild() visit() render() Sprite visit() draw() Renderer addCommand() render() drawXXXX() OpenGL  ES API glDrawElements() RenderCommand RenderCommand version3
  109. 109. Copyright Drecom Co., Ltd. All Rights Reserved. 109 Director drawScene() render() Scene addChild() visit() render() Sprite visit() draw() Renderer addCommand() render() drawXXXX() OpenGL  ES API glDrawArrays() glDrawElements() RenderCommand RenderCommand version2 version3
  110. 110. Copyright Drecom Co., Ltd. All Rights Reserved. 110 ・Rendererクラスの追加 ・Drawメソッドの変更 ・Draw Callに関する変更
  111. 111. Copyright Drecom Co., Ltd. All Rights Reserved. 111 ・Draw Callに関する変更 ・基本的にglDrawArraysはglDrawElementsへ変更
  112. 112. Copyright Drecom Co., Ltd. All Rights Reserved. 112 ・Draw Callに関する変更 ・基本的にglDrawArraysはglDrawElementsへ変更 ・VAO/VBOの積極的な利用
  113. 113. Copyright Drecom Co., Ltd. All Rights Reserved. 113 ・Rendererクラスの追加 ・RendererにQueueされたRenderCommandを まとめてソート、実行する描画処理 Renderer RenderCommand RenderCommand RenderCommand Sprite::draw() OpenGL  ES  API glDrawElements() Sprite::draw() Sprite::draw()
  114. 114. Copyright Drecom Co., Ltd. All Rights Reserved. 114 ・Rendererクラスの追加 ・RendererにQueueされたRenderCommandを まとめてソート、実行する描画処理 ・RenderCommandによる振る舞いの変化
  115. 115. Copyright Drecom Co., Ltd. All Rights Reserved. 115 ・Rendererクラスの追加 ・RendererにQueueされたRenderCommandを まとめてソート、実行する描画処理 ・RenderCommandによる振る舞いの変化 TrianglesCommand CustomCommand BatchCommand GroupCommand MeshCommand QuadCommand
  116. 116. Copyright Drecom Co., Ltd. All Rights Reserved. 116 ・Rendererクラスの追加 ・RendererにQueueされたRenderCommandを まとめてソート、実行する描画処理 ・RenderCommandによる振る舞いの変化 ・Global/Local Z Orderの概念
  117. 117. Copyright Drecom Co., Ltd. All Rights Reserved. 117 ・Drawメソッドの変更 ・RendererのQueueに対してRenderCommandを追加 Sprite::draw() glDrawArrays() version2
  118. 118. Copyright Drecom Co., Ltd. All Rights Reserved. 118 ・Drawメソッドの変更 ・RendererのQueueに対してRenderCommandを追加 Sprite::draw() glDrawArrays() RendererSprite::draw() glDrawElements() version2 version3
  119. 119. Copyright Drecom Co., Ltd. All Rights Reserved. 119 ・Drawメソッドの変更 ・RendererのQueueに対してRenderCommandを追加 ・CustomCommandによるコールバック処理 Renderer Sprite::draw() Sprite::callback() glDrawElements()
  120. 120. Copyright Drecom Co., Ltd. All Rights Reserved. 120 ・Rendererクラスの追加 ・Drawメソッドの変更 ・Draw Callに関する変更
  121. 121. Copyright Drecom Co., Ltd. All Rights Reserved. 121 Cocos2d-xを利用する上での パフォーマンス・チューニング
  122. 122. Copyright Drecom Co., Ltd. All Rights Reserved. 122 ・アップストリーム開発を行う上で ・メインストリームに対応していく
  123. 123. Copyright Drecom Co., Ltd. All Rights Reserved. 123 ・アップストリーム開発を行う上で ・メインストリームに対応していく ・原則としてCocos2d-xのソースコードには 手を入れない
  124. 124. Copyright Drecom Co., Ltd. All Rights Reserved. 124 ・アップストリーム開発を行う上で ・メインストリームに対応していく ・原則としてCocos2d-xのソースコードには 手を入れない ・バグ修正やチューニングはpull request等で 積極的に展開していく
  125. 125. Copyright Drecom Co., Ltd. All Rights Reserved. 125 ・Cocos2d-xとの付き合い方 ・そもそもCocos2d-x自体はパフォーマンス重視 というよりも実装コストの軽減や汎用性を 重視している
  126. 126. Copyright Drecom Co., Ltd. All Rights Reserved. 126 ・Cocos2d-xとの付き合い方 ・そもそもCocos2d-x自体はパフォーマンス重視 というよりも実装コストの軽減や汎用性を 重視している ・Cocos2d-xの機能を最大限に利用しながら パフォーマンスの改善を目指す
  127. 127. Copyright Drecom Co., Ltd. All Rights Reserved. 127 ・パフォーマンス・チューニング上の前提 ・Cocos2d-xで実装されている機能を利用する為、 グラフィックスAPIはOpenGL ESを利用
  128. 128. Copyright Drecom Co., Ltd. All Rights Reserved. 128 ・パフォーマンス・チューニング上の前提 ・Cocos2d-xで実装されている機能を利用する為、 グラフィックスAPIはOpenGL ESを利用 iOS AppleA7 Metal Android -­ Vulkan
  129. 129. Copyright Drecom Co., Ltd. All Rights Reserved. 129 ・パフォーマンス・チューニング上の前提 ・Cocos2d-xで実装されている機能を利用する為、 グラフィックスAPIはOpenGL ESを利用 ・2Dのコマ割りアニメーションによる表現手法に 対して問題と成り得る箇所を探る
  130. 130. Copyright Drecom Co., Ltd. All Rights Reserved. 130 ・CPU側の問題 ・GPU側の問題 ・CPU/GPU共通の問題
  131. 131. Copyright Drecom Co., Ltd. All Rights Reserved. 131 ・CPU側の問題 ・Draw Callの問題
  132. 132. Copyright Drecom Co., Ltd. All Rights Reserved. 132 ・CPU側の問題 ・Draw Callの問題 glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glUseProgram(program); glUniformMatrix4fv(umvp, 1, GL_FALSE, current.mat); glUniform1i(utxt, BQBORDER_SAMPLER); glBindTexture(GL_TEXTURE_2D, texture[i]); glBindBuffer(GL_ARRAY_BUFFER, vbo[i]); glEnableVertexAttribArray(kCCVertexAttrib_Position); glEnableVertexAttribArray(kCCVertexAttrib_Color); glEnableVertexAttribArray(kCCVertexAttrib_TexCoords); glVertexAttribPointer(kCCVertexAttrib_Position, 3, GL_FLOAT, GL_FALSE, sizeof(ccV3F_C4B_T2F), (GLvoid*)__builtin_offsetof(ccV3F_C4B_T2F glVertexAttribPointer(kCCVertexAttrib_Color, 4, GL_UNSIGNED_BYTE, GL_TRUE, sizeof(ccV3F_C4B_T2F), (GLvoid*)__builtin_offsetof(ccV3F_C4 glVertexAttribPointer(kCCVertexAttrib_TexCoords, 2, GL_FLOAT, GL_FALSE, sizeof(ccV3F_C4B_T2F), (GLvoid*)__builtin_offsetof(ccV3F_C4B_T glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, eao); glDrawElements(GL_TRIANGLES, indexnum, GL_UNSIGNED_SHORT, 0); glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); glBindBuffer(GL_ARRAY_BUFFER, 0); glDrawElements
  133. 133. Copyright Drecom Co., Ltd. All Rights Reserved. 133 ・CPU側の問題 ・Draw Callの問題 Draw Callに関するOpenGL ESのAPIは 呼び出し回数がボトルネックに繋がる為 呼び出し回数を抑える
  134. 134. Copyright Drecom Co., Ltd. All Rights Reserved. 134 ・CPU側の問題 ・Draw Callの問題 glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glUseProgram(program); glUniformMatrix4fv(umvp, 1, GL_FALSE, current.mat); glUniform1i(utxt, BQBORDER_SAMPLER); glBindTexture(GL_TEXTURE_2D, texture[i]); glBindBuffer(GL_ARRAY_BUFFER, vbo[i]); glEnableVertexAttribArray(kCCVertexAttrib_Position); glEnableVertexAttribArray(kCCVertexAttrib_Color); glEnableVertexAttribArray(kCCVertexAttrib_TexCoords); glVertexAttribPointer(kCCVertexAttrib_Position, 3, GL_FLOAT, GL_FALSE, sizeof(ccV3F_C4B_T2F), (GLvoid*)__builtin_offsetof(ccV3F_C4B_T2F glVertexAttribPointer(kCCVertexAttrib_Color, 4, GL_UNSIGNED_BYTE, GL_TRUE, sizeof(ccV3F_C4B_T2F), (GLvoid*)__builtin_offsetof(ccV3F_C4 glVertexAttribPointer(kCCVertexAttrib_TexCoords, 2, GL_FLOAT, GL_FALSE, sizeof(ccV3F_C4B_T2F), (GLvoid*)__builtin_offsetof(ccV3F_C4B_T glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, eao); glDrawElements(GL_TRIANGLES, indexnum, GL_UNSIGNED_SHORT, 0); glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); glBindBuffer(GL_ARRAY_BUFFER, 0);
  135. 135. Copyright Drecom Co., Ltd. All Rights Reserved. 135 ・CPU側の問題 glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glUseProgram(program); glUniformMatrix4fv(umvp, 1, GL_FALSE, current.mat); glUniform1i(utxt, BQBORDER_SAMPLER); glBindTexture(GL_TEXTURE_2D, texture[i]); glBindBuffer(GL_ARRAY_BUFFER, vbo[i]); glEnableVertexAttribArray(kCCVertexAttrib_Position); glEnableVertexAttribArray(kCCVertexAttrib_Color); glEnableVertexAttribArray(kCCVertexAttrib_TexCoords); glVertexAttribPointer(kCCVertexAttrib_Position, 3, GL_FLOAT, GL_FALSE, sizeof(ccV3F_C4B_T2F), (GLvoid*)__builtin_offsetof(ccV3F_C4B_T2F glVertexAttribPointer(kCCVertexAttrib_Color, 4, GL_UNSIGNED_BYTE, GL_TRUE, sizeof(ccV3F_C4B_T2F), (GLvoid*)__builtin_offsetof(ccV3F_C4 glVertexAttribPointer(kCCVertexAttrib_TexCoords, 2, GL_FLOAT, GL_FALSE, sizeof(ccV3F_C4B_T2F), (GLvoid*)__builtin_offsetof(ccV3F_C4B_T glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, eao); glDrawElements(GL_TRIANGLES, indexnum, GL_UNSIGNED_SHORT, 0); glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); glBindBuffer(GL_ARRAY_BUFFER, 0); ・Draw Callの問題(Cocos2d-x) glDrawElements
  136. 136. Copyright Drecom Co., Ltd. All Rights Reserved. 136 ・CPU側の問題 glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glUseProgram(program); glUniformMatrix4fv(umvp, 1, GL_FALSE, current.mat); glUniform1i(utxt, BQBORDER_SAMPLER); glBindTexture(GL_TEXTURE_2D, texture[i]); glBindBuffer(GL_ARRAY_BUFFER, vbo[i]); glEnableVertexAttribArray(kCCVertexAttrib_Position); glEnableVertexAttribArray(kCCVertexAttrib_Color); glEnableVertexAttribArray(kCCVertexAttrib_TexCoords); glVertexAttribPointer(kCCVertexAttrib_Position, 3, GL_FLOAT, GL_FALSE, sizeof(ccV3F_C4B_T2F), (GLvoid*)__builtin_offsetof(ccV3F_C4B_T2F glVertexAttribPointer(kCCVertexAttrib_Color, 4, GL_UNSIGNED_BYTE, GL_TRUE, sizeof(ccV3F_C4B_T2F), (GLvoid*)__builtin_offsetof(ccV3F_C4 glVertexAttribPointer(kCCVertexAttrib_TexCoords, 2, GL_FLOAT, GL_FALSE, sizeof(ccV3F_C4B_T2F), (GLvoid*)__builtin_offsetof(ccV3F_C4B_T glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, eao); glDrawElements(GL_TRIANGLES, indexnum, GL_UNSIGNED_SHORT, 0); glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); glBindBuffer(GL_ARRAY_BUFFER, 0); ・Draw Callの問題(Cocos2d-x) glDrawElements Texture  /  Shader
  137. 137. Copyright Drecom Co., Ltd. All Rights Reserved. 137 ・CPU側の問題 glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glUseProgram(program); glUniformMatrix4fv(umvp, 1, GL_FALSE, current.mat); glUniform1i(utxt, BQBORDER_SAMPLER); glBindTexture(GL_TEXTURE_2D, texture[i]); glBindBuffer(GL_ARRAY_BUFFER, vbo[i]); glEnableVertexAttribArray(kCCVertexAttrib_Position); glEnableVertexAttribArray(kCCVertexAttrib_Color); glEnableVertexAttribArray(kCCVertexAttrib_TexCoords); glVertexAttribPointer(kCCVertexAttrib_Position, 3, GL_FLOAT, GL_FALSE, sizeof(ccV3F_C4B_T2F), (GLvoid*)__builtin_offsetof(ccV3F_C4B_T2F glVertexAttribPointer(kCCVertexAttrib_Color, 4, GL_UNSIGNED_BYTE, GL_TRUE, sizeof(ccV3F_C4B_T2F), (GLvoid*)__builtin_offsetof(ccV3F_C4 glVertexAttribPointer(kCCVertexAttrib_TexCoords, 2, GL_FLOAT, GL_FALSE, sizeof(ccV3F_C4B_T2F), (GLvoid*)__builtin_offsetof(ccV3F_C4B_T glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, eao); glDrawElements(GL_TRIANGLES, indexnum, GL_UNSIGNED_SHORT, 0); glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); glBindBuffer(GL_ARRAY_BUFFER, 0); ・Draw Callの問題(Cocos2d-x) glDrawElements Vertex
  138. 138. Copyright Drecom Co., Ltd. All Rights Reserved. 138 ・CPU側の問題 glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glUseProgram(program); glUniformMatrix4fv(umvp, 1, GL_FALSE, current.mat); glUniform1i(utxt, BQBORDER_SAMPLER); glBindTexture(GL_TEXTURE_2D, texture[i]); glBindBuffer(GL_ARRAY_BUFFER, vbo[i]); glEnableVertexAttribArray(kCCVertexAttrib_Position); glEnableVertexAttribArray(kCCVertexAttrib_Color); glEnableVertexAttribArray(kCCVertexAttrib_TexCoords); glVertexAttribPointer(kCCVertexAttrib_Position, 3, GL_FLOAT, GL_FALSE, sizeof(ccV3F_C4B_T2F), (GLvoid*)__builtin_offsetof(ccV3F_C4B_T2F glVertexAttribPointer(kCCVertexAttrib_Color, 4, GL_UNSIGNED_BYTE, GL_TRUE, sizeof(ccV3F_C4B_T2F), (GLvoid*)__builtin_offsetof(ccV3F_C4 glVertexAttribPointer(kCCVertexAttrib_TexCoords, 2, GL_FLOAT, GL_FALSE, sizeof(ccV3F_C4B_T2F), (GLvoid*)__builtin_offsetof(ccV3F_C4B_T glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, eao); glDrawElements(GL_TRIANGLES, indexnum, GL_UNSIGNED_SHORT, 0); glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); glBindBuffer(GL_ARRAY_BUFFER, 0); ・Draw Callの問題(Cocos2d-x) glDrawElements Vertex Texture  /  Shader
  139. 139. Copyright Drecom Co., Ltd. All Rights Reserved. 139 ・CPU側の問題 ・CustomCommandによるコールバック処理 ・Global/Local Z Orderの概念 ・Drawメソッドの変更 ・Rendererクラスの追加
  140. 140. Copyright Drecom Co., Ltd. All Rights Reserved. 140 ・CPU側の問題 ・CustomCommandによるコールバック処理 ・Global/Local Z Orderの概念 RenderCommand RenderCommand RenderCommand RenderCommand RenderCommand RenderCommand RenderCommand CustomCommand RenderCommand RenderCommand
  141. 141. Copyright Drecom Co., Ltd. All Rights Reserved. 141 ・CPU側の問題 ・CustomCommandによるコールバック処理 ・Global/Local Z Orderの概念 ・Drawメソッドの変更 ・Rendererクラスの追加
  142. 142. Copyright Drecom Co., Ltd. All Rights Reserved. 142 ・CPU側の問題 ・Cocos2d-xのversion3ではAPI呼び出し回数の削減 に対する最適化はきちんと行われている ・Cocos2d-xの最適化の手法を理解した上で、 手法に沿った手段を用いて実装を
  143. 143. Copyright Drecom Co., Ltd. All Rights Reserved. 143 ・ピクセル処理の問題 ・GPU側の問題
  144. 144. Copyright Drecom Co., Ltd. All Rights Reserved. 144 ・ピクセル処理の問題 ・オーバードロー ・フラグメントシェーディング ・GPU側の問題
  145. 145. Copyright Drecom Co., Ltd. All Rights Reserved. 145 ・ピクセル処理の問題「オーバードロー」 ・1ピクセルに対して2回以上の描画処理 ・GPU側の問題
  146. 146. Copyright Drecom Co., Ltd. All Rights Reserved. 146 ・ピクセル処理の問題「オーバードロー」 ・奥から手前への描画 ・アルファブレンド ・GPU側の問題
  147. 147. Copyright Drecom Co., Ltd. All Rights Reserved. 147 ・ピクセル処理の問題「オーバードロー」 ・奥から手前への描画 ・アルファブレンド=奥から手前への描画 ・GPU側の問題
  148. 148. Copyright Drecom Co., Ltd. All Rights Reserved. 148 ・ピクセル処理の問題「オーバードロー」 ・奥から手前への描画 ・アルファブレンド→透過部分を最小限に ・GPU側の問題
  149. 149. Copyright Drecom Co., Ltd. All Rights Reserved. 149 ・ピクセル処理の問題「オーバードロー」 ・SpritePolygonの利用 ・GPU側の問題
  150. 150. Copyright Drecom Co., Ltd. All Rights Reserved. 150 ・ピクセル処理の問題「フラグメントシェーディング」 ・シェーダーのパフォーマンス ・GPU側の問題
  151. 151. Copyright Drecom Co., Ltd. All Rights Reserved. 151 ・ピクセル処理の問題「フラグメントシェーディング」 ・シェーダーのパフォーマンス 複雑な処理を避ける 分岐の数を減らす ループを無くす 演算精度を下げる※ ・GPU側の問題
  152. 152. Copyright Drecom Co., Ltd. All Rights Reserved. 152 ・透過部分の範囲を狭く、重なりを浅く ・SpritePolygonの利用を検討 ・独自のシェーダーについての最適化 ・サードパーティのシェーダーの確認 ・GPU側の問題 ・オーバードロー ・フラグメントシェーディング
  153. 153. Copyright Drecom Co., Ltd. All Rights Reserved. 153 ・GPUによって 部分的にパフォーマンスが異なる 最適なチューニング箇所が異なる ・Cocos2d-xを利用する上でもGPUの理解を ・GPU側の問題
  154. 154. Copyright Drecom Co., Ltd. All Rights Reserved. 154 ・CPU/GPU共通の問題 ・メモリ帯域幅の問題
  155. 155. Copyright Drecom Co., Ltd. All Rights Reserved. 155 ・CPU/GPU共通の問題 ・メモリ帯域幅の問題 ・iPhone5:AppleA6で8.5GB/sec程度 ・iPhone5s:AppleA7で15GB/sec程度
  156. 156. Copyright Drecom Co., Ltd. All Rights Reserved. 156 ・CPU/GPU共通の問題 ・メモリ帯域幅の問題 ・メモリとその帯域幅はCPU/GPUで共有 CPU GPU MEM  /  VRAM
  157. 157. Copyright Drecom Co., Ltd. All Rights Reserved. 157 ・CPU/GPU共通の問題 ・メモリ帯域幅の問題 ・メモリとその帯域幅はCPU/GPUで共有 CPU GPU MEM  /  VRAM マルチスレッド テクスチャ
  158. 158. Copyright Drecom Co., Ltd. All Rights Reserved. 158 ・CPU/GPU共通の問題 オブジェクトサイズ/数の削減 テクスチャサイズ/数の削減 圧縮テクスチャの利用 マルチテクスチャ等の再考 ・メモリ帯域幅の問題
  159. 159. Copyright Drecom Co., Ltd. All Rights Reserved. 159 ・CPU/GPU共通の問題 ・CPUやGPUそれぞれの最適化だけでは 解消されない問題 ・パフォーマンスに大きな影響を与えるが、 表面化しづらい
  160. 160. Copyright Drecom Co., Ltd. All Rights Reserved. 160 ・CPU側の問題 ・GPU側の問題 ・CPU/GPU共通の問題
  161. 161. Copyright Drecom Co., Ltd. All Rights Reserved. 161 まとめ
  162. 162. ドッグイヤーと言われる程に 技術の進歩が早くなっており、 photo by R∂lf  Κλενγελ
  163. 163. ユーザの要求も 増えてきています photo by Matthias  Ripp
  164. 164. それに伴い、 アップストリーム開発 が選択肢になる 機会が増えてきました
  165. 165. 現在、アップストリーム 開発を採用している企業 が少ないので、 Upstream します
  166. 166. アップストリーム開発 に挑戦すること にしました photo by Patrik  Theander
  167. 167. ぜひ、みなさまも 参加してください photo by Johan  Larkander
  168. 168. photo by Tintin44 一人で悩まず、 問題を共有しましょう
  169. 169. 開発者間で Win-win の関係を 築けたら幸いです
  170. 170. Any Questions? photo by Matthias  Ripp
  171. 171. Copyright Drecom Co., Ltd. All Rights Reserved. 171 ご静聴ありがとうございました
  172. 172. Copyright Drecom Co., Ltd. All Rights Reserved. 172 参考文献
  173. 173. Copyright Drecom Co., Ltd. All Rights Reserved. 173 参考文献 lオープンソースにおけるアップス トリーム開発の意義

×