Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Twilio Syncで作ったみた
Search
Akihiro NAGASHIMA
August 31, 2016
Technology
570
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Twilio Syncで作ったみた
Akihiro NAGASHIMA
August 31, 2016
More Decks by Akihiro NAGASHIMA
See All by Akihiro NAGASHIMA
時代がReTechを求めている
eiei19
0
1.3k
JP/US/UK 3ヶ国展開を支える管理画面の話@管理画面チラ見せナイト#4
eiei19
0
110
Other Decks in Technology
See All in Technology
分析の民主化を支えるメタデータ整備の実践
kakehashi
PRO
4
1.4k
Persisting Massive Data with Rails ~Designing for 60 billion rows, and fighting the bottlenecks~ Railsで挑む大量データ永続化 〜600億件を永続化するための設計とボトルネックとの戦い〜
occhi
0
730
実践!Cloud Run ハンズオン!! / Cloud Run handson
y0hgi
2
280
⾮構造化データを価値に変える AI エージェント基盤とその組織
ivry_presentationmaterials
0
190
OptunaHub: ブラックボックス最適化のためのプラットフォーム
pfn
PRO
0
140
スプシの手作業からの解脱 ~更新はClaude Codeに、見せ方と使い方はGASアプリに任せる~
kentarofujii
0
150
SAENM ~Jupyterで残すPoCの試行錯誤、未来の自分と仲間を助ける記録!~
terapyon
0
110
Local CI × GitHub Actions
gogutan
2
190
アウトプット初心者、半年間のふりかえり
4o1sobblue
0
430
PagerDuty Tech Hub-鳴らすけれど、人は動かない
ezaki
0
170
Claude Code本は、どのように執筆チームで書かれたか
oikon48
1
380
Getting Started with Google Antigravity
glaforge
0
300
Featured
See All Featured
The #1 spot is gone: here's how to win anyway
tamaranovitovic
4
1.2k
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
Building Applications with DynamoDB
mza
96
7.2k
The Illustrated Guide to Node.js - THAT Conference 2024
reverentgeek
1
570
End of SEO as We Know It (SMX Advanced Version)
ipullrank
3
4.4k
Breaking role norms: Why Content Design is so much more than writing copy - Taylor Woolridge
uxyall
1
450
It's Worth the Effort
3n
188
29k
Stop Working from a Prison Cell
hatefulcrawdad
274
21k
The AI Revolution Will Not Be Monopolized: How open-source beats economies of scale, even for LLMs
inesmontani
PRO
3
3.8k
How to Align SEO within the Product Triangle To Get Buy-In & Support - #RIMC
aleyda
2
1.8k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
123
22k
StorybookのUI Testing Handbookを読んだ
zakiyama
31
7k
Transcript
Twilio Syncで作ってみた 永嶋 章弘
自己紹介 元: 職業エンジニア 現: 日曜エンジニア 永嶋 章弘(eiei19) プロデューサー@株式会社mercari Ruby on
Rails、Twilio、Swift 柴犬が好き
自己紹介 前職でTwilioを使って 「ぶっかくん」というサービスを作ってました 賃貸の空室状況を自動応答するサービス 月間10万本弱を自動で処理
自己紹介 ServiceSafariの中の人 結婚式の2週間前に婚約解消した男 としてBuzzfeedに取材される
Twilio Syncってなに? データをリアルタイムで同期できる しかもクロスプラットフォーム A B Data 更新 即座に通知
なぜ Twilio が Sync? Twilioを使っていると 状態を同期したい!! と思うことが実は結構ある
ちょっとサービス考えてみた • 電話による相談プラットフォーム • 先生と相談者がいる • 先生は自分が役に立てる相談内容を表明 • 相談者が先生に電話をかけて相談する
ちょっとサービス考えてみた 物理について 恋愛について 物理について 物理について 恋愛について 恋愛について 先生1 先生2 生徒
同期どうする問題 そこで Twilio Sync!! • ポーリング? • 即時じゃないしダサいよねー • Webソケット?
• 即時だけどサーバの用意とメンテが・・・ • IP Messaging? • やれなくないけどちょっと用途違うよね
DEMO http://bit.ly/sync_demo http://bit.ly/sync_demo_git ソースコード デモ
Syncの登場人物 Object (Doc,List,Map) Service User (Identity)
Syncを使う流れ 1. APIキーとシークレットの作成(管理画面から) 2. サービスインスタンスの作成(curlとかでやる) 3. 上記で得た情報を元にトークンを生成(サーバサイド) 4. 生成したトークンでクライアント初期化 identity
= params[:identity] endpoint_id = "Consultation:#{params[:identity]}:#{params[:device_id]}" token = Twilio::Util::AccessToken.new( ENV["TWILIO_ACCOUNT_SID"], ENV["TWILIO_API_KEY"], ENV["TWILIO_API_SECRET"], 3600, identity ) grant = Twilio::Util::AccessToken::SyncGrant.new grant.service_sid = ENV["TWILIO_SYNC_SERVICE_SID"] grant.endpoint_id = endpoint_id token.add_grant(grant) Identity: ユーザを特定する Endpoint: デバイス(画面)を特定する
IdentityとEndpoint Identity: eiei19 Endpoint: eiei19:mac Endpoint: eiei19:ipad 一意ならなんでもいい
Syncを使う流れ accessManager = new Twilio.AccessManager(token); syncClient = new Twilio.Sync.Client(accessManager); syncClient.map("consultation.members").then(function(map)
{ _syncMap = map; _consultant.changeStatus("待受中"); updateOnlineConsultantsView(); $.each(["itemUpdated", "itemAdded", "itemRemoved"], function(index, action) { _syncMap.on(action, function() { updateOnlineConsultantsView(); }); }); }); _syncMap.set(this.identity, {status: this.status, topic: this.topic});
Syncの登場人物 Object (Doc,List,Map) Service UserがObjectをSubscribeする(event設定) Object-User間に権限設定(read,write,manage) User (Identity)
DEMOアプリの問題点 Members(MapObject) { User1: {status: 待受中}, User2: {status: 通話中} }
権限はオブジェクト単位 UserにWrite権限をつけてしまうと、 User1はUser2の情報を更新できてしまう (KEY単位ではないため) 使い所や権限設定に注意が必要
DocumentはJSONなのになぜList,Mapがある? Index or Keyでの更新が可能 またそれらのeventもある (itemAdded, itemRemove, itemUpdated) 全体で意味を持つ(Ex.◯×ゲーム)=> Doc
個別に意味を持つ(Ex.DEMO)=> Map,List Document VS. List,Map
試してない機能 Webhook オブジェクトに特定のイベントが発生したとき 指定したURLをキックするようにできる Conflict検知 同時に更新が走ったときにそれを検知し 対応処理を書くことができる(クライアントSDK)