Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Durable Functionsで作るモバイルアプリのサーバーレスなバックエンド for 承...
Search
Toshinori Sugita
April 20, 2018
Technology
1
8.5k
Durable Functionsで作るモバイルアプリのサーバーレスなバックエンド for 承認フロー / Serverless Mobile Backend using Durable Functions for approval flow
Global Azure Bootcamp 2018@TokyoのLT資料です
https://jazug.connpass.com/event/81865/
Toshinori Sugita
April 20, 2018
Tweet
Share
More Decks by Toshinori Sugita
See All by Toshinori Sugita
組織を巻き込む大規模プラットフォーム移行戦略 〜50+サービスのマルチリージョン・マルチプロダクト化で学んだステークホルダー協働の実践〜 / Platform migration strategy engaging all stakeholders
toshi0607
2
2.6k
文系学部卒ソフトウェアエンジニアが Georgia Techコンピューターサイエンス修士課程で直面したもの / What a Liberal Arts Graduate Software Engineer Faced in Georgia Tech's Computer Science Master's Program
toshi0607
4
770
50以上のマイクロサービスを支えるアプリケーションプラットフォームの設計・構築の後悔と進化 #CNDW2024 / regrets and evolution of application platform
toshi0607
5
8.1k
OPA and cloud resources
toshi0607
1
13k
KompalWeather: Serverless Sauna Service with Cloud Run
toshi0607
1
12k
Knativeで作るDIY FaaS / serverless days fukuoka 2019 knative workshop
toshi0607
1
5.2k
Knativeで作るDIY FaaS / serverless days tokyo 2019 knative workshop
toshi0607
5
11k
Knativeへの誘い / Go Go Knative!
toshi0607
4
5.8k
Build serverless application on top of Kubernetes #sdmel19
toshi0607
2
6.5k
Other Decks in Technology
See All in Technology
産業的変化も組織的変化も乗り越えられるチームへの成長 〜チームの変化から見出す明るい未来〜
kakehashi
PRO
1
430
コールドスタンバイ構成でCDは可能か
hiramax
0
130
善意の活動は、なぜ続かなくなるのか ーふりかえりが"構造を変える判断"になった半年間ー
matsukurou
0
390
「違う現場で格闘する二人」——社内コミュニティがつないだトヨタ流アジャイルの実践とその先
shinichitakeuchi
0
230
「駆動」って言葉、なんかカッコイイ_Mitz
comucal
PRO
0
140
kintone開発のプラットフォームエンジニアの紹介
cybozuinsideout
PRO
0
480
テストセンター受験、オンライン受験、どっちなんだい?
yama3133
0
210
Everything As Code
yosuke_ai
0
500
田舎で20年スクラム(後編):一個人が企業で長期戦アジャイルに挑む意味
chinmo
1
1.3k
I tried making a solo advent calendar!
zzzzico
0
150
次世代AIコーディング:OpenAI Codex の最新動向 進行スライド/nikkei-tech-talk-40
nikkei_engineer_recruiting
0
120
Keynoteから見るAWSの頭の中
nrinetcom
PRO
1
170
Featured
See All Featured
Winning Ecommerce Organic Search in an AI Era - #searchnstuff2025
aleyda
0
1.8k
Building Experiences: Design Systems, User Experience, and Full Site Editing
marktimemedia
0
370
Groundhog Day: Seeking Process in Gaming for Health
codingconduct
0
73
Design of three-dimensional binary manipulators for pick-and-place task avoiding obstacles (IECON2024)
konakalab
0
330
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
1.8k
技術選定の審美眼(2025年版) / Understanding the Spiral of Technologies 2025 edition
twada
PRO
115
100k
Ruling the World: When Life Gets Gamed
codingconduct
0
120
Faster Mobile Websites
deanohume
310
31k
Google's AI Overviews - The New Search
badams
0
890
Impact Scores and Hybrid Strategies: The future of link building
tamaranovitovic
0
180
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
196
71k
Transcript
Durable Functionsでつくるモバイル アプリのサーバーレスなバックエンド for 承認フロー 2018/4/21 Global Azure Bootcamp 2018@Tokyo
自己紹介 • 杉田 寿憲 ◦ Toshinori Sugita ◦ toshi0607 ◦
toshi0607 ◦ toshi0607 • Software Engineer@freee ◦ 好評の Windows 版に続いて急遽リリースを決めた Mac 版アプリの開発に、Xamarin.Mac を採用し て大幅な開発効率のアップと機能の標準化を実現。 • 最近の様子 ◦ Ruby > JavaScript >>> Go >>>>>> C# • 『Extensive Xamarin』(共著)発売中!
今日のお話 • Durable Functionsが面白そうなので調べてみた • Xamarin.FormsとDurable Functionsでサンプルアプリをつくって みた • 触ってみる上で知っておくと捗りそうなポイント
今日のお話 • Durable Functionsが面白そうなので調べてみた • Xamarin.FormsとDurable Functionsでサンプルアプリをつくって みた • 触ってみる上で知っておくと捗りそうなポイント
Durable Functionsとは? • Azure Functions(、Azure WebJobs)のステートを管理する拡張機能 • コードでワークフロー(チェーン、並列実行、非同期管理などなど) を実装 •
役割の異なる3つのバインド(orchestrationClient、orchestrationTrigger、 activityTrigger)とAzure Storage(Queue、Table、BLOB)でワークフローを 制御 ※https://docs.microsoft.com/ja-jp/azure/azure-functions/durable-functions-overview
Durable Functionsとは? ※https://docs.microsoft.com/ja-jp/azure/azure-functions/durable-functions-sequence
Durable Functionsとは? GAの日も遠くなさそう
AWS(AWS Lambda)では? • AWS Step Functionsがある(Azure Logic Appsぽい?) • Amazonステートメント言語(json形式)でステートマシンを記述
• ステートにはLambda、アクティビティ(ワーカースクリプト)、エラー処 理、反復処理などを記述し、ワークフローを組み立てる ※https://docs.aws.amazon.com/ja_jp/step-functions/latest/dg/welcome.html
今日のお話 • Durable Functionsが面白そうなので調べてみた • Xamarin.FormsとDurable Functionsでサンプルアプリをつくって みた • 触ってみる上で知っておくと捗りそうなポイント
つくったアプリ • スタンプカードアプリ。ただし、スタンプ を押すのにはメールでの承認が必要 • クライアントはXamarin.Forms製のモ バイルアプリ • バックエンドはDurable Functions製
※https://github.com/toshi0607/StampCard
つくったアプリ Backend • Microsoft.NET.Sdk.Functions • Microsoft.Azure.WebJobs.Extensions.DurableTask • Microsoft.Azure.WebJobs.Extensions.SendGrid •
Microsoft.Azure.Mobile.Client ※https://github.com/toshi0607/StampCard MobileClient • Xamarin.Forms • Syncfusion.SfCalendar.XForms • Microsoft.Azure.Mobile.Client
承認フロー • CalendarDate ◦ Type: 申請ステータス ▪ Status: Reviewing、Approved、Rejected ◦
StampAt: カレンダー1日分の日付
今日のお話 • Durable Functionsが面白そうなので調べてみた • Xamarin.FormsとDurable Functionsでサンプルアプリをつくって みた • 触ってみる上で知っておくと捗りそうなポイント
各関数・バインドの役割 • オーケストレーションクライアント ◦ HttpTriggerやQueue Triggerなどで起動 ◦ オーケストレーターを操作(開始、強制終了) ◦ オーケストレーターの状態(実行中、完了など)をクエリ
◦ オーケストレーターにイベントを送信 • オーケストレーション関数 ◦ OrchestrationTriggerで起動 ◦ Table Strotageを使いながらオーケストレーションの履歴を管理する ◦ 実行履歴をチェックしながら定期的にループしている ◦ 様々な制約がある ◦ 外部イベントで実行の中断(見かけ上)を再開できる • アクティビティ関数 ◦ ActivityTriggerで起動 ◦ 標準仕様に近いFunction ※https://docs.aws.amazon.com/ja_jp/step-functions/latest/dg/welcome.html
デバッグのポイント • オーケストレーターは定期的に再実行される ◦ activityやイベント待受のawaitごとに状態をTable Storageに保存 ◦ 次回実行時にactivityが完了していたり、イベントを受信したりしていたら先に進める オーケストレーターのブレークポイントは条件付きに ログの吐き出しは条件付きに
デバッグのポイント • オーケストレーションの履歴はTable Storageに保存される • オーケストレーターのアクティビティ呼び出し、クライアントからの 呼び出しはQueue Storageを経由する • ログの保存はAzure
Functionに準ずるので、Application Insights の有効・無効に注意する Azure Storage Emulator(azurite for Mac)とAzure Storage Explorerを フル活用
外部イベントの待ち受け ※https://docs.microsoft.com/ja-jp/azure/azure-functions/durable-functions-external-events ※https://docs.microsoft.com/ja-jp/azure/azure-functions/durable-functions-timers とはいえ必要な時はタイムアウトも忘れずに (DurableOrchestrationContextのCreateTimer使用)
ふりかえり(Good) • Durable Functionsを使うのは便利で楽しいけど、実現するための 仕組みや制約を学ぶことはそれ以上に楽しかった • C#でasync/awaitを書く感覚をもたらしつつ、複雑なアーキテク チャ、ステート・実行環境の制御を隠ぺいしてくれているのは最高 にcool •
クライアントもセットで作ることでより「人の通常操作内でデータの 整合性を保つにはどうすればいいか?」という視点が持てて実感 がわいてよかった
ふりかえり(Challenge) • モバイルからも制御が複雑なバックエンドからも同じデータを触る にあたりトランザクションほしいとか思ったらデータ更新のフロー 見直した方がよいかも • サンプルなのでクライアントはコードビハインドにもりもり書いてみ ようと思って書いてみたらそれなりに後悔した • ステータス変更はプッシュ通知やポーリングなどでスタンプリクエ
ストする人の「更新」クリックに頼らないようにしたい
良質な学習リソース • [Advent Calendar 2017 Day1] Durable Functions ことはじめ ◦
まずはポータルでひととおり動かすのが楽でした ◦ プレビューかつ日々開発が進んでいるのですでに雰囲気違うかもしれません • Durable Functions の概要 (プレビュー) ◦ 公式ドキュメントの整備され具合がすごいです ◦ パターンごとのサンプル実装を動かすのもよかったです • Azure/azure-functions-durable-extension ◦ OSSなのでコードは読み放題です ◦ issueへの回答もめちゃくちゃ速かったです • Azure Serverless Computing Cookbook ◦ 2017年8月発売ながら(申し訳程度に)Durable Functionsにも言及 ◦ FunctionsのHttpTriggerしか触ったことがなかったので一からやる分にはユース ケースのイメージがつきやすくよかったです
ご清聴ありがとうございました! Durable Functionsでつくる モバイルアプリのサーバーレスなバックエンド for 承認フロー