まえがき
第1章 CloudScriptを使おう
第2章 Azure Functions を使おう
第3章 Azure Functions で API を実行しよう
第4章 ローカルデバッグをしよう
第5章 セグメントを使おう
第6章 スケジュール済みタスクを使おう
第7章 アクションとルールを使おう
第8章 リワード広告を使おう
第9章 おまけ
あとがき
本書を手に取っていただき、ありがとうございます。
以前、初めての書籍として『猫でもわかるPlayFab入門』を発売しました。本を書こうと決めたときは、「自分なんかが本を書いて需要があるのだろうか」と消極的な気持ちがありましたが、いつも応援してくださっている方の後押しもあり、なんとか書き上げることができました。発売後はたくさんの方にシェアをしていただいたおかげで、100名以上の方々にご購入いただくことができました。この数字をどう感じるかは人それぞれだと思いますが、私自身としては「大成功だった」と感じています。これも、みなさんのおかげです。本当にありがとうございます。
一冊目を発売してみて、PlayFabの解説本に一定数の需要があることを確認し、すぐ二冊目にあたる本書の執筆にとりかかりました。PlayFabを使いこなす上で自動化まわりの機能の理解は欠かせません。しかしながら、自動化まわりの機能は便利ですが学習コストが高く、なかなか手を出しにくい分野であることも事実です。私自身も勉強をしていて、「どういった順番で勉強していけばいいのだろう」「ここはどういう動きになるのだろう」と、わからない点が多く、学習にかなり時間を費やしてしまいました。「公式ドキュメントだけでは理解が難しい」と感じているのは私だけではないと思います。ここを整理して執筆するだけでも、これから勉強を始める人にとっては数十時間の節約になることは間違いありません。
私が調べたことは惜しみなく公開しますので、みなさんは本書の情報を使って、ご自身のゲーム開発を円滑に進められるはずです。PlayFabを採用するということは、「実装コストを減らしたい」と考えている人がほとんどだと思います。それなのに、PlayFabの学習コストを増やしていては、本末転倒です。本書をお読みになって、どんどん学習コストを減らしてください。最小限の勉強時間でPlayFabを習得してください。みなさんが私と同じ苦労を味わう必要はありません。
いろいろとつまづきながら学習した経験から、つまづくポイントもわかっています。つまづく点を先回りして解決できるよう、画像も多めに使用し、わかりやすさと見やすさにこだわって書きました。この本を読むことで、PlayFabにかける勉強時間を少なくして、ゲーム開発の部分に時間を割くことができます。この本が少しでもみなさんのためになれば幸いです。
PlayFabのことを教えてくださった方々、普段の発信をシェアしたりコメントしてくださる方々、応援してくださる方々のおかげで、本書の執筆にいたることができました。深く感謝いたします。
ねこじょーかー
本書の目的は、PlayFabの基礎を理解している人が、サーバー処理であるAzure Functionsの使い方や、アクションとルールなどの自動化の機能をひと通り使えるようになることです。サーバー処理が入ると学習の難易度が上がりますが、本書ではわかりやすさに重点を置いて書いているので、迷うことなく進められると思います。PlayFabの基礎の学習が終わった人はもちろん、自動化まわりの機能を集中して学習したい人にとっても、この本はぴったりです。
・CloudScriptの知識
・Azure Functionsの知識
・ローカルデバッグの知識
・アクションとルールの知識
・スケジュール済みタスクの知識
・セグメントの知識
・リワード広告の知識
・PlayFabの基礎学習が終わっている人
・サーバー処理や自動化について興味がある人
・PlayFabの高みを目指したい人
・普段からPlayFabを使っているが、復習も兼ねて学びたい人
本書は、以下の知識がある前提とします。UnityやC#の説明は省き、PlayFabに特化した説明をしています。
・PlayFabの基礎知識(入門編で紹介している内容が理解できていれば十分です)
本書では以下のバージョンを使用しています。PlayFabSDKは最新のバージョンを使用して構いません。Unityのバージョンも特に揃える必要はありません。
・Unity 2019.4.1f1
・PlayFab SDK 2.89.200629
・PlayFabAllSDK 1.77.200730
PlayFabでは、サーバー処理をCloudScriptという形で提供しています。本章では、CloudScriptの概要と、簡単な使い方について解説します。
CloudScriptは、サーバー側で関数を書いておくことで、クライアント側から呼び出しができる仕組みです。サーバー処理とすることで、次のようなメリットがあります。
・データの改ざんがしにくくなる
・リリース後は再リリース無しでプログラム修正ができる
クライアント側で処理をしていると、悪意をもったユーザーがデータの改ざんをする可能性もありますが、サーバー処理とすることで改ざんがしにくくなります。また、ユーザーに配布するプログラムにはCloudScriptが含まれないため、リリース後も再リリース無しでプログラム修正をすることも可能になります。ビルドをしてリリースをして審査をして、という手順を何度も踏むとかなり時間がかかりますよね。この手順を省略できるだけでも、かなりメリットがあると思います。もちろん、クライアントとサーバーで通信が必要になるため、実行には時間がかかります。何でもかんでもサーバー処理にすればいいというわけでもないので、必要な分だけサーバー処理としましょう。
第2章「Azure Functions を使おう」でも解説をしていますが、サーバー処理はAzure Functionsを経由して実行するほうが便利なので、本書ではAzure Functionsの使い方をメインに解説します。したがって、CloudScriptを直接実行する使い方は、簡単にしか解説しません。
PlayFab管理画面の「自動化 > CloudScript > リビジョン」と進んでいくと、サーバーで定義されているCloudScriptが表示されます(図1.1)。黒い部分には、あらかじめサンプルプログラムが実装されていて、ここに自分で関数を追加します。言語はJavaScriptしか対応していないため、C#をメインに使っている人は難しく感じると思います。しかし、先ほども書きましたが、サーバー処理はAzure Functionsの使い方をメインに解説するため、内容は理解できなくて大丈夫です。
右上に「GITHUBを使用」というボタンがありますが、ここからGitHubと連携することで、コミットすると自動的にPlayFabへアップロードすることができます。連携をしなくても、「新しいリビジョンをアップロード」を押すことで、手動でアップロードすることも可能です。また、「リビジョン1(ライブ)」という選択式のリストもあるのが見えます。これは、新しいリビジョンをアップロードするとリビジョンがひとつ増えて、今実行すると動くリビジョンが「ライブ」として表示される仕組みです。例えば、リリースして何か不具合があった場合に、すぐ差し戻しをしたりすることも簡単にできます。プログラムからはリビジョン指定の実行もできるので、ライブのプログラムを切り替えなくても、過去のプログラムの実行もできたりします。なお、Azure Functionsを使う場合はGitHubと連携することができないので、管理画面からリビジョンを見ることはできません。
CloudScriptのサンプルは最初から実装されています。今回はその中から、HelloWorld関数をそのまま使用することにします(リスト1.1)。
handlers.helloWorld = function (args, context) {
var message = "Hello " + currentPlayerId + "!";
log.info(message);
var inputValue = null;
if (args && args.inputValue)
inputValue = args.inputValue;
log.debug("helloWorld:", { input: args.inputValue });
return { messageValue: message };
};
クライアント側からHelloWorld関数を呼び出してみましょう。呼び出しには、ExecuteCloudScript1を使用します。
public void CallCloudScript()
{
PlayFabClientAPI.ExecuteCloudScript(new ExecuteCloudScriptRequest()
{
FunctionName = "helloWorld",
FunctionParameter = new { inputValue = "nekojoker" },
GeneratePlayStreamEvent = true,
RevisionSelection = CloudScriptRevisionOption.Live,
SpecificRevision = null
}, result =>
{
Debug.Log("CloudScriptの実行成功!");
var jsonResult = (JsonObject)result.FunctionResult;
jsonResult.TryGetValue("messageValue", out object messageValue);
Debug.Log(messageValue);
}, error =>
{
Debug.Log(error.GenerateErrorReport());
});
}
FunctionNameは呼び出す関数名です。リスト1.1のhandlers.の後ろについている文字列が関数名なので、helloWorldを渡してあげます。FunctionParameterはCloudScriptに渡す引数です。GeneratePlayStreamEventはPlayStreamイベントを作るかどうかで、特別な理由がなければtrueにしておきます。RevisionSelectionは、呼び出すリビジョンを指定するプロパティです。基本はライブなリビジョンを呼び出すのが普通だと思うので、Liveを指定します。常に最新のリビジョンを呼び出したい場合は、Latestを指定してください。また、特定のリビジョンを呼び出したい場合は、Specificを指定した上で、SpecificRevisionにリビジョン番号を指定します。
Unityを実行して、CloudScriptを呼び出してみましょう。図1.2のログが出れば実行成功です。
実行した結果は、PlayFabのイベントログにも細かく出力されます(図1.3)。サーバー処理の中でログ出力をすれば、Logsの中に出力される動きになっています。今回はlog.debugとlog.infoで2回出力しているので、Logsの中にも2回出力されていることが確認できますね。