windows azure mobile servicesによるアプリ構築
DESCRIPTION
第8回まどべんよっかいちでの発表内容です。Windows Azureのモバイルサービスで提供される機能を紹介しています。TRANSCRIPT
![Page 1: Windows Azure Mobile Servicesによるアプリ構築](https://reader035.vdocuments.site/reader035/viewer/2022081401/559814d41a28ab671d8b45e4/html5/thumbnails/1.jpg)
Windows Azure Mobile Serviceでのアプリ開発
@第8回まどべんよっかいち2014/3/29青木 宣明(@kumar0001)
![Page 2: Windows Azure Mobile Servicesによるアプリ構築](https://reader035.vdocuments.site/reader035/viewer/2022081401/559814d41a28ab671d8b45e4/html5/thumbnails/2.jpg)
モバイルアプリの開発
• サーバ側システムの開発
• BaaSとは
![Page 3: Windows Azure Mobile Servicesによるアプリ構築](https://reader035.vdocuments.site/reader035/viewer/2022081401/559814d41a28ab671d8b45e4/html5/thumbnails/3.jpg)
モバイルアプリ開発の対象
端末側アプ
リ
• Model
• View(ネイティブ or
Web)
サーバ・ア
プリ間通信
•伝送方式
•データ表現
サーバ側シ
ステム
•データストア
•端末側アプリ向けI/F
•認証・アクセス権
•プッシュ通知
既存のサービスを使ったアプリはここだけでよいが
新しいサービスではこれらの設計・開発
も必要に
![Page 4: Windows Azure Mobile Servicesによるアプリ構築](https://reader035.vdocuments.site/reader035/viewer/2022081401/559814d41a28ab671d8b45e4/html5/thumbnails/4.jpg)
サーバ側システム開発の事情
端末側アプリ開発以外にリソースを避けない事情
• 開発予算が限られている
• サーバ側のスキルが不足している
• 端末側アプリをリリースできるよう開発に注力したい
• 実験的なサービスのサーバ側システムを素早く構築したい
![Page 5: Windows Azure Mobile Servicesによるアプリ構築](https://reader035.vdocuments.site/reader035/viewer/2022081401/559814d41a28ab671d8b45e4/html5/thumbnails/5.jpg)
個人的な背景
TODO管理アプリで自分に適したものが見つからない
• Win8/WP8端末で同期できることが条件
無ければ自分で作ってしまおうか?
•端末間の同期を考えるとサービスを提供するサーバがほしい
•モバイル端末だけでは複雑な処理ができないので、なおさら必要
でも、サーバ側を構築する余力がない
• Webサービス、データベースの経験が浅い
•モバイル端末側のAP開発で手がいっぱい
![Page 6: Windows Azure Mobile Servicesによるアプリ構築](https://reader035.vdocuments.site/reader035/viewer/2022081401/559814d41a28ab671d8b45e4/html5/thumbnails/6.jpg)
Baas サーバ側システム開発の省力化
モバイルアプリのサーバ側システムを構築するためのサービス
• Backend As A Serviceの略
• 主要機能を手軽に実装できるサービスを提供する
BaaSを使えばとりあえずサーバ側のプロトタイプを作成して、端末側アプリに注力できるのでは?
![Page 7: Windows Azure Mobile Servicesによるアプリ構築](https://reader035.vdocuments.site/reader035/viewer/2022081401/559814d41a28ab671d8b45e4/html5/thumbnails/7.jpg)
BaaSの主な提供機能
BaaS
認証
• SNSアカウント認証を
ベースとした認証
• Twitter・Facebookなど
ストレージ
•サーバ側にデータを格納
アクセス制御
•認証結果にょるストレー
ジアクセスの制御
プッシュ通知
•サーバから端末に通知
![Page 8: Windows Azure Mobile Servicesによるアプリ構築](https://reader035.vdocuments.site/reader035/viewer/2022081401/559814d41a28ab671d8b45e4/html5/thumbnails/8.jpg)
BaaSとXaaS
ユーザ準備範囲
ベンダー提供範囲
AP
ミドルウェア
OS
ハードウェア
SaaS PaaS
AP
ミドルウェア
OS
ハードウェア
IaaS
AP
ミドルウェア
OS
ハードウェア
BaaS
AP
ミドルウェア
OS
ハードウェア
モバイルアプリのプラットフォームとしてPaaSにあたる
役割を担う
![Page 9: Windows Azure Mobile Servicesによるアプリ構築](https://reader035.vdocuments.site/reader035/viewer/2022081401/559814d41a28ab671d8b45e4/html5/thumbnails/9.jpg)
BaaSのメリット
開発スピード
•データ管理、認証を出来合いの機能で実現できる
•サーバ構築の過程が不要
サーバサイド開発の省力化
•サーバ管理のコストを十分にさけなくてもよい
•サーバ構築のコストが不要
![Page 10: Windows Azure Mobile Servicesによるアプリ構築](https://reader035.vdocuments.site/reader035/viewer/2022081401/559814d41a28ab671d8b45e4/html5/thumbnails/10.jpg)
BaaSのデメリット
カスタマイズの限界
• BaaSの提供機能が、機能拡張に不十分な場合がある
ベンダーロックイン
• ベンダーの提供機能に制約されるため、自前サーバや他BaaS
への移行が困難
セキュリティ対策
• 認証などセキュリティ機能が基本的な機能に限定される
![Page 11: Windows Azure Mobile Servicesによるアプリ構築](https://reader035.vdocuments.site/reader035/viewer/2022081401/559814d41a28ab671d8b45e4/html5/thumbnails/11.jpg)
Windows Azure Mobile Service (WAMS)とは
• 概要
• 主要機能
![Page 12: Windows Azure Mobile Servicesによるアプリ構築](https://reader035.vdocuments.site/reader035/viewer/2022081401/559814d41a28ab671d8b45e4/html5/thumbnails/12.jpg)
Windows Azure Mobile Serviceとは
Windows Azureが提供するBaaS
• バックエンドの主要機能を手軽に構築
• Azureの各機能の利用
通知ハブ、ストレージ、メール送信など
• マルチプラットフォームに対応
WP8やWin8ストアアプリだけではない
![Page 13: Windows Azure Mobile Servicesによるアプリ構築](https://reader035.vdocuments.site/reader035/viewer/2022081401/559814d41a28ab671d8b45e4/html5/thumbnails/13.jpg)
2種類のバックエンド
2種類のバックエンド処理の定義方法
• Node.js版
node.jsライブラリを使ったバックエンド処理
言語はjavascript
• .NET版
ASP.NET Web APIを使ったバックエンド処理
言語はC#もしくはVB.NET
.NET版は2014/2にプレビュー提供
![Page 14: Windows Azure Mobile Servicesによるアプリ構築](https://reader035.vdocuments.site/reader035/viewer/2022081401/559814d41a28ab671d8b45e4/html5/thumbnails/14.jpg)
主要機能
1. 認証2. ストレージ・アクセス権3. カスタムAPI4. プッシュ通知
その他• Gitでの変更管理• スケジュール実行• ロギング• スケーリング• プロジェクトテンプレート
![Page 15: Windows Azure Mobile Servicesによるアプリ構築](https://reader035.vdocuments.site/reader035/viewer/2022081401/559814d41a28ab671d8b45e4/html5/thumbnails/15.jpg)
(1)認証
外部の認証プロバイダによる認証機能
• Microsoft Account
• Windows Azure Active Directory
管理ポータル画面に必要な情報を設定するだけでよい
![Page 16: Windows Azure Mobile Servicesによるアプリ構築](https://reader035.vdocuments.site/reader035/viewer/2022081401/559814d41a28ab671d8b45e4/html5/thumbnails/16.jpg)
認証の設定画面
![Page 17: Windows Azure Mobile Servicesによるアプリ構築](https://reader035.vdocuments.site/reader035/viewer/2022081401/559814d41a28ab671d8b45e4/html5/thumbnails/17.jpg)
認証画面の追加
![Page 18: Windows Azure Mobile Servicesによるアプリ構築](https://reader035.vdocuments.site/reader035/viewer/2022081401/559814d41a28ab671d8b45e4/html5/thumbnails/18.jpg)
(2)ストレージ・アクセス権
Node.js
• 管理ポータル画面 or Visual studioでテーブルを定義
• クライアントからテーブルのCRUD用APIでアクセス
• テーブルのCRUD操作ごとのアクセス権限を設定
.NET版
• ASP.NET Web APIとしてAPIを定義⇒モバイルサービスに配備
• Web APIから任意のストレージを利用
• クライアントからWeb APIにアクセス
![Page 19: Windows Azure Mobile Servicesによるアプリ構築](https://reader035.vdocuments.site/reader035/viewer/2022081401/559814d41a28ab671d8b45e4/html5/thumbnails/19.jpg)
テーブル定義 (Node.js版)管理ポータル画面から
![Page 20: Windows Azure Mobile Servicesによるアプリ構築](https://reader035.vdocuments.site/reader035/viewer/2022081401/559814d41a28ab671d8b45e4/html5/thumbnails/20.jpg)
テーブル定義 (Node.js版)
Visual Studioから
![Page 21: Windows Azure Mobile Servicesによるアプリ構築](https://reader035.vdocuments.site/reader035/viewer/2022081401/559814d41a28ab671d8b45e4/html5/thumbnails/21.jpg)
テーブル定義 (Node.js版)
• 作成後のテーブルは基本の列だけ
• id
• __createdAt
• __updatedAt
• __version
• Insert/UpdateしたときにJSONオブジェクトに応じて動的に列を作成
![Page 22: Windows Azure Mobile Servicesによるアプリ構築](https://reader035.vdocuments.site/reader035/viewer/2022081401/559814d41a28ab671d8b45e4/html5/thumbnails/22.jpg)
テーブル定義 (Node.js版)
列の動的作成
• モバイルサービスのDynamic Schema機能をオフにすることで抑止
![Page 23: Windows Azure Mobile Servicesによるアプリ構築](https://reader035.vdocuments.site/reader035/viewer/2022081401/559814d41a28ab671d8b45e4/html5/thumbnails/23.jpg)
APIアクセス (Node.js版)
IMobileServiceTable<T>インターフェースを使ってAPIにアクセス• OData形式のRESTサービスとしてアクセスする
問い合わせ系 検索系 追加・更新 削除
Read Select Insert Delete
Lookup Skip Update
Take
ThenBy
ThenByDescending
OrderBy
Where
![Page 24: Windows Azure Mobile Servicesによるアプリ構築](https://reader035.vdocuments.site/reader035/viewer/2022081401/559814d41a28ab671d8b45e4/html5/thumbnails/24.jpg)
アクセス権
権限 意味
すべてのユーザ URLにアクセスすれば誰でもアクセス可能
アプリケーションキーを持つすべてのユーザ
APごとのキーをHTTPヘッダ(*)に指定した通信について許可される。IMobileServiceTableによるアクセスで自動的に設定される。
(*) X-ZUMO-APPLICATION
認証済みユーザのみ 認証トークンをHTTPヘッダ(*)に指定した通信について許可される。
(*) X-ZUMO-AUTH
スクリプトと管理者のみ 内部のスクリプトからのアクセス、もしくは管理者としてのアクセス(*)の場合に許可される。(*) X-ZUMO-MASTERヘッダ
![Page 25: Windows Azure Mobile Servicesによるアプリ構築](https://reader035.vdocuments.site/reader035/viewer/2022081401/559814d41a28ab671d8b45e4/html5/thumbnails/25.jpg)
アクセス権(Node.js版)管理ポータル画面から
![Page 26: Windows Azure Mobile Servicesによるアプリ構築](https://reader035.vdocuments.site/reader035/viewer/2022081401/559814d41a28ab671d8b45e4/html5/thumbnails/26.jpg)
アクセス権(Node.js版)
Visual Studioから
![Page 27: Windows Azure Mobile Servicesによるアプリ構築](https://reader035.vdocuments.site/reader035/viewer/2022081401/559814d41a28ab671d8b45e4/html5/thumbnails/27.jpg)
.NET版では
テーブル定義カスタムAPI定義
Node.js版
.NET版
.NET版ではテーブル定義とカスタムAPI定義がない
![Page 28: Windows Azure Mobile Servicesによるアプリ構築](https://reader035.vdocuments.site/reader035/viewer/2022081401/559814d41a28ab671d8b45e4/html5/thumbnails/28.jpg)
ASP.NET Web API (.NET版)
Web APIプロジェクトを作成
コントローラクラスにCRUD操作に対応したHTTP verb毎にメソッドを定義
Web API
Windows Azure Mobile Service • POST• GET• PUT / PATCH• DELETE
![Page 29: Windows Azure Mobile Servicesによるアプリ構築](https://reader035.vdocuments.site/reader035/viewer/2022081401/559814d41a28ab671d8b45e4/html5/thumbnails/29.jpg)
Controllerクラス
![Page 30: Windows Azure Mobile Servicesによるアプリ構築](https://reader035.vdocuments.site/reader035/viewer/2022081401/559814d41a28ab671d8b45e4/html5/thumbnails/30.jpg)
Web APIのデプロイ
2通りの方法
• Visual Studioから配備
• GitでプロジェクトをPush
![Page 31: Windows Azure Mobile Servicesによるアプリ構築](https://reader035.vdocuments.site/reader035/viewer/2022081401/559814d41a28ab671d8b45e4/html5/thumbnails/31.jpg)
Visual Studioから配備
![Page 32: Windows Azure Mobile Servicesによるアプリ構築](https://reader035.vdocuments.site/reader035/viewer/2022081401/559814d41a28ab671d8b45e4/html5/thumbnails/32.jpg)
Visual Studioから配備
![Page 33: Windows Azure Mobile Servicesによるアプリ構築](https://reader035.vdocuments.site/reader035/viewer/2022081401/559814d41a28ab671d8b45e4/html5/thumbnails/33.jpg)
GitでプロジェクトをPush
ソリューションのフォルダで実施git initwget http://www.gitignore.io/api/visualstudiomv visualstudio .gitignoregit add .git commit –m “comment”git remote add origin https://madoben201403-net.scm.azure-mobile.net/madoben201403-net.gitgit push origin master
![Page 34: Windows Azure Mobile Servicesによるアプリ構築](https://reader035.vdocuments.site/reader035/viewer/2022081401/559814d41a28ab671d8b45e4/html5/thumbnails/34.jpg)
Git Pushでの更新例
![Page 35: Windows Azure Mobile Servicesによるアプリ構築](https://reader035.vdocuments.site/reader035/viewer/2022081401/559814d41a28ab671d8b45e4/html5/thumbnails/35.jpg)
APIアクセス (.NET版)
IMobileServiceTable<T>インターフェースを使ってAPIにアクセス• OData形式のRESTサービスとしてアクセスするのはnode.js版と同じ
問い合わせ系 検索系 追加・更新 削除
Read Select Insert Delete
Lookup Skip Update
Take
ThenBy
ThenByDescending
OrderBy
Where
![Page 36: Windows Azure Mobile Servicesによるアプリ構築](https://reader035.vdocuments.site/reader035/viewer/2022081401/559814d41a28ab671d8b45e4/html5/thumbnails/36.jpg)
アクセス権(.NET版)
メソッドごとに変更も可能
![Page 37: Windows Azure Mobile Servicesによるアプリ構築](https://reader035.vdocuments.site/reader035/viewer/2022081401/559814d41a28ab671d8b45e4/html5/thumbnails/37.jpg)
(3)カスタムAPI
Node.js版
•サーバスクリプト:テーブル操作をカスタマイズ
•カスタムAPI:独自のAPIを定義
•どちらもjavascriptで記述
.NET版
• Web APIを作成するため、処理内容は自由
![Page 38: Windows Azure Mobile Servicesによるアプリ構築](https://reader035.vdocuments.site/reader035/viewer/2022081401/559814d41a28ab671d8b45e4/html5/thumbnails/38.jpg)
サーバスクリプト (Node.js版)
CRUD操作に対応したスクリプト
• 各APIをカスタマイズして、各操作の処理内容を変更できる
データ検証など
API
Windows Azure Mobile Service • Insert• Read• Update• Delete
例• 端末からのデータの検証• 独自のアクセス制限
![Page 39: Windows Azure Mobile Servicesによるアプリ構築](https://reader035.vdocuments.site/reader035/viewer/2022081401/559814d41a28ab671d8b45e4/html5/thumbnails/39.jpg)
カスタムAPI (Node.js版)
新しくAPIを定義できる• テーブル操作に基づかないデータ操作• 複合的な処理をサーバ側で実装して、端末側APで複雑な処理を行わない
CRUD操作に対応したHTTP verb毎にスクリプトを定義
API
Windows Azure Mobile Service • POST• GET• PUT / PATCH• DELETE
端末側からはInvokeAPIAsyncメソッドで呼び出す
![Page 40: Windows Azure Mobile Servicesによるアプリ構築](https://reader035.vdocuments.site/reader035/viewer/2022081401/559814d41a28ab671d8b45e4/html5/thumbnails/40.jpg)
複数テーブルへの問い合わせ
IMobileServiceTable<T>インターフェースにはjoin系のメソッドがない
• 複数の表を結合する操作はサーバ側で実装して、カスタムAPIを通して端末側から利用させる
API
Windows Azure Mobile Service
• POST• GET• PUT / PATCH• DELETE
端末側はサーバ側の処理結果を利用するだけに留めるテーブルのJOINは
サーバ側で実施
![Page 41: Windows Azure Mobile Servicesによるアプリ構築](https://reader035.vdocuments.site/reader035/viewer/2022081401/559814d41a28ab671d8b45e4/html5/thumbnails/41.jpg)
(4)プッシュ通知
通知方法は2種類• 従来のプッシュ通知サービス(WNS/MPNSなど)を使う
Windows Push Notification Service (Win8) Microsoft Push Notification Service (WP8) Apple Push Notification Service (iOS)+その他
• Windows AzureのNotification Hubを使う
API
Windows Azure Mobile Service
PNS ⑤プッシュ通知
①通知サービスのチャネル確立
④プッシュ通知を要求
②チャネルを通知
③通知イベント発生
![Page 42: Windows Azure Mobile Servicesによるアプリ構築](https://reader035.vdocuments.site/reader035/viewer/2022081401/559814d41a28ab671d8b45e4/html5/thumbnails/42.jpg)
従来のプッシュ通知のデメリット
WNS/MPNSを使う場合、APIからPNSへのプッシュ通知要求はプッシュ通知のプラットフォーム毎に行う必要がある
プッシュ通知のプラットフォームが増えるとAPI側のロジックを修正する必要がある
API
Windows Azure Mobile Service
⑤プッシュ通知
①通知サービスのチャネル確立
④プッシュ通知を要求
②チャネルを通知
③通知イベント発生
WNS⑤プッシュ通知
①通知サービスのチャネル確立
②チャネルを通知MPNS
![Page 43: Windows Azure Mobile Servicesによるアプリ構築](https://reader035.vdocuments.site/reader035/viewer/2022081401/559814d41a28ab671d8b45e4/html5/thumbnails/43.jpg)
Notification Hubのメリット
Notification Hubを使うと、APIからはHubに1回要求すればよい。
各プッシュ通知プラットフォームへの通知要求はNotification Hubが行う。• スケーリングにもハブ側で対応できる。
API
Windows Azure Mobile Service
⑥プッシュ通知
①通知サービスのチャネル確立
④プッシュ通知を要求
②チャネルを通知
③通知イベント発生
WNS⑥プッシュ通知
①通知サービスのチャネル確立
②チャネルを通知MPNS通知ハブ
⑤プッシュ通知を要求
![Page 44: Windows Azure Mobile Servicesによるアプリ構築](https://reader035.vdocuments.site/reader035/viewer/2022081401/559814d41a28ab671d8b45e4/html5/thumbnails/44.jpg)
WAMSのメリット
•管理ポータル画面からサービス側を定義するだけで構築可能
•プロジェクトテンプレートから端末側APのプロトタイプを作成可能開発スピード
•Azureでサーバ管理の面倒を見てくれる
•Node.jsもしくはWeb APIで開発できるので、参考情報が多い
•スケーリングにも対応しやすい
サーバサイド開発の省力化
•.NETバックエンドであればデプロイし直せば済むはず
•Node.jsバックエンドのデータベースはSQL Serverなので、データ移
行も容易
自前サーバへの移行が容易
![Page 45: Windows Azure Mobile Servicesによるアプリ構築](https://reader035.vdocuments.site/reader035/viewer/2022081401/559814d41a28ab671d8b45e4/html5/thumbnails/45.jpg)
まとめ
サーバ側システム(バックエンド)の開発を省力化するBaaS
• バックエンドを短期間で立ち上げられる
•限られた開発リソースを端末側のアプリ開発により多く充てられる
WAMSでAzureを活用したバックエンドの構築
• Azureのサービス、スケーラビリティを利用できる
•バックエンドはNode.js/ASP.NET Web APIで開発できるので、既存の
ノウハウを応用できる
![Page 46: Windows Azure Mobile Servicesによるアプリ構築](https://reader035.vdocuments.site/reader035/viewer/2022081401/559814d41a28ab671d8b45e4/html5/thumbnails/46.jpg)
WAMSその他機能
• プロジェクトテンプレート
• 料金
![Page 47: Windows Azure Mobile Servicesによるアプリ構築](https://reader035.vdocuments.site/reader035/viewer/2022081401/559814d41a28ab671d8b45e4/html5/thumbnails/47.jpg)
プロジェクトテンプレート
Node.js .NET
Windows Phone 8 ○ ○
Windows 8.x ストアアプリ ○ ○
iOS ○ ○
Android ○ ー
Web AP(HTML/JavaScript) ○ ー
Xamarin ○ ー
PhoneGap ○ ー
![Page 48: Windows Azure Mobile Servicesによるアプリ構築](https://reader035.vdocuments.site/reader035/viewer/2022081401/559814d41a28ab671d8b45e4/html5/thumbnails/48.jpg)
料金体系
最初の12か月間のみ1ジョブ1時間あたり1回
10ジョブ50,000回
10ジョブ500,000回
Mobile Service
![Page 49: Windows Azure Mobile Servicesによるアプリ構築](https://reader035.vdocuments.site/reader035/viewer/2022081401/559814d41a28ab671d8b45e4/html5/thumbnails/49.jpg)
料金体系
通知ハブ