Azure Spatial Anchorsを試してみました。

# はじめに
 2019/05末に de:code 2019 が開催され、参加してきました。
 https://www.microsoft.com/ja-jp/events/decode/2019/default.aspx
 
 その中のセッションで「[Azure Spatial Anchors を使用した iOS ARKit アプリケーション開発入門](https://www.microsoft.com/ja-jp/events/decode/2019session/detail.aspx?sid=CM03&tk=CM)」にて、ARアプリケーション開発 x Azure に興味を持ったので試してみました。

# Azure Spatial Anchors とは
> 空間コンテキストでクロスプラットフォームの複合現実アプリケーションを構築

引用元 ： https://azure.microsoft.com/ja-jp/services/spatial-anchors/

複数デバイス間で、AR空間を共有するためのクラウドサービス。

# チュートリアル
- 下記のチュートリアルが最も良いかと思います。
    - https://docs.microsoft.com/ja-jp/azure/spatial-anchors/tutorials/tutorial-use-cosmos-db-to-store-anchors
- de:code でのセッションもこのチュートリアルをもとに講演されていたように思います。

チュートリアルにはWindowsにてVisualStudioが必要とありますが、
VisualStudioCodeを使用することでMacで開発を完結することができたのでそちらをメインで紹介したいと思います。

## 開発環境
- macOS mojave
- Unity 2018.3.14f1
- VisualStudio Code
- iPhone 8

## 事前準備
- VisualStudio Codeのインストール
    - 拡張機能として、Azure App Service のインストール 
    - https://code.visualstudio.com/tutorials/app-service-extension/getting-started
- homebrew のインストール
    - https://brew.sh/index_ja
    - brewを使って、 git、.NET Core SDKのインストール
        - `brew install git`
        - `brew cask install dotnet-sdk`
- CoCoaPods のインストール
    - `sudo gem install cocoapods`
- Unity のインストール
    - https://unity3d.com/jp/unity/whats-new/2018.3.14
    - iOS Target Support もインストール
- Azureへの登録
    - https://azure.microsoft.com/ja-jp/
- Spatial Anchors のSample Clone
    - https://github.com/Azure/azure-spatial-anchors-samples

## チュートリアル
- https://docs.microsoft.com/ja-jp/azure/spatial-anchors/tutorials/tutorial-use-cosmos-db-to-store-anchors
- チュートリアルを見て進めていただけたらほとんど迷うことはないと思います。
- いくつか異なる手順で行ったことがあるので説明します。

### VSCodeからアンカー共有サービスのデプロイ
- https://docs.microsoft.com/ja-jp/azure/spatial-anchors/tutorials/tutorial-use-cosmos-db-to-store-anchors#deploy-the-sharing-anchors-service

チュートリアルではVisualStudioを使ってデプロイをしていますが、今回はVSCodeからDeployしてみようと思います。
チュートリアルの発行ウィザードを開く移行が異なります。

1. sampleレポジトリの`Sharing/SharingService`をVSCodeで開きます。
2. VSCodeのTerminalを開き、 `dotnet publish -c Release -o ./publish` を実行します。
    - Release形式でビルドするコマンドです。
    - https://docs.microsoft.com/ja-jp/dotnet/core/tools/dotnet-publish?tabs=netcore21
3. Azure App Service のExtensionを開きます。
4. サインインするか、アカウントの作成を行います。クリックするとブラウザでMicrosoftのサインイン画面が開きます。
5. サインインすると、アカウントに紐づいているWebアプリの一覧が表示されます。
    - 右上の + ボタンを押すことでここから作成することもできます。
6. 選択できるWebアプリがある状態で右上の ↑「Deploy to Web App...」ボタンを押すとフォルダーの選択になります。
7. ここで、先ほど作成した `Sharing/SharingService/publish`を指定します。
8. デプロイ完了後に `https://<app_name>.azurewebsites.net ` を見るとSwagger画面になり、利用できるAPI一覧が表示されればOKです。

### ビルドたiOSアプリが正しく動作しない
- sampleレポジトリの `Unity`を開き、 ARKit を導入しただけの状態でビルドすると正しく動作しませんでした。
- ErrorLogを見るとNullReferenceExceptionが発生していました。
- Unity-ARKit-Pluginを導入後に、 Assets-> Reimport All を行うと解消しました。
- 必要なAssetの参照が外れてしまっていたようです。

## 動作確認
- インストールされたiOSアプリで、Anchors オブジェクトを置きます。
- ほかのアプリからそのAnchors 番号をロードするか、再度再起動して読み直して表示されれば成功です。

# 最後に & de:code に参加して
- チュートリアルで細かい点まで補足、リンクが入っておりほとんど躓かず進めることができました。
- Unityでのサンプルがしっかりと用意されており、今回はiOSだけで試しましたがAndroid、HoloLensでも作成可能で簡単にマルチプラットフォーム開発できるなと感じました。
    - 実際に講演時にはiOS x HoloLens で実演されていました。
- 今までARアプリの開発は行ったことがなかったのですが、空間共有が簡潔に行えそうで、AzureSpatialAnchorsを使って何か開発してみよと思いました。
- de:codeに関しては、MRに関するセッションが多くあり、現職のVRとの関連性から、参考になる者も多かったです。
- 他にも、Azureを用いた開発実例のセッションが多くあり、MicrosoftのWindowsとの親和性、VSCodeのExtensionの充実などからクラウドインフラとして検討してみようと思いました。