
マイケル
みなさんこんにちは!
マイケルです!!
マイケルです!!

エレキベア
クマ〜〜〜〜〜!!

マイケル
前回に引き続いて、ソシャゲ作成を進めていくぞ!

エレキベア
前回はユーザ登録処理まで実装したクマね

マイケル
うむ!
今回は JSONファイルを使用したマスタデータの管理
を実装していくぞ!
今回は JSONファイルを使用したマスタデータの管理
を実装していくぞ!

エレキベア
クマ〜〜〜〜〜〜
参考書籍

マイケル
参考書は引き続き、こちらを参考に進めていきます!

エレキベア
お馴染みクマ〜〜〜〜
JSONファイルでのマスタ管理

マイケル
まずはマスタ管理の方法について!

マイケル
マスタデータは直接DBを参照せずに、
別ファイルに切り出して管理することも多いです。
別ファイルに切り出して管理することも多いです。

マイケル
今回はマスタバージョンは定数クラスに設定し、
下記のようにJSONファイルとしてバージョンごとに切り出して管理します。
下記のようにJSONファイルとしてバージョンごとに切り出して管理します。
↑JSONファイルを使用してマスタデータを管理する

エレキベア
なんで別ファイルに切り出す必要があるクマ??

マイケル
ユーザ側とサーバ側が参照するデータを一致させるためと、
全マスタテーブルのバージョンを揃えるためだよ。
DBを直接参照するようだと、ユーザで表示している内容と実際のマスタ内容が食い違ってしまう可能性があるからね。
全マスタテーブルのバージョンを揃えるためだよ。
DBを直接参照するようだと、ユーザで表示している内容と実際のマスタ内容が食い違ってしまう可能性があるからね。

マイケル
クライアントとサーバで参照しているバージョンが違う場合には
「アップデートしてください。」というメッセージを表示するようにするんだ!
「アップデートしてください。」というメッセージを表示するようにするんだ!

エレキベア
なるほどクマ
ユーザ側で100円で購入しようとしたら
実は500円引かれてたりしたら大問題クマね
ユーザ側で100円で購入しようとしたら
実は500円引かれてたりしたら大問題クマね

マイケル
そういう自体が起きないようにするんだね。

マイケル
それじゃさっそく実装していこう!!

エレキベア
クマ〜〜〜〜〜〜〜〜〜
サーバ側の実装

マイケル
サーバ側から実装していこう!
マスタテーブルの作成からJSONファイルの作成まで行います!
マスタテーブルの作成からJSONファイルの作成まで行います!

エレキベア
やったるクマ〜〜〜〜〜
マスタテーブルの作成

マイケル
今回は下記のような クエスト情報を管理するマスタ を作成します!
↑master_questテーブル

マイケル
作成コマンドは以下になります!
テーブルの作成方法については下記記事で解説しているので
内容がわからない場合はご参照ください!
テーブルの作成方法については下記記事で解説しているので
内容がわからない場合はご参照ください!
【Laravel】第一回 自動販売機システムを作ろう! 〜全体設計とテーブル作成〜

エレキベア
なつかしクマね〜〜〜〜
↑マイグレーションファイルの作成
↑マイグレーションファイルの記述
↑マイグレーション実行
↑Modelクラスの作成
↑Modelクラスの記述
JSONファイル作成処理

マイケル
テーブルを作成したら、JSONファイル作成の処理を作成していきましょう!
下記 MasterDataServiceクラス を作成します!
下記 MasterDataServiceクラス を作成します!

マイケル
それぞれ、
GenerateMasterData()メソッド → JSONファイルの作成処理
GetMasterData()メソッド → JSONファイルからの取得処理
CheckMasterDataVersion()メソッド → マスタデータバージョンチェック処理
の処理内容になります!
GenerateMasterData()メソッド → JSONファイルの作成処理
GetMasterData()メソッド → JSONファイルからの取得処理
CheckMasterDataVersion()メソッド → マスタデータバージョンチェック処理
の処理内容になります!
↑マスタデータ管理のServiceクラス

マイケル
マスタバージョンは下記のように定数クラスで管理します!

マイケル
そして作成済のModelクラスに、
Serviceクラスを使用した取得処理を記述しましょう!
Serviceクラスを使用した取得処理を記述しましょう!
↑Serviceクラスを用いたデータ取得処理の追加

エレキベア
これでメソッドを呼び出せばデータ取得ができるわけクマね

マイケル
その通りだ!!
Artisanコマンドの登録

マイケル
そしてJSONクラス生成処理はコマンドから呼び出せるようにしましょう!
下記のようにCommandクラスを作成してKernelクラスに登録します!
下記のようにCommandクラスを作成してKernelクラスに登録します!
↑Commandクラスの作成
↑Commandクラスの記述
↑Kernel.phpへの登録

マイケル
これでArtisanコマンドを使用してJSONファイルを作成できるようになります!

エレキベア
はやく実行したいクマ〜〜〜〜〜
JSONファイル作成

マイケル
それではDBにマスタデータ追加後、
「php artisan command:generate_master_data 【マスタバージョン】」
で実行してみましょう!
「php artisan command:generate_master_data 【マスタバージョン】」
で実行してみましょう!
↑マスタデータの登録
↑JSONファイル作成コマンド実行

マイケル
するとこのようにバージョン番号の名前でJSONクラスが作成されます!
↑JSONクラスが作成される

エレキベア
すごいクマ〜〜〜〜〜〜!!!
Controllerクラス作成

マイケル
あとはクライアント側から呼び出されるように、
Controllerクラスを作成しておきましょう!
Controllerクラスを作成しておきましょう!

マイケル
それぞれ、
Chk()メソッド → マスタバージョンチェック処理
Get()メソッド → マスタデータ取得処理
になります!
Chk()メソッド → マスタバージョンチェック処理
Get()メソッド → マスタデータ取得処理
になります!
↑Controllerクラスの作成
↑Controllerクラスの記述
↑Routeの登録

マイケル
以上でサーバ側の実装は完了です!

エレキベア
ひと段落クマ〜〜〜〜〜
クライアント側の実装

マイケル
それじゃクライアント側も実装していこう!
サーバ側にマスタ取得リクエストを送って
帰ってきたデータを保存する処理
になるよ!
サーバ側にマスタ取得リクエストを送って
帰ってきたデータを保存する処理
になるよ!

エレキベア
あともうひと踏ん張りクマね
Modelクラス作成

マイケル
サーバ側と同様、クライアント側にもModelクラスを作成しましょう!
CreateTable()メソッド → テーブル作成処理
Set()メソッド → データ登録処理
GetMasterQuest()メソッド → データ取得処理
になります!
CreateTable()メソッド → テーブル作成処理
Set()メソッド → データ登録処理
GetMasterQuest()メソッド → データ取得処理
になります!
↑Modelクラスの作成
マスタバージョンチェック処理

マイケル
そして次はマスタバージョンのチェック処理を実装します!
クライアント側とサーバ側のバージョンが異なっている場合には
マスタ更新のダイアログを表示
させるようにしましょう!
クライアント側とサーバ側のバージョンが異なっている場合には
マスタ更新のダイアログを表示
させるようにしましょう!
↑マスタ更新ダイアログ

マイケル
まずはマスタバージョンの設定クラスを作成します!
こちらはPreyerPrefsを使って管理を行います!
こちらはPreyerPrefsを使って管理を行います!
↑マスタバージョン管理クラスの作成

マイケル
そしてテーブル作成とチェック処理の呼び出しを記述します!
起動時にチェックするようにしたいので、今回はタイトル画面のクラスに記述しました。
起動時にチェックするようにしたいので、今回はタイトル画面のクラスに記述しました。
↑テーブル作成とチェック処理の呼び出しを追加
↑マスタバージョンエラーの場合の記述を追加

マイケル
このようにマスタバージョンエラーの場合には
マスタ更新ダイアログ(masterUpdateCanvas)を表示させるようにします!
マスタ更新ダイアログ(masterUpdateCanvas)を表示させるようにします!

エレキベア
前回作ったクラスに処理を加えたクマね
マスタデータ更新処理

マイケル
そしてマスタ更新ダイアログに下記スクリプトをアタッチします!

マイケル
これでOKボタンを押下した時に「master_data」リクエストを送って
マスタデータの更新処理を行うようになりました!
マスタデータの更新処理を行うようになりました!

エレキベア
やったクマ〜〜〜〜!!!
マスタデータ取得処理

マイケル
これでSQLiteにマスタデータが登録されたので、
取得処理も行ってみましょう!
取得処理も行ってみましょう!

マイケル
下記のようにModelクラスから取得します!
↑マスタデータの取得

マイケル
このようにちゃんと登録されていることが確認できるはずです!

エレキベア
やっと全て繋がったクマ〜〜〜〜〜〜〜
おわりに

マイケル
というわけで今回はマスタデータの管理についてでした!
どうだったかな?
どうだったかな?

エレキベア
大変だったけどサーバとクライアントで連携できて
感動だったクマ〜〜〜〜〜
感動だったクマ〜〜〜〜〜

マイケル
クライアントだけで動くアプリとは桁違いに大変だよね

マイケル
でもその分複雑なこともたくさんできそうだね!
今後もがんばっていこう!!
今後もがんばっていこう!!

エレキベア
やったるクマ〜〜〜〜〜
【Unity】第三回 ソーシャルゲームを作る 〜JSONファイルでのマスタ管理〜 【AWS x Laravel】 〜完〜