FJCT_ニフクラ mobile backend(mBaaS)お役立ちブログ

スマホアプリ開発にニフクラ mobile backend(mBaaS)。アプリ開発に役立つ情報をおとどけ!

C# SDK(コミュニティSDK)を使ってCLIアプリケーションを作ってみる

f:id:mbaasdevrel:20210616141023p:plain

C#で作られているSDKとしてはUnity SDKがありますが、Unity以外の環境では利用できません。そこで有償のテクニカルサポートは提供していませんが、コミュニティSDKとしてC# SDKを開発中です。こちらは純粋なC#で作られており、Xamarinや.NETアプリケーション開発に利用できます。

今回はこのC# SDKを使って、CLIアプリケーションを開発してみました。

ベースを作成する

ベースになるコードはVisual Studioのウィザードに沿って勧めていきます。

f:id:mbaasdevrel:20210616141023p:plain

今回のプロジェクト名は NCMB_CLI としています。生成されたコードは次のような形になるでしょう。対象のフレームワークは.NET Core 3.1としています。

using System;

namespace NCMB_CLI
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Hello world");
        }
    }
}

C# SDKの追加

NuGetの管理を使って、NCMBClient を追加します。

f:id:mbaasdevrel:20210616141100p:plain

さらにコマンドラインのオプションをパースする CommandLineParser を追加します。

コマンドラインオプションの作成

コマンドラインオプションは Options.cs というファイルを作成して記述します。今回は a/c/m 、3つのパラメータを指定可能としています。

パラメータ名 内容
a NCMBのアプリケーションキー
c NCMBのクライアントキー
m データストアに保存するメッセージ
using System;
namespace NCMB_CLI
{
    public class Options
    {
        public Options()
        {
        }

        //String型のオプション
        [CommandLine.Option('a')]
        public string ApplicationKey
        {
            get;
            set;
        }

        //String型のオプション
        [CommandLine.Option('c')]
        public string ClientKey
        {
            get;
            set;
        }

        //String型のオプション
        [CommandLine.Option('m')]
        public string Message
        {
            get;
            set;
        }

    }
}

メインのコード

メインファイルでは NCMBClient と CommandLineParser、そして非同期処理用に System.Threading.Tasks を読み込みます。

using System;
using NCMBClient;
using CommandLine;
using System.Threading.Tasks;

Main関数について

Main関数では、まずコマンドラインオプションを読み込みます。

var options = new Options();
CommandLine.Parser.Default.ParseArguments<Options>(args)
    .WithParsed<Options>(opts => options = opts);

その読み込んだ内容でNCMBClientを初期化します。

new NCMB(options.ApplicationKey, options.ClientKey);

Main関数ではasync/await が扱えないので、次のように記述します。

Save(options.Message).Wait();

Save関数について

Save関数はasync/awaitが扱えます。

internal static async Task Save(string message)
{
    try
    {
        // この中に記述
    }
    catch (Exception ex)
    {
        Console.WriteLine(ex);
    }
}

まずNCMBObjectを用意します。

var obj = new NCMBObject("Hello");

引数で指定したメッセージを受け取ります。

obj.Set("message", message);

awaitで保存処理を待ちます。

await obj.SaveAsync();

保存処理完了のメッセージを出します。

Console.WriteLine("Save successful.");
Console.WriteLine(obj.Get("objectId").ToString());

コードの全体像です。

namespace NCMB_CLI
{
    class Program
    {
        static void Main(string[] args)
        {
            var options = new Options();
            CommandLine.Parser.Default.ParseArguments<Options>(args)
                .WithParsed<Options>(opts => options = opts);
            new NCMB(options.ApplicationKey, options.ClientKey);
            Save(options.Message).Wait();
        }

        internal static async Task Save(string message)
        {
            try
            {
                var obj = new NCMBObject("Hello");
                obj.Set("message", message);
                await obj.SaveAsync();
                Console.WriteLine("Save successful.");
                Console.WriteLine(obj.Get("objectId").ToString());
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex);
            }
        }
    }
}

テストする

テストを行う際には、プロジェクトのオプションを開いて、コマンドラインオプションを指定します。

f:id:mbaasdevrel:20210616141259p:plain

この状態でビルドをするとコマンドを実行し、実際にデータが保存されるのが確認できるでしょう。

まとめ

今回はVisual Studio for macを使って開発しています。.NETはマルチプラットフォームで動作しますので、WindowsやmacOSで動作するコマンドも開発可能です。C# SDKを使って、NCMBのデータメンテナンスするコマンドを開発してください。

中津川 篤司

中津川 篤司

NCMBエヴァンジェリスト。プログラマ、エンジニアとしていくつかの企業で働き、28歳のときに独立。 2004年、まだ情報が少なかったオープンソースソフトの技術ブログ「MOONGIFT」を開設し、毎日情報を発信している。2013年に法人化、ビジネスとエンジニアを結ぶDXエージェンシー「DevRel」活動をスタート。