Azure Mobile Apps の2015 年 11 月更新版を発表

11月 16, 2015 に投稿済み

Senior Program Manager, Azure Functions

この記事では、App Service にモバイルアプリケーション開発をサポートするさまざまな新機能が追加されたことについてご報告します。App Service Mobile が今まで以上に強化され、機能もさらに充実し、使いやすさも向上して、次期モバイルバックエンド API として最適な選択肢となりました。

今回の更新では、次のような機能が追加されています。

  • モバイルアプリケーション用のコード不要のテーブルと API
  • ターンキー認証のサポート
  • ファイル同期機能
  • REST API の更新 (複数の画期的な変更を含む)

今回、ポータルの更新に加えて、以下の SDK がリリースされます。

  • Node.JS Server SDK - 2.0.0-alpha5
  • .NET Server SDK - 0.3.36.0 (リリース候補版)
  • iOS Client SDK - 3.0.0-beta4 (リリース候補版)
  • Windows および Xamarin Client SDK - 2.0.0-beta3 (リリース候補版)

Easy Tables – Mobile Apps 向けのコード不要の API (プレビュー)

以前の Mobile Services のメリットは、テーブルの作成やスクリプトの編集をブラウザーから直接実行できる点でした。ユーザーはサーバープロジェクトのデプロイや大量のコードのメンテナンスの負担から解放され、アプリの更新にも場所を選びませんでした。この機能の使いやすさを惜しむお客様の強いご要望に応え、このたび同様のエクスペリエンスが Azure Mobile Apps にあらためて実装されることになりました。

clip_image001

これによりユーザーは、SQL Azure を基盤とするモバイル対応の OData CRUD API「Easy Tables」を簡単に作成できるようになります。これらの API の最上級のサポートは、iOS、Android、Windows、Xamarin、Cordova プラットフォームの Mobile Apps Client SDK で提供されます。また、マイクロソフトのオフラインデータ同期機能ともすぐに連携させることができます。テーブルを作成すると、テーブルが格納するデータの表示、スキーマの変更、カスタム ロジックの追加を、すべてポータル内で行うことができます。

AppService_blog_Nov16_easydata

また、Easy Tables には非常に高い柔軟性が実現されています。この柔軟性の基盤は Express.JS アプリケーションと SQL データベースのスキャフォールディングです。サイトとデータベースは、いつでも引き継ぎ、自由にカスタマイズすることができます。また、ストレージレイヤーを入れ替えて、Azure Table Storage、Mongo DB、その他あらゆるデータサービスを利用することも可能です。この方法は、Node アプリケーションの開発アプローチの 1 つの選択肢になります。また、必要に応じて Git または App Service が提供する他のデプロイ オプションのいずれかを使用して、いつでもデプロイできます。

現在この機能が利用できるのは、ポータルで作成された Node SDK によるサイトに限定されています。このため、この機能を試す場合は、前掲のクイックスタートに移動して詳細を確認してください。クイックスタートがデプロイされたら、[Settings] の [Easy Tables] および [Easy APIs] オプションを使って、エンドポイントを作成、管理することができます。いずれかのオプションで [Edit Script] をクリックすると Visual Studio Online のエディターが起動します。

コード不要の認証/承認

少し前に、新しい App Service の認証と承認機能に関するブログ記事も公開されています。この新たなリリースにより、Azure Active Directory、Facebook、Google、Microsoft アカウント、Twitter、その他のカスタム ID プロバイダーによる認証を App Service インスタンスに簡単に組み込むことができるようになりました。また、以前の Mobile Services で提供されていたすべての機能が引き継がれるだけでなく、スコープのサポートがさらに充実し、ユーザーによるコード記述が必要ないなど、管理面もさらに簡素化されています。

お寄せいただいた数多くのフィードバックの 1 つに、アプリケーションレベルで認証を強力に制御したいというご意見がありました。この声にお応えし、プレビュー版の初期に採用されていた App Service ゲートウェイに代わる App Service Authentication/Authorization が Mobile Apps に導入されました。ゲートウェイは現在廃止の方針ですが、実際に発表があるまではこれまでと同様の動作をご利用いただけます。Authentication/Authorization 機能には追加のリソースは一切必要なく、すべての App Service アプリケーションですぐに利用できます。

認証と承認

[Mobile Authentication] 設定オプションを使わずにアプリケーションの認証を有効化するには、[Authentication/Authorization] を選択します。以前と同様の認証機能が利用でき、AAD の構成手順はわずか数クリックで完了します。この変更に伴い [Mobile Authentication] ショートカットは削除される予定ですが、既存のゲートウェイを引き続き使用する場合は、リソースグループからいつでもアクセスできます。

また、この変更によりログインと ID のエンドポイントの一部が変更され、Client SDK にも変更が反映されています。詳細については、認証と承認に関するブログ記事を参照してください。また、長い間ご要望が寄せられていたカスタム認証のサポートについてもプレビュー版で対応しています。詳細については以下の .NET Server SDK に関するセクションをお読みください。

ファイル同期のサポート

App Service Mobile が提供するデータ同期機能を使用すると、オフラインで動作するアプリの開発と、さまざまなバックエンドデータストアとの同期が可能になります。この機能の対象はこれまで構造化データに限定されていましたが、本日よりプレビューとしてファイルのサポートが追加されテーブルにより公開されるすべてのエンティティに、Blob Storage に保存されるファイルへの参照を含められるようになりました。  クライアント側では、エンティティから参照するファイルへの変更が追跡されます。この機能により、以下の API が Client SDK に提供されます。

mobileClient.InitializeFileSync(new MyFileSyncHandler(this), syncStore);
await myTable.PullFilesAsync(entity);
await myTable.PushFileChangesAsync();

MyFileSyncHandler は IFileSyncHandler の実装です。これにより、ローカル保存するファイルの場所がアプリケーションに通知され、既定の同期ルールを上書きできるようになります。

アプリケーションと Blob Storage の安全な同期を可能にするクライアント用の SAS キーの発行は Server SDK が処理します。また、同期メタデータの管理やテーブルエンティティへのファイルのアタッチ方法の管理もServer SDK がサポートします。

ファイル同期のサポートをお試しいただく場合は、Xamarin および Windows 用のクライアント ライブラリをこちらからインストールしてください。この機能の詳しいサンプルは、こちらからダウンロードしていただけます。

REST API の変更

API バージョンのチェック

クライアントとサーバーのバージョンを常に同じにすることは、モバイル開発における 1 つの課題です。このことは、プロジェクトの依存関係に関するバージョンのメジャーアップグレードを実施する場合に特に重要になるだけでなく、今後の Mobile Apps SDK の更新を簡単にご利用いただくという点では、マイクロソフト自身の問題でもありましたが、本日発表されたバージョン管理システムにより、クライアントおよびサーバー間での API コントラクトの不一致を防止することができます。このシステムでは、Client SDK が提供するバージョンヘッダーを Server SDK が確認し、サポート対象のクライアントバージョンでない場合は、サーバーがエラーを返し、受け入れ可能なバージョンを提示します。

つまり、古いバージョンの Mobile Service Client SDK は最新の Mobile Apps Server SDK と通信できません。API の動作の大部分は以前から変わっていませんが、プッシュ通知の登録の処理方法など一部に違いがあります。こうした変更点が開発者を戸惑わせないようにする方法をできるだけシンプルに実現したのが、このバージョンチェックです。

提供された Mobile Apps SDK を使用しないコンポーネントがアプリケーションに含まれている場合、REST 呼び出しでバージョンを指定することができます。ZUMO-API-VERSION をヘッダーまたはクエリ文字列のパラメーターとして追加します。この値が対象バージョンとなります。特定のバージョンに関する詳しい情報や、相互にどのようなやり取りが行われているかについては、クライアントとサーバーのバージョン管理に関する新しいトピックをお読みください。

システムプロパティ名の変更

9 月の更新ではシステム プロパティが返される方法を変更しましたが、今回のリリースではプロパティの名前を変更し、プロパティの先頭に追加されていた 2 つのアンダースコアを削除しました。__createdAt__updatedAt__version__deletedの各プロパティは、それぞれcreatedAtupdatedAtversiondeletedに名前が変更されました。これにより AutoMapper などのツールを使ったデータ型マッピングをより簡単に記述できるようになり、アプリ全体で使用されるデータ オブジェクトもよりきめ細かく制御できるようになります。ただし、これに伴い API コントラクトが大幅に変更されている点にご注意ください。また Client SDK および Server SDK はこの変更を反映しているため、両方を同時に更新する必要があります。そうすることで API バージョンを揃えることができます。

Node.JS Server SDK 2.0.0-alpha5

先月は Node.JS SDK をオープン ソース化して、ユーザーの皆様がマイクロソフトの計画を確認し、プロセスにも参加していただけるようにしました。既にコミュニティからはいくつもの重要な作業にかかわっていただいています。引き続きご協力いただけますと幸いです。

なお、この SDK は現在まだアルファ版です。皆様にはぜひ積極的にお試しいただきたいですが、このバージョンを運用環境で使うことは避けてください。さらにいくつかのフィードバックを実装してから、ベータ版に移行する予定です。

現バージョンの SDK は、ポータル内編集にも対応している、ポータルのクイックスタートからご利用いただくことも可能です。Node.JS モバイルアプリをポータルで作成するには、[New]、[Web + Mobile]、[Mobile App] の順に選択し、作成手順に従って操作します。アプリを作成したら、アプリに移動して、[Settings]、モバイルカテゴリの [Get Started] の順に選択し、クライアントプラットフォームを選択して手順に従って操作します。手順 2 では、従来のクイックスタートを使って Node.JS サイトがプロビジョニングされます。

現在、Node.JS 向けのエンドツーエンドのチュートリアルは用意していません。ただし、Node SDK の使用に関する概要ドキュメントをご利用いただけます。また GitHub リポジトリにも参考になるドキュメントがありますのでご覧ください。Node SDK がアルファ版を終了し、より安定したプレビュー版に移行する時点で、情報を網羅したドキュメントを Azure.com に公開する予定です。

.NET Server SDK リリース候補版

この数か月間、.NET SDK に対してさまざまな更新を加えてきました。これまでのフィードバックから判断して、リリース候補版に移行できる状態にあると考えています。現在はまだプレビュー版ですが、1.0 バージョンに求められる水準にほぼ達していると思います。

この SDK をお使いいただくには、0.3.36.0 NuGet パッケージを該当プロジェクトにインストールしてください。ポータルのクイックスタートプロジェクトも、最新バージョンを使用するよう更新されています。今回の更新でも、その他の更新と同様に重要な変更が行われています。大部分は、特に認証に関連するメソッド名の変更です。機能の利用範囲がモバイルシナリオに限定されなくなったことから、変数やメソッドの先頭の「MobileApp ~」が「AppService ~」に置き換えられています。

カスタム認証のサポートが追加され、新しくなった NuGet パッケージのプレビュー版も公開されます。Microsoft.Azure.Mobile.Server.Login。このパッケージが提供する MobileAppLoginHandler.CreateToken() メソッドを使って、特定のユーザー用にトークンを簡単に発行することができます。たとえば、以下のような API を記述することで、私個人のユーザー名/パスワードストアを利用することができます。

public HttpResponseMessage Post([FromBody] JObject assertion)
{
	if (isValidAssertion(assertion)) //checks against a database
	{
		JwtSecurityToken token = MobileAppLoginHandler.CreateToken(new Claim[] { new Claim(JwtRegisteredClaimNames.Sub, assertion["username"]) }, mySigningKey, myAppURL, myAppURL, TimeSpan.FromHours(24));
		return this.Request.CreateResponse(HttpStatusCode.OK, new LoginResult()
		{
			AuthenticationToken = token.RawData,
			User = new LoginResultUser() { UserId = userName.ToString() }
		});
	}
	else
	{
		return this.Request.CreateUnauthorizedResponse();
	}
}

isValidAssertion はカスタムの検証ロジックをラップするための単なるメソッドで、LoginResult/LoginResultUser は応答に設定されるプロパティをラップするシンプルなオブジェクトです。カスタム認証は非常に軽量なので、独自のストアやサードパーティのプロバイダーと簡単に連携させることができます。

また、MobileAppUser (AppServiceUser に名前が変更されています) など、いくつかの不適切な型も削除されました。このクラスは GetIdentityAsync() メソッドを提供する以外の役割がなかったため、ユーザーによる明示的なキャストが必要でしたが、GetIdentityAsync() を IPrincipal の拡張メソッドに移したことで、以下のようなシンプルな記述が可能になりました。

ProviderCredentials creds = await this.User.GetAppServiceIdentityAsync<FacebookCredentials>(this.Request);

なお、拡張メソッドが適切に表示されるよう "using System.Security.Principal;" ステートメントを含める必要がある点にご注意ください。

また、.NET Server SDK のオープン ソース化も既に発表されています。問題の報告、状況の進捗確認、プロジェクトへの参加には、マイクロソフトの GitHub リポジトリをご利用いただけます。すべての変更は変更ログでご確認いただけますので、併せてご利用ください。

Client SDK リリース候補版

リリース候補版の Client SDK が更新され、バージョンヘッダーのサポートと認証用の新しいエンドポイントの利用に対応するようになりました。また最新の Server SDK を使用するために必要なシステムプロパティの変更にも対応しています。ほとんどの開発者はコードを変更することなく新しい Client SDK にアップデートできます。ただしコンストラクターは例外で、アプリケーション URL およびオプションのすべての委任ハンドラーだけを使用するようになりました。認証の変更に伴いゲートウェイ URL パラメーターが削除され、また、7 月の Server SDK の変更を反映して、アプリケーションキーパラメーターもなくなりました。

iOS (Objective-C)

self.client = [MSClient clientWithApplicationURLString:@"https://contoso.azurewebsites.net"];

iOS (Swift)

let client = MSClient(applicationURLString:"https://contoso.azurewebsites.net")

Windows および Xamarin (C#)

MobileServiceClient client = new MobileServiceClient("https://contoso.azurewebsites.net");

リリース候補版をお試しいただくには、マネージド NuGet パッケージをインストールするか、iOS フレームワークをダウンロードしてください。ポータルのクイックスタートプロジェクトも、リリース候補版を使用するよう更新されています。

HTML/JS クイックスタートの一時公開停止

HTML/JS SDK には、API バージョンのチェック、システムプロパティ名の変更、認証の移行など、いくつかの変更がまだ実装されていません。SDK の互換性に関する混乱を避けるために、ポータルのクイックスタートオプションからこの SDK を一時的に削除することにいたしました。

HTML/JS SDK を安定させることは重要な短期目標でもありますので、クイックスタートをなるべく早く復活できるよう取り組んでまいります。プレビュー版の作業につきご迷惑をおかけいたしますが、ご理解いただけますと幸いです。

マイクロソフトクラウドの今後の予定

これからも数多くの更新が予定されています。今年末までに予定されている変更を以下にまとめました。

  • リリース候補版の SDK をプレビュー版に移行
  • Mobile Apps 向け Android SDK
  • Node.JS SDK のベータ版をリリース
  • Mobile Services をご利用のお客様向けの、コードの変更を必要としないワンクリックによる移行
  • これらすべての機能をご活用いただくためのドキュメントの充実

今回紹介した更新内容を詳しくご確認いただき、ご意見をお寄せください!Mobile Apps チームへのご意見をお送りいただく際は、本記事のコメント欄、TwitterMSDN フォーラムAzure フィードバック サイトをお使いいただけます。