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
NativeApplication, AWS and ReactiveProgramming
Search
y_matsuwitter
March 25, 2016
Programming
3
1.9k
NativeApplication, AWS and ReactiveProgramming
Retty x Gunosy Beer bash #3 での内容です。
y_matsuwitter
March 25, 2016
Tweet
Share
More Decks by y_matsuwitter
See All by y_matsuwitter
Product Utilization of Large Language Models Starting Today
ymatsuwitter
3
2.2k
経営・意思・エンジニアリング
ymatsuwitter
23
19k
LLM in 2023 and 2024
ymatsuwitter
8
5.3k
Turbulent Technological Changes and Career Strategies
ymatsuwitter
2
2.6k
LLM in toB Service and Its UX
ymatsuwitter
6
10k
Agent and small LLM validation
ymatsuwitter
7
2.9k
Information management for a culture of speed: The story of Notion and LayerX
ymatsuwitter
4
9.7k
Monorepo on AWS
ymatsuwitter
0
270
Tech behind LayerX SaaS products
ymatsuwitter
0
3k
Other Decks in Programming
See All in Programming
見えないメモリを観測する: PHP 8.4 `pg_result_memory_size()` とSQL結果のメモリ管理
kentaroutakeda
0
140
MCP with Cloudflare Workers
yusukebe
2
220
複雑な仕様に立ち向かうアーキテクチャ
myohei
0
170
103 Early Hints
sugi_0000
1
220
Zoneless Testing
rainerhahnekamp
0
120
ブラウザ単体でmp4書き出すまで - muddy-web - 2024-12
yue4u
2
460
Stackless и stackful? Корутины и асинхронность в Go
lamodatech
0
690
Refactor your code - refactor yourself
xosofox
1
260
range over funcの使い道と非同期N+1リゾルバーの夢 / about a range over func
mackee
0
110
htmxって知っていますか?次世代のHTML
hiro_ghap1
0
330
ドメインイベント増えすぎ問題
h0r15h0
1
180
rails statsで大解剖 🔍 “B/43流” のRailsの育て方を歴史とともに振り返ります
shoheimitani
2
930
Featured
See All Featured
The Illustrated Children's Guide to Kubernetes
chrisshort
48
48k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
45
2.2k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
169
50k
Fashionably flexible responsive web design (full day workshop)
malarkey
405
66k
GraphQLの誤解/rethinking-graphql
sonatard
67
10k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
28
2.1k
Learning to Love Humans: Emotional Interface Design
aarron
273
40k
Building Adaptive Systems
keathley
38
2.3k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
26
1.5k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
365
25k
Java REST API Framework Comparison - PWX 2021
mraible
PRO
28
8.3k
The Art of Programming - Codeland 2020
erikaheidi
53
13k
Transcript
ネイティブ開発とAWSと川の話 Gunosy Inc. 2016.03 @y_̲matsuwitter
2 ©Gunosy Inc. ⾃自⼰己紹介 n Gunosy Inc. – 開発本部執⾏行行役員 n
業務 – 開発全般のマネジメント – Go⾔言語布教係 – パフォーマンスチューニング – ISUCONとか好きです n 担当 – 右⼿手でiOS、左⼿手でAndroid – Web – Infrastructure(AWSのみ) n 最近の興味 – ViveとOculus製品版買いました 松本 勇気 @y_̲matsuwitter
3 ©Gunosy Inc. 今⽇日の話 n ⾃自⼰己紹介 n 背景 – 直⾯面している問題
n サーバに近づくネイティブアプリ – サーバレスアーキテクチャの話 – 変わるサーバとクライアントの境界線 – AWSとネイティブ開発 – モバイルで使えるAWSの話 n AWSの川を引く – 複雑なHTTPこそStreamを – iOS/AndroidでのAWSと川 現在の新規プロジェクトでのネイティブ開発の考え⽅方について
4 ©Gunosy Inc. <注意> ネイティブ開発の話をしますが AWSの話が沢⼭山登場します
5 ©Gunosy Inc. 背景
6 ©Gunosy Inc. 背景 新規プロジェクトとして、今できるより良良いアーキテクチャを模索索 n 2016年年夏にはサービスインの予定 – プロジェクトとしては⽐比較的⼤大規模 n
開発のコアチームは5名 – 全員が領領域超えて開発 n チームのモットー – 少⼈人数で最⼤大の成果を KDDI様との連携で新規にメディア事業プロジェクトを開始
7 ©Gunosy Inc. サーバに近づくネイティブアプリ
8 ©Gunosy Inc. サーバレスアーキテクチャについて SaaSを活⽤用しつつ、サーバを持つことなく各種のイベントを処理理する仕組み。 ⾃自社サーバ mobile client ログ収集 サーバ
DB ファイル サーバ HTTP サーバ API Gateway AWS S3など ログ収集 サービス AWS Lambda など
9 ©Gunosy Inc. クラウド事業者にスケールするための責務を渡せる 1 重要なビジネスロジックに集中 3 サービス管理理に伴う⼈人的なリソースを減らすことが可能 2 サーバレスアーキテクチャのメリット
n ユーザーの増加に対して、サーバを増強するなどの責務はクラウド事業者側。 – スケーラビリティにシビアになる場⾯面が減る。 n セキュリティなどもクラウド事業者側で担保可能。 n サーバを管理理するにもエンジニアのリソースが必要。 – インフラ管理理を減らし、少⼈人数でスケールさせる。 n ⼈人の採⽤用が組織にとって最も難しい問題 – 必要なエンジニアをより少なく保ち、開発を加速できる。 n サーバのセットアップや、⼀一般的なユーザー認証などは外部サービスで担保。 – 開発すべき重要なロジックに集中できる。 n ネイティブ開発者だけでもある程度度のロジックを担保可能。 – モバイル側のSDKも充実しており、ネイティブ側で様々なロジックを簡単に。 「少⼈人数で最⼤大の成果」という今回の⽬目標に合致 ⼈人的リソースを抑えつつ、スケールするサービスを構築できる。
10 ©Gunosy Inc. 変わるサーバとクライアントの境界線 SaaSとの連携で、クライアントサイドで処理理可能な領領域が増えている。 以前 これから サーバサイド クライアントサイド サーバサイド
クライアントサイド ユーザー 認証 データ 永続化 データ 解析 ログ収集 UI ⼊入⼒力力値 検証・送信 UI ⼊入⼒力力値 検証・送信 ユーザー 認証 ログ収集 データ 永続化 データ 解析 各リソース への認可 各リソース への認可
11 ©Gunosy Inc. AWSとネイティブアプリ 現状のプロジェクトではAWS SDKを最⼤大限活⽤用 Amazon Kinesis Amazon
Cognito Amazon SNS Cognito AWS SNS Kinesis ユーザーの認証、AWS系のサービスへの認証・認可、設定値のアプリ間同期など。 モバイル通知(APNS、GCM)のトークンを管理し、通知送信などを可能にする。 様々なイベントデータを送信、一定量をKinesisに保持し、ストリーム処理に繋げる。 Amazon Mobile Analytics MobileAnalytics AWSが提供するモバイルサービスの分析サービス。
12 ©Gunosy Inc. モバイルで使えるAWS: Cognito 認証系を代替し、設定値を保存できるCognitoを活⽤用 n 主にユーザー認証とデータ同期、認可を担当 – 個々のAWSリソースに対する認可
– クライアントから直接AWSとやり取り するために必須とも⾔言える n Cognito Identity – ユーザーの認証を担当する機能 – OpenID ConnectやTwitter, Facebook を使ってユーザー認証が可能 – 匿匿名ユーザーという権限も存在 n Cognito Sync – 同⼀一ID間でのデータ同期の仕組み – 端末間同期できるNSUserDefaultsや SharedPreferenceの様なもの ・ID ・認証キー ・データ同期 その他のAWS系 サービスとの通信
13 ©Gunosy Inc. モバイルで使えるAWS: SNS 通知のトークンの取り回しと通知送信を容易易にする。 n APNS・GCMも送信可能な通知サービス – デバイストークンを登録
– EndpointArnというトークン単位のIDで GCMとAPNSを透過的に扱える n メトリクスの確認が可能 – 送信数、失敗数などの確認 – 死んだトークンについてもログ出⼒力力可能 n 何が嬉しいか – 1000万件の通知でも安定して短時間に 送ることが可能 – デバイストークンの処理理の⾯面倒を減らせ る ・EndpointArn ・通知の送付 ・通知用トークンの 送付 ・GCM ・APNS 管理者 メトリクス
14 ©Gunosy Inc. モバイルで使えるAWS:Kinesis サービス改善で命となるログを、クライアントから直接投げる。 n ⼤大量量のログを受け取り処理理するための受け⽫皿 – 同時処理理性能を簡単に増減させられる –
24時間分のログを溜溜める n 主にStream処理理、ログの1次加⼯工に利利⽤用 – Kinesisのログを逐次その他システムで 処理理する – 例例1:ログを加⼯工してS3に永続化 – 例例2:逐次的にログ集計、短時間でサー ビスに反映する n 何が嬉しいか – ログデータの安定した配送を簡単に実現 できる – Kinesisの関連プロダクトとの連携が将 来⾒見見込める ・行動ログ ・属性ログ …etc S3に対して ログを保存 EMRからログの分析
15 ©Gunosy Inc. とはいえデメリットは? 学習コスト サービスならではのハマリポイント Native以外の領領域を知る必要性 これまで悩まなかった問題の噴出 n AWSなどの知識識を深く求められる
– Credentialとは? – SecurityGroupとは? – …etc n SDKに対する学習 – どのSDKも⽐比較的⼤大きい n AWSのハマリポイント – リソースへのアクセス許可など n イベントドリブンなシステム – ⾮非同期的なデータ処理理である前提 で対応する必要がある 新たな知識識領領域を求められることによるコストは避けられない 学習コスト、サービスならではのハマリポイントなどに苦しむ場合も。
16 ©Gunosy Inc. AWSの川を引く
17 ©Gunosy Inc. 川とは 〜~ReactiveProgrammingの話〜~ ストリームを宣⾔言していくスタイルを(⼀一部で?)川を引くと呼んでいる n イベントとイベントの関係性を定義していく ことで処理理を綴る –
イベントが流流れるストリーム同⼠士を map, merge, filterなどを通じて定義し ていく n ViewとViewModelをBindするようなMVVM 設計によく利利⽤用される n 代表的なライブラリ – Rx系(RxJava, RxSwift…etc) – その他(ReactiveKit, SwiftBond…etc) 簡単に⾔言うと、イベント同⼠士の関係を定義して記述・動作する技術スタック群 クリック イベント API通信 UI描画 必要なイベントをfilterしたり 要求に応じて複数に増やしたり
18 ©Gunosy Inc. SaaSとの連携と川の話① AWSにかぎらず、SaaSとの連携には多くのHTTPリクエスト・⾮非同期処理理 CognitoID を取得 AWSの認可 取得 MobileAnalytics
の初期化 Kinesisの 初期化 DeviceTokenの 取得 SNSにTokenを 保存 ログ送信 ⾃自社のコンテン ツ取得 UIを描画 ごくごく簡単なアプリ起動に至るフロー事例 複数のAPIリクエスト の完了了を待つ
19 ©Gunosy Inc. Observable SaaSとの連携と川の話② GunosyではiOSでReactiveKit、AndroidでRxJavaを活⽤用 CognitoID を取得 AWSの認可 取得
MobileAnalytics の初期化 Kinesisの 初期化 DeviceTokenの 取得 SNSにTokenを 保存 ログ送信 ⾃自社のコンテン ツ取得 UIを描画 n ⾮非同期処理理をObservableでWrapする n Observeしてイベントを各Observable に繋いでいく n 必要に応じてcombineLatestなどで川を まとめる
20 ©Gunosy Inc. 例例:CognitoのID 単純なIDの取得も、場合によってはHTTPリクエストが発⽣生する。
21 ©Gunosy Inc. 例例:CognitoのID ObservableでWrapしよう! ついでにNetworkOnMainThreadExceptionも避ける
22 ©Gunosy Inc. まとめ
23 ©Gunosy Inc. まとめ サーバの領領域にネイティブ開発者が積極的に関わることで新たな最適解が⾒見見 えてくるかもしれない! NativeとServerの垣根を超えて、よりよいサービスを作ろう! サーバレスアーキテクチャとNative 外部SDKの川を引く n
巨⼈人の肩に乗る – サービスのスケールやセキュリテ ィなどを巨⼈人に任せる n ネイティブ開発者も積極的に関わろう – サーバサイドは必要なロジックに 注⼒力力 – クライアントサイドの領領域は変わ りつつある n ReactiveProgrammingの恩恵 – 複雑なイベントの関係もストリー ムを使い記述しやすく n SaaSと川 – 多くのHTTPリクエストとその依 存関係を上⼿手く整理理 – イベント同⼠士の関係として記述す ることでRetryも書きやすく
24 ©Gunosy Inc. Gunosyでは、より新しい技術に挑戦しつつ ビジネス成果を上げたい! そんなエンジニアを募集しています!