NCMBのC# SDKを.NET MAUIアプリで試す

NCMBでは公式SDKとしてSwift/Objective-C/Kotlin/Java/Unity/JavaScript SDKを用意しています。また、それ以外にもコミュニティSDKとして、非公式ながらFlutter/React Native/Google Apps Script/C#/
Ruby/Python/PHPなど幅広い言語向けにSDKが開発されています。

その一つとしてC# SDKがあります。C# SDKはUnity向けのSDKとは異なり、.NET 2.0向けに開発されています。そのためサーバーサイドやVisual Studioを用いたC#アプリ開発でも利用可能です。

先日Microsoftより発表された.NET MAUIの中でC# SDKが利用できるのか試してみました。

## インストール

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/197026/39298cbb-2796-bd65-de7d-2810411f6097.png)


今回はVisual Studio 2022 for Macを利用しています。iOS向けの開発する場合にはmacOS版が必要です。

[Visual Studio 2022 for Mac - macOS 用 IDE](https://visualstudio.microsoft.com/ja/vs/mac/)

インストール時にはAndroidはオプションになっていましたが、この後作成するプロジェクトを開いたところでエラーが出てしまいました。Android開発環境もインストールした方が良いでしょう。

## ベースを作る

ベースになるアプリは[.NET CLI を使用してmacOSでiOS アプリを構築する - .NET MAUI | Microsoft Docs](https://docs.microsoft.com/ja-jp/dotnet/maui/ios/cli)に沿って作成します。Visual Studioがインストールされていれば、dotnetコマンドが使えるはずです。

```
% dotnet --version                 
6.0.301
```

そしてMAUIをインストールします。

```
sudo dotnet workload install maui \
  --source https://api.nuget.org/v3/index.json
```

インストールが終わったらベースアプリを生成します。

```
dotnet new maui -n "MyMauiApp"
```

とりあえずビルドします。

```
cd MyMauiApp
dotnet build -t:Run -f net6.0-ios
```

デフォルトではiPad Airが開きました。

![Simulator Screen Shot - iPad Air (5th generation) - 2022-06-21 at 14.43.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/197026/d71b8282-4671-c8d0-7f60-b791624bc3d6.png)

## NCMBをインストール

このプロジェクトをVisual Studioで開きます。

![スクリーンショット 2022-06-21 16.12.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/197026/9c51cd20-c9f4-a00b-804a-ed7db410ccd0.png)


そしてプロジェクトを右クリックして、NuGetパッケージの管理を選択します。

![スクリーンショット 2022-06-21 14.55.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/197026/61392119-a472-9d33-101d-970f016fc2cf.png)


出てきたウィンドウで、NCMBClientを検索します。執筆時点での最新版は0.10.0です。これを追加します。

![スクリーンショット 2022-06-21 14.43.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/197026/f06df07c-f55d-1e0e-65b2-de79c779cc80.png)


## NCMBをインポートする

`MainPage.xaml.cs` を開きます。そして、namespaceの下でNCMBClientをインポートします。

```cs
namespace MyMauiApp;
using NCMBClient;
```

インスタンス変数としてNCMBを定義します。

```cs
public partial class MainPage : ContentPage
{
	int count = 0;
	// 追加
	NCMB ncmb;
```

クラスの初期化時にNCMBも初期化します。キーは[ニフクラ mobile backend](https://mbaas.nifcloud.com/)より取得してください。

```cs
public MainPage()
{
	InitializeComponent();
	ncmb = new NCMB("YOUR_APPLICATION_KEY", "YOUR_CLIENT_KEY");
}
```

## データを保存してみる

今回はボタンをタップした際に、そのカウント数を保存してみます。利用するのはNCMBObjectです。これはデータベースでいう行相当のオブジェクトになります。`Set` メソッドでデータ尾フィールドに適用し、`Save` メソッドでデータをクラウドのデータベースへ保存します。

```cs
private void OnCounterClicked(object sender, EventArgs e)
{
	count++;
	var obj = new NCMBObject("Maui");
	obj.Set("Count", count);
	obj.Save();
	if (count == 1)
		CounterBtn.Text = $"Clicked {count} time";
	else
		CounterBtn.Text = $"Clicked {count} times";

	SemanticScreenReader.Announce(CounterBtn.Text);
}
```

ボタンを押すごとにデータが保存されているのが分かります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/197026/01e3354a-db3c-4b16-a107-2fb12541eca2.png)


## まとめ

MAUIアプリの中でも問題なくNCMBのC# SDKは利用できそうです。MAUIアプリはXamarin.Formsの後継ともいわれています。これからC#を使ってマルチプラットフォーム向けにアプリを開発するならば、MAUIを覚えるのが良いでしょう。

[C# SDKはMIT Licenseで公開しています](https://github.com/NCMBMania/ncmb_xamarin)ので、ぜひ使ってみてください。

[NuGet Gallery | NCMBClient 0.10.0](https://www.nuget.org/packages/NCMBClient/)