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
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
y_matsuwitter
March 25, 2016
Programming
3
2k
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
Building Products in the LLM Era
ymatsuwitter
11
12k
Product Utilization of Large Language Models Starting Today
ymatsuwitter
3
3.3k
経営・意思・エンジニアリング
ymatsuwitter
23
21k
LLM in 2023 and 2024
ymatsuwitter
8
6.1k
Turbulent Technological Changes and Career Strategies
ymatsuwitter
2
3.1k
LLM in toB Service and Its UX
ymatsuwitter
7
11k
Agent and small LLM validation
ymatsuwitter
7
3.1k
Information management for a culture of speed: The story of Notion and LayerX
ymatsuwitter
4
11k
Monorepo on AWS
ymatsuwitter
0
360
Other Decks in Programming
See All in Programming
CSC307 Lecture 12
javiergs
PRO
0
450
メタプログラミングで実現する「コードを仕様にする」仕組み/nikkei-tech-talk43
nikkei_engineer_recruiting
0
150
What Spring Developers Should Know About Jakarta EE
ivargrimstad
0
180
Rubyと楽しいをつくる / Creating joy with Ruby
chobishiba
0
200
Geminiの機能を調べ尽くしてみた
naruyoshimi
0
190
nilとは何か 〜interfaceの構造とnil!=nilから理解する〜
kuro_kurorrr
3
1.6k
maplibre-gl-layers - 地図に移動体たくさん表示したい
kekyo
PRO
0
150
Premier Disciplin for Micro Frontends Multi Version/ Framework Scenarios @OOP 2026, Munic
manfredsteyer
PRO
0
200
猫の手も借りたい!ので AIエージェント猫を作って社内に放した話 Claude Code × Container Lambda の Slack Bot "DevNeko"
naramomi7
0
240
PJのドキュメントを全部Git管理にしたら、一番喜んだのはAIだった
nanaism
0
230
API Platformを活用したPHPによる本格的なWeb API開発 / api-platform-book-intro
ttskch
1
120
SourceGeneratorのマーカー属性問題について
htkym
0
130
Featured
See All Featured
End of SEO as We Know It (SMX Advanced Version)
ipullrank
3
4k
The Impact of AI in SEO - AI Overviews June 2024 Edition
aleyda
5
760
BBQ
matthewcrist
89
10k
Everyday Curiosity
cassininazir
0
150
A brief & incomplete history of UX Design for the World Wide Web: 1989–2019
jct
1
310
How to Grow Your eCommerce with AI & Automation
katarinadahlin
PRO
1
130
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.4k
Building an army of robots
kneath
306
46k
HU Berlin: Industrial-Strength Natural Language Processing with spaCy and Prodigy
inesmontani
PRO
0
250
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
17k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
508
140k
世界の人気アプリ100個を分析して見えたペイウォール設計の心得
akihiro_kokubo
PRO
67
37k
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では、より新しい技術に挑戦しつつ ビジネス成果を上げたい! そんなエンジニアを募集しています!