第1章
CloudScriptを使おう

PlayFabでは、サーバー処理をCloudScriptという形で提供しています。本章では、CloudScriptの概要と、簡単な使い方について解説します。

1.1 CloudScriptとは

CloudScriptは、サーバー側で関数を書いておくことで、クライアント側から呼び出しができる仕組みです。サーバー処理とすることで、次のようなメリットがあります。

  • データの改ざんがしにくくなる
  • リリース後は再リリース無しでプログラム修正ができる

クライアント側で処理をしていると、悪意をもったユーザーがデータの改ざんをする可能性もありますが、サーバー処理とすることで改ざんがしにくくなります。また、ユーザーに配布するプログラムにはCloudScriptが含まれないため、リリース後も再リリース無しでプログラム修正をすることも可能になります。ビルドをしてリリースをして審査をして、という手順を何度も踏むとかなり時間がかかりますよね。この手順を省略できるだけでも、かなりメリットがあると思います。もちろん、クライアントとサーバーで通信が必要になるため、実行には時間がかかります。何でもかんでもサーバー処理とすればいいというわけでもないので、必要な分だけサーバー処理としましょう。

第2章「Azure Functions を使おう」でも解説をしていますが、サーバー処理はAzure Functionsを経由して実行するほうが便利なので、本書ではAzure Functionsの使い方をメインに解説します。したがって、CloudScriptを直接実行する使い方は、簡単にしか解説しません。

1.2 管理画面の使い方

PlayFab管理画面の「自動化 > CloudScript > リビジョン」と進んでいくと、サーバーで定義されているCloudScriptが表示されます(図1.1)。黒い部分には、あらかじめサンプルプログラムが実装されていて、ここに自分で関数を追加します。言語はJavascriptしか対応していないため、C#をメインに使っている人は難しく感じると思います。先ほども書きましたが、サーバー処理はAzure Functionsの使い方をメインに解説するため、内容は理解できなくて大丈夫です。

管理画面のCloudScript

図1.1: 管理画面のCloudScript

右上に「GITHUBを使用」というボタンがありますが、ここからGitHubと連携することで、コミットすると自動的にPlayFabへアップロードすることもできます。連携をしなくても、「新しいリビジョンをアップロード」を押すことで、手動でアップロードすることも可能です。また、「リビジョン1(ライブ)」という選択式のリストもあるのが見えます。これは、新しいリビジョンをアップロードするとリビジョンが1つ増えて、今実行すると動くリビジョンが「ライブ」として表示される仕組みです。例えば、リリースして何か不具合があった場合に、すぐ差し戻しをしたりすることも簡単にできます。プログラムからはリビジョン指定の実行もできるので、ライブのプログラムを切り替えなくても、過去のプログラムの実行もできたりします。なお、Azure Functionsを使う場合はGitHubと連携することができないので、管理画面からリビジョンを見ることはできません。

1.3 CloudScriptを実装する

CloudScriptのサンプルは最初から実装されています。今回はその中から、HelloWorld関数をそのまま使用することにします(リスト1.1)。

リスト1.1: HelloWorld
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 };
};

1.4 CloudScriptを呼び出す

クライアント側からHelloWorld関数を呼び出してみましょう。呼び出しには、ExecuteCloudScriptを使用します。

リスト1.2: HelloWorldの呼び出し
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.1handlers.の後ろについている文字列が関数名なので、helloWorldを渡してあげます。FunctionParameterはCloudScriptに渡す引数です。GeneratePlayStreamEventはPlayStreamイベントを作るかどうかで、特別な理由がなければtrueにしておきます。RevisionSelectionは、呼び出すリビジョンを指定するプロパティです。基本はライブなリビジョンを呼び出すのが普通だと思うので、Liveを指定します。常に最新のリビジョンを呼び出したい場合は、Latestを指定してください。また、特定のリビジョンを呼び出したい場合は、Specificを指定した上で、SpecificRevisionにリビジョン番号を指定します。

1.5 CloudScriptの実行結果

Unityを実行して、CloudScriptを呼び出してみましょう。図1.2のログが出れば実行成功です。

CloudScriptの実行ログ

図1.2: CloudScriptの実行ログ

実行した結果は、PlayFabのイベントログにも細かく出力されます(図1.3)。サーバー処理の中でログ出力をすれば、Logsの中に出力される動きになっています。今回はlog.debuglog.infoで2回出力しているので、Logsの中にも2回出力されていることが確認できますね。

CloudScriptのイベントログ

図1.3: CloudScriptのイベントログ

試し読みはここまでです。
この続きは、製品版でお楽しみください。