-
Notifications
You must be signed in to change notification settings - Fork 129
Home jp
Last Modified 2016-06-16
- 公式 プロジェクトリンク : https://github.com/CloudBreadProject/CloudBread
- 公式 プロジェクトフェイスブックグルー : https://www.facebook.com/groups/cloudBreadProject/
- 公式 API reference : http://cloudbreadproject.github.io/
この文書では、開発者に向けたCloudBreadプロジェクト使用手順をご紹介致します。CloudBreadの設置関連文書は **CloudBread インストールガイド**を参考にしてください。
CloudBreadは、モバイルゲーム、モバイルアプリを向けたほとんどの機能を提供する無料オープンソース(MITライセンス)プロジェクト
100余りのBusiness Logicを基本提供
- モバイルゲーム開発者はアプリ開発のみが集中
- CloudBreadが提供する APIをパラメータだけ合わせて呼出
- 開発及びテストのためのPostmanコレクションや例題テストアプリ提供
- RestfulAPIを呼び出す関数を別に作ることが必要ないです
クラウドを活用した最小~最大規模バックエンドサーバ構築
- クラウド環境を基本アーキテクチャで開発してクラウドの長所をそのまま使用
- サーバーが拡張されてもモバイルゲームとアプリのコードは変わらない
- 垂直拡張(Scale-up)と受刑拡張(Scale-out)選択は自由
- ゲームの性格に合ったサービスのみ使用可能(リアルタイムの通信機能は 除外、大量のログの処理機能除外など)
セキュリティ、管理および統計情報提供
- 認証(Authentication)とデータ暗号化(AES256)を選択的使用可能
- GM管理者道具提供(CloudBread-Admin-Webプロジェクト)
- 基本統計を向けた配置(DAU、HAU、DARPUなど)提供
- 無料技術教育提供(ヘカトンやキャンプ)
CloudBreadはAPIサーバー(Core)とリアルタイム通信を行うための Socketサーバーを選択して使用可能です。CloudBreadとゲームクライアントとの通信は下記のように行われます。 リアルタイムのコミュニケーション部分は後でもっと説明していたします。
- HTTP プロトコル
- Restful API
- JSON 形式
例えば、イベント照会API SelGameEvents HTTP Request構造
{
memberID = "member1"
}
**SelGameEventsがリターンするHTTP Response 構造
{
EventID ="eventID1", EventName="クリスタル1", 期間=…
EventID =“eventID2", EventName="良いアイテム1", 期間=…
EventID ="eventID13", EventName="ボーナスアイテム", 期間=…
}
SelGameEventsと同じAPIをCloudBreadではBehaviorに分類して、各 Behaviorたちを一般化したAPIを提供します。つまり、API Game Logic=Behavio]rでGame Logic=APIであるため、API機能を追加したり、変更する場合、フレームワークを通じて簡単に修正も可能です。
CloudBreadが 提供するBehavior リスト CloudBreadは2016年3月基準109つのBehaviorを支援しています。全体 Behaviorリストをご覧いただくには下記のリンクを参考にしてください。 CloudBread behavior list wiki page
CloudBread データが 保存される データベース BehaviorがゲーマーのActionなら、Actionを記録するObjectがDatabaseです。たとえば、次のようなデータベースのテーブルに情報が記録されます。
情報 | データベーステーブル |
---|---|
会員 | Member |
管理者 | Admin |
購買 | Purchase |
アイテム | Item |
メンバーのアイテム | MemberItem |
ゲーム情報 | GameInfo |
ステージ | Stage |
プレゼント | Gift |
公知事項 | Notice |
イベント | Event |
クーポン | Coupon |
CloudBreadの全体データベース構造やテーブル詳細スキーマ情報をご覧いただくには下記の リンクを参考にしてください。CloudBread database design
CloudBreadはクライアントのゲーム開発者の 便宜を図るため、Demoテストのためのサーバと APIを提供します。 APIをテストするためには開発者の準備事項という文書に含まれたPostmanをダウンロードから インストールします。PostmanはREST APIを開発してテストする時に有用な無料ツールです。
- Postmanダウンロード: http://www.getpostman.com/でダウンロード後Mac用、またはWindows Chrome用を 設置
- CloudBreadでAPIをテストするための API 目録であるPostman Collectionをダウンロード(2016-03-26 バージョン)
- ダウンロードしたcollectionファイルを Postmanで"Import"を押してダウンロードしたcollectionファイルをimport遂行
- 左側collectionタブにCloudBread collectionが見えれば、完了
もう CloudBreadで 提供する APIを DEMO サーバーで テスト 可能です。
- Demoサーバアドレスはいつでも変更されことができます。
- テスト目的でしばらく使用お願いします。
- 最も小さなCloud単位でサービス中です。データが周期的に初期化されます。
Postman collectionをよく設置したなら、APIを呼び出し可能です。
- 公示事項照会 - CBSelNotices API 呼び出しで公示事項データを照会可能
- イベント一覧照会 - CBSelGameEvents API 呼び出しで現在の ユーザーが参加可能なイベントを照会可能
- 到着したプレゼント照会 - CBSelGiftItemToMe API 呼び出しで現在の ユーザーに到着したプレゼントを照会可能
- 会員のゲーム情報照会 - CBComSelMemberGameInfoes API 呼び出しで、現在のゲーマーの全域情報照会可能
- 会員のランク照会 - GetMemberRankbyMeberID API呼び出しで特定の会員のランク情報照会可能
- 特定の範囲のランク順位照会-GetRangeRankerInfo API呼び出しに範囲内のランク情報照会可能
- 1等からXなどまでランク照会 - CBRank-GetTopXRanker API呼び出しで1位からX等までのランク情報照会可能
- 会員のアイテム一覧照会 - CBSelMemberItems API呼び出しで特定の会員が所有したアイテム一覧照会可能
- 購買(IAP)の照会 - CBComSelMemberItemPurchase API呼び出しで特定の会員の購買(IAP)情報照会
CloudBreadは2016年3月基準109つのBehaviorを支援しています。 全体Behaviorリストをご覧いただくには下記のリンクを参考にしてください。CloudBread behavior list wiki page
PostmanはCloudBread開発とテストをために利用されます。CloudBreadの多様なAPIをゲームで利用するためには、ゲーム内呼び出す例題が必要です。次のチャプターで関連内容を見ることができます。
国内外でゲーム開発に最も多く利用されるミドルウェアゲームエンジンであるUnityを利用してCloudBread APIを呼び出しする案を紹介してあげます。
Demoで利用されるプロジェクトは CloudBread-Client-Unity プロジェクトであり、次のリンクで見ることができます。
このチャプターでは CloudBreadの DBの 構造と APIを 通じて ゲーム 使用者の 流入から 遂行する 基本の 流れを 紹介します。
Memberは基本的に会員のアカウント情報を提供します。つまり、ログインおよびメールアドレスなどのアカウント関連情報を保存して記録します。
MemberID | MemberPWD | Name1 | ... | |
---|---|---|---|---|
aaa | PWD | [email protected] | nicknameA | ... |
bbb | PWD | [email protected] | nicknameaB | ... |
- CloudBread v2.0.xからは基本外部認証(Facebook認証、Google ID、Microsoft ID、カカオ認証など)を利用します。
- Memberidは、外部認証提供者が作ってくれている会員の固有idを記録します。
- MemberPWDはCloudBread v2.0.x以上から使用しません。 しばらく後、認証処理で詳細に紹介します。
- 認証過程で、権限の付与を通じてemailやnicknameを受け取ったり、ユーザー入力を通じてemail、nicknameを受けます。
- Postmanの CBSelLoginIDDupeCheck APIを利用してEmailとName1の重複を検査します。
- Emailは後に CS及びユーザ識別目的で必要です。
- Name1は"ニックネーム"でRank-leader boardなどで活用されます。
- 入れる時は InsRegMember APIを利用します。
- InsRegMemberは内部的にMembersとGameinfoに同時に入力するロジックを実行します。
- Members=アカウント、Gameinfoはゲーマーの属性情報保存に使用
- Gameinfoのpointは"ランキング"に利用されるので、必ず数字のみ使用
- Name1のニックネームとgameinfoのpointがランキングで活用
- CBCOMSelMember APIで照会作業遂行
- CBCOMUdtMember APIに修正作業遂行
FAQ. すべてのテーブルのsCol等は何に使用されるが?
- 余分のコラム。該当の値段が持つべき属性を保存する際に、不足する場合、sColにJSONの形で保存可能。sColコラムはVARCHAR(MAX)で大量のデータ保存が可能する。
MemberID | Level | Exp | Point | ... |
---|---|---|---|---|
aaa | 10 | 10000 | 100 | ... |
bbb | 20 | 20000 | 200 | ... |
- GameInfoはゲーマーの 全域(global) 属性 値を 保存して、しばらく 後、紹介されるMemberItemとは異なる
- 1:関係でアイテムと同じ所有物の貯蔵はMemberItemを使用
- "チャチャチャ"のようなゲームのゲーマーが所有する数台の自動車+自動車別に登録された属性(最高速力、車レベル加速度…)どのように保存した方がいいかな?
- Memberitemに1つの自動車 + cCol1~10にアイテムの属性を保存
- 余分のコラムが不足する場合、sColにjsonに保存、おすすめ
- カテゴリコラムを活用して、識別子で使用
- ゲーマーの属性と見られるお金、現金性アイテム情報はgameinfoに保存しましょうか。 なければmemberitemに保存しましょうか。
- 可能すれば、memberitemを推薦。リーダーボードに使われるランキング情報やゲームプレーヤー全域情報を除けば、Itemテーブルに上げてMemberItemに保存を推薦
- Gameinfoのpointは"ランキング"に利用されるので、数字のみ使用
- Name1のニックネームとgameinfoのpointがランキングで活用
- CBComSelMemberGameInfoesで照会
- CBComUdtMemberGameInfoesに修正
アイテム一覧テーブル
ItemID | ItemName | Price | Category | ... |
---|---|---|---|---|
GUID | アイテム1 | 100 | 消耗性アイテム | ... |
GUID | アイテム | 200 | 仮想通貨 | ... |
- アイテムは商店の販売物品+ゲーマーに所属された仮想貨幣などを保存するテーブル
- アイテム一覧をクライアントに保存する場合とアイテム一覧をサーバーに保存する場合、それぞれ長所と短所が存在
- サーバーに保存市Abusingやプロモーション、バランスの調整などが容易し、以後購買などで効率的に処理可能
- CloudBreadが提供するAPIとデータ保存活用のためにItemListテーブルに保存を推薦
- CloudBreadでItem=プレーヤーの所有物でもあって、ゲーマーの仮想通貨(金)などを指定も可能
- 様々なMemberItem関連behaviorを通じて"MemberItem"に"アイテム"が保存されるパターン
- CBSelItemListAll APIで、全体アイテム照会して、クライアントセッションに保存して利用
- CBComSelItemList1 APIで1つのアイテム照会
- アイテム追加・修正は管理者専用の作業であり、ユーザモードでは使用不可
ゲーマーが所有したゲーム内オブジェクトを保存
MemberItemID | MemberID | ItemID | ItemCount | ItemStatus | ... |
---|---|---|---|---|---|
GUID | aaa | ItemListテーブルのItemID1参照値 | 10 | 状態 | ... |
GUID | aaa | ItemListテーブルのItemID2参照値 | 5 | 状態 | ... |
GUID | aaa | ItemListテーブルのItemID3参照値 | 3 | 状態 | ... |
GUID | bbb | ItemListテーブルのItemID1参照値 | 2 | 状態 | ... |
GUID | bbb | ItemListテーブルのItemID2参照値 | 6 | 状態 | ... |
- Member : MemberItem = 1:関係でゲーマーの所有物を保存する重要テーブル
- "チャチャチャ"のようなゲームの数台の自動車 + 自動車別に登録された属性(最高速力、車レベル加速度…)どのように保存か。
- Memberitemに1つの自動車 + cCol1 ~ 10に保存
- ラムが不足する場合、jsonとsColに保存、おすすめ
- カテゴリコラムを活用して、識別子で使用
- 金、現金性アイテム情報はgameinfoに保存しましょうか。 なければmemberitemに保存しましょうか。
- 可能すれば、memberitemを使ってください。 ランクやプレーヤー全域情報を除けば、itemに上げてmemberitemに保存を推薦
- 属性を保存する部分が不足する場合、sCol余りのコラムを活用し、さまざまな情報を追加保存可能
- CBSelMemberItemsで会員が所有したアイテムを参照
- CBComSelMemberItemと1つのmemberitemの照会
- CBComUdtMemberItemと1つのmemberitem修正
- CBComInsMemberItemとmemberitem追加
- CBAddUseMemberItemとmembergameinfo修正 + memberitem追加・修正処理(トゥレンジェクション処理)
FAQ.
- INSERT or UPDATEがAPIに存在する理由 現在のバージョンのCloudBreadではUPSERT処理の際、使用者のinventoryが存在する場合、UPDATE、存在しない場合、INSERTに分けて呼び出す仕組みを提供します。 CloudBreadは1:関係のデータベースモデルを使用します。 UPSERT・ロジックの利用して処理も可能であるが、プロパティ値暗号化モードを利用する場合、UPSERTなどの使用が不可解なります。 CloudBread v1開発時ASDB(Azure SQL Database)がv11バージョンに暗号化を基本提供せず、ASDBでCLRの利用も不可解アプリケーションレベル(CloudBread Core)で暗号化後ASDBに保存する形式だけ可能たが、現在ASDB v12からはTDE暗号化を支援して暗号化を数パターンに適用可能です。 CloudBread v3では、テーブルスキーマを変更してさらに柔軟で安定的な処理を提供する計画中です。
ゲーマーが進行中のゲーム内プレー単位
MemberGameInfoStageID | MemberID | StageName | StageStatus | Category | Mission | ... |
---|---|---|---|---|---|---|
GUID | aaa | Stage1 | クリア | グループ1 | ステージミッション1 | ... |
GUID | aaa | Stage2 | クリア | グループ2 | ステージミッション2 | ... |
GUID | aaa | Stage3 | 進行中 | グループ1 | ステージミッション3 | ... |
GUID | bbb | Stage1 | クリア | グループ1 | ステージミッション1 | ... |
GUID | bbb | Stage2 | 進行中 | グループ2 | ステージミッション2 | ... |
- ステージはゲームの"プレー"単位を指す
- 同様に、Memberと1:の関係を持っていて、ステージ別補償、最高点数、記録などを保管にいいです
- 不足したコラムはJsonデータとして活用
- CBSelMemberGameInfoStagesとmemberのstageを参照
- CBComSelMemberGameInfoStagesに1個stage情報照会
- CBComUdtMemberGameInfoStagesに1個stage情報修正
- CBComInsMemberGameInfoStagesに1個stage情報の追加
- CBUdtMemberGameInfoStageとgameinfoとstageを修正(トゥレンジェクション)
ゲーム内の購買(IAP)と関連された情報を保存するテーブル
MemberItemPurchaseID | MemberID | ItemID | Quantity | Price | PGInfo | ... |
---|---|---|---|---|---|---|
GUID | aaa | Itemテーブル参照値 | 10 | 1000 | IAP決裁提供会社 | ... |
GUID | aaa | Itemテーブル参照値 | 1 | 5000 | IAP決裁提供会社 | ... |
GUID | aaa | Itemテーブル参照値 | 5 | 10000 | IAP決裁提供会社 | ... |
GUID | bbb | Itemテーブル参照値 | 20 | 20000 | IAP決裁提供会社 | ... |
GUID | bbb | Itemテーブル参照値 | 30 | 1000 | IAP決裁提供会社 | ... |
- IAPで発生する購買処理を保存するテーブル
- Purchaseは、購買=現金性の購入を意味して決裁が含まれた情報を保存します。
- 一般のゲーム内の一般ItemがMemberのMemberItemに所有される場合と異なるようにIAPがいる場合のみここに保存します。
- 購買 = itemの購買を意味し、itemはmemberitemに保存します。(仮想通貨も含め、memberitemにお金や現金性アイテムも保管)
- 購買はすべてトゥレンジェクション処理が行われます。
- CBAddMemberItemPurchaseとmemberitemにitemを追加して、gameinfoをアップデートして、purchaseを追加(トゥレンジェクション処理)
- CBComSelMemberItemPurchaseに1つのpurchaseを照会
- CBComUdtMemberItemPurchaseに1つのpurchaseを修正
- CBComInsMemberItemPurchaseに1つのpurchaseを追加
- CBUdtReturnItemと1つのpurchaseを撤回処理(自動化/管理者ページ処理)
ゲーマーが参加可能なイベントを保存するテーブル
EventID | Category | ItemID | ItemCount | Title | ... |
---|---|---|---|---|---|
GUID | 出席補償1 | Itemテーブル参照値 | 10 | 出席補償イベント1 | ... |
GUID | 出席補償2 | Itemテーブル参照値 | 1 | 出席補償イベント2 | ... |
GUID | 期間限定イベント1 | Itemテーブル参照値 | 5 | 期間限定イベント1 | ... |
GUID | 特定デバイスの使用者向けイベント | Itemテーブル参照値 | 30 | GALAXY ケイタイの使用者対象のイベント | ... |
- イベントは、管理者ページで追加され、基本durationで基本リスト処理
- イベントは、ログイン後またはクライアント開発者がいつでも下APIを呼び出して表示可能
- ゲーマーが参加できるイベントのみ表示されて、管理者ページで作ってるときdurationを利用して調節可能
- Device、OS等の値を入れて、クライアント、ゲーム内で表示するかどうか決定可能
- CBSelGameEventsに会員が参加可能なイベント照会
- イベント追加修正は管理者ページで処理
イベントに参加したMemberを記録するテーブル
GameEventMemberID | EventID | MemberID | ... |
---|---|---|---|
GUID | Eventテーブル参照値 | aaa | ... |
GUID | Eventテーブル参照値 | aaa | ... |
GUID | Eventテーブル参照値 | aaa | ... |
GUID | Eventテーブル参照値 | bbb | ... |
- 一度参加したイベントにまた参加できないようにイベントに参加した会員を記録するテーブル
- CBUdtGameEventMemberToItemとMemberItemにイベントの品目を追加して、EventMemberイベントに参加を記録(トゥレンジェクション)
クーポンリストを保存するテーブル
CouponID | Category | ItemID | ItemCount | Status | ... |
---|---|---|---|---|---|
GUID | 予約設置補償クーポン1 | Itemテーブル参照値 | 10 | 現在の状態 | ... |
GUID | コミュニティ公開提供クーポン | Itemテーブル参照値 | 1 | 現在の状態 | ... |
GUID | プリントクーポン | Itemテーブル参照値 | 5 | 現在の状態 | ... |
GUID | イベント代行業社配信クーポン | Itemテーブル参照値 | 30 | 現在の状態 | ... |
- クーポン情報を保存して、大量クーポンの保存も可能
- 管理者ページにおいて、クーポンを生成、大量クーポンも生成可能(3月26日現在、クエリー使用)
- カテゴリ情報を利用して"予約の申請者1千人クーポン"、"ゲームカフェクーポン100個"などで照会し、クーポン代理配信会社やマーケティング会社にexcelファイルで伝達可能
- クーポン番号はGUIDで生成される
- CBCOMSelCouponにクーポンが存在するかどうかチェック
クーポンを使用したMemberを記録するテーブル
CouponMemberID | CouponID | MemberID | ... |
---|---|---|---|
GUID | Couponテーブル参照値 | aaa | ... |
GUID | Couponテーブル参照値 | aaa | ... |
GUID | Couponテーブル参照値 | aaa | ... |
GUID | Couponテーブル参照値 | bbb | ... |
- クーポンを使用した会員を記録する目的のテーブル
- CBUdtCouponMemberにmemberitemに追加、componmemberに追加して、クーポン使用不可処理(トゥレンジェクション)
- CBUdtCouponMemberを活用してgameinfoにゲーマーのgameinfo属性をアップデートも可能(PostmanのCBUdtCouponMembe-GAMEINFO参照)
プレゼントをくれる人と受け取る人、渡すItemが記録される
GiftID | ItemID | ItemCount | FromMemberID | ToMemberID | ... |
---|---|---|---|---|---|
GUID | Itemテーブル参照値 | 10 | aaa | bbb | ... |
GUID | Itemテーブル参照値 | 5 | aaa | ccc | ... |
GUID | Itemテーブル参照値 | 1 | bbb | ddd | ... |
GUID | Itemテーブル参照値 | 2 | ccc | aaa | ... |
- CBSelGiftItemToMeでゲーマーにきたプレゼントを参照
- CBUdtMoveGiftで私にきたプレゼント1個をmemberitemに移動(トゥレンジェクション)
- CBUdtSendGiftにギフトボックスにプレゼントを送ったこと、私のmemberitemを削除(トゥレンジェクション)
- CBComSelGiftDepositoryで1つのgitfを照会
- CBComUdtGiftDepositoryで1つのgiftを修正
ランキング(Rank-Leader board)処理
NickName | Point | Rank | ... |
---|---|---|---|
ニックネームa | 100 | 3 | ... |
ニックネームb | 500 | 2 | ... |
ニックネームc | 900 | 1 | ... |
- Rankは DB がなく、メモリー 基盤 NoSQL DBの Redisに 保存(基本設定)
- CloudBreadが初起動し、DBのnicknameとpointを読んでRedisに保存して全体対象SQL DBと同期化
- 同期化した後、Rankの修正が必要したときAPIにrank追加・修正
- CBRank-SetMemberPointにrank追加・修正
- GetTopXRankerに top x rankerリストの照会
- GetRangeRankerInfoで順位の範囲のmemberを照会
- GetMemberRankByIDに使用者のランク順位を照会
- Facebook、google id、Microsoft id、twitter idなどの認証が基本可能であり、Kakao認証などを拡張可能です。
- 認証をすればAPIの要請時、含まれるMemberIDは自動sidに置換される
- DEMOの用途で https://cb2-auth-demo.azurewebsites.net/ サーバーでテスト可能
- sidはサーバーで保存、照会に処理されてクライアントとしてsidが下りてこないこと(x-zumo-authトークンだけやり取り)
- CloudBreadのすべてのAPIはsidが存在すれば、(サーバーに認証の構成が完了されれば)自動的にクライアントが送るMemberIDを無視してsidに置換させる
- 開発段階ではmemberidを送って配布段階でsidを利用も可能
- 認証(Authentication)はCloudBreadの暗号化(Encryption)とは別に、処理される
- 安全なゲーム通信のためには必ず認証と暗号化構成を推奨する
- CloudBreadサーバー(Azure Mobile App-モバイルアプリ)に認証サーバの構成案
- Facebook : https://goo.gl/d0ZeQT
- Google ID : https://goo.gl/4oyM4S
- Microsoft Account : https://goo.gl/Wvn2fe
- Twitter : https://goo.gl/ZdR4qa
- Active Directory(認証):https://goo.gl/WD76Ch上リンクの認証提供者を通じて、認証をCloudBreadサーバー(Azure Mobile App-モバイルアプリ)に認証を構成
- Unityで認証を利用する方法はUnity開発者ガイドデモ参照 - Unity コーディング Demo youtube
- Postmanを利用して認証テストが必要な場合にはHTTP Headerの"x-zumo-auth"を認証が構成されたサイトで取得しなければなりません。
- このため、Windows開発環境の場合**CloudBread-Dev-Authkey-Gen-win8.1プロジェクト**を利用可能であり、
- マックブック開発環境の場合**CloudBread-Dev-Authkey-Gen-Androidプロジェクトを利用してAuthkeyを発給を受けてHTTP Headerの"x-zumo-auth"に入力して要請をテストできます。
- Crypt処理でweb.configの設定を利用してAES256暗号化処理可能
<!-- Encryption configuration. 암호화 설정-->
<add key="CloudBreadCryptSetting" value="AES256"></add>
<add key="CloudBreadCryptKey" value="1234567890123456"></add>
<add key="CloudBreadCryptIV" value="1234567890123456"></add>
- クライアントで暗号化構成を遂行してCloudBread APIを呼び出し
- 暗号化されて伝達されたテキストをCloudBreadが復号化してサーバーに保存
- 暗号化設定時自動クライアントに暗号化された文字列response
**CloudBread-Encrypt-Text-Tool**で暗号化復号を開発時文字列テスト可能
- Postmanに基本設定された例題(Encryptで始まる)を活用可能
- DEMOの用途で、"https://cb2-crypt-demo.azurewebsites.net" サーバー利用可能
- ゲーマーとの間でリアルタイムの通信に利用
- Socket.ioで開発
- Android、iOSなど多様なSDKを支援(ユニティを含む)
- グループ提供
- クライアントは認証のため、CBSocketAuth APIをCloudBreadに要請
- トークンはRedisキャッシュに保存される
- クライアントはトークン情報をSocketサーバに送ったこと
- SocketサーバがCloudBreadにtokenをValidateしてリアルタイムの通信開始
- **CloudBread-Socket プロジェクト**と CloudBread-Socket-React プロジェクト参照
文書の終りです。
参考リンク: CloudBreadインストールガイド 文書