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
RxJS, mixpanelで実装するSPAの行動分析基盤
Search
Yosuke Kurami
November 02, 2017
Programming
600
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
RxJS, mixpanelで実装するSPAの行動分析基盤
Yosuke Kurami
November 02, 2017
More Decks by Yosuke Kurami
See All by Yosuke Kurami
TypeScript LSP の今までとこれから
quramy
1
2.1k
フロントエンドテストの育て方
quramy
12
3.8k
App Router 悲喜交々
quramy
8
740
上手に付き合うコンポーネントテスト
quramy
6
2.4k
Patched fetch did not work
quramy
6
790
GraphQL あるいは React における自律的なデータ取得について
quramy
18
5.9k
Next.js App Router
quramy
15
3.9k
Fragment Composition of GraphQL
quramy
17
4.8k
reg-viz VRT tools
quramy
4
1.7k
Other Decks in Programming
See All in Programming
AIエージェントで 変わるAndroid開発環境
takahirom
2
630
初めてのKubernetes 本番運用でハマった話
oku053
0
120
才能?センス?知らん、 続けたもん勝ちだ。-- 結婚・出産・癌を越えてなお、私がプロダクトを創り続ける理由
16bitidol
2
850
型も通る、synthも通る、それでも危ない 〜AIのCDKの権限とコストを機械で検証する〜 / It Passes Type Checks, It Passes Synth Checks, but It’s Still Risky — Automatically Verifying Permissions and Costs in AI’s CDK —
seike460
PRO
1
210
Generative UI & AI-Assistants for Your Angular Solutions
manfredsteyer
PRO
1
180
はてなアカウント基盤 State of the Union
cockscomb
1
1.3k
ランチタイムLT会3周年!ランチタイムLT会を3年間続けられたお話
y0hgi
1
140
継続モナドとリアクティブプログラミング
yukikurage
3
590
The Past, Present, and Future of Enterprise Java
ivargrimstad
0
200
AI時代、エンジニアはどう育つのか -未経験エンジニアの成長を間近で見て考えたこと-
thasu0123
0
110
音楽のための関数型プログラミング言語mimiumにおける多段階計算の活用
tomoyanonymous
1
320
吝嗇家のためのAI活用 / AI development for miser - ChatGPT + Issue Driven Development
tooppoo
0
190
Featured
See All Featured
Exploring the relationship between traditional SERPs and Gen AI search
raygrieselhuber
PRO
2
4.1k
How Fast Is Fast Enough? [PerfNow 2025]
tammyeverts
3
650
Leveraging Curiosity to Care for An Aging Population
cassininazir
1
380
Accessibility Awareness
sabderemane
1
150
New Earth Scene 8
popppiees
3
2.4k
Marketing Yourself as an Engineer | Alaka | Gurzu
gurzu
0
260
Visual Storytelling: How to be a Superhuman Communicator
reverentgeek
2
590
Fireside Chat
paigeccino
42
4k
Deep Space Network (abreviated)
tonyrice
0
230
Digital Projects Gone Horribly Wrong (And the UX Pros Who Still Save the Day) - Dean Schuster
uxyall
1
2k
Lightning Talk: Beautiful Slides for Beginners
inesmontani
PRO
2
610
Navigating Algorithm Shifts & AI Overviews - #SMXNext
aleyda
1
1.4k
Transcript
3Y+4 NJYQBOFMͰ࣮͢Δ41"ͷߦಈੳج൫ :PTVLF,VSBNJ !2VSBNZ 1
"CPVUNF
w 2VSBNZ UXJUUFS(JU)VC2JJUB ͱ͍͍·͢ w OHKBQBOͷελοϑͯ͠·͢ w IUUQTMBDLJOWJUFOHKBQBOPSH w "OHVMBS
5ZQF4DSJQU 7JNΛภѪ͍ͯ͠·͢ ࣗݾհ
ձࣾαʔϏεհ
"*ΞφϦετ w IUUQTXBDVMBJDPN
"*ΞφϦετ w (PPHMF"OBMZUJDTͷσʔλΛݩʹɺ8FCαΠτͷվળҊΛ ఏҊ w ྫɿʮಛఆͷϖʔδΛݟΔͱ$73͕ஶ͘͠ѱ͘ͳΔʯ w 8FCϚʔέλʔ ཧళ͞Μ͚ʹͬͯΒ͏ͨΊͷ##
4BB4 w "OHVMBSWʹΑΔ41"
ࠓͷςʔϚ
41"͕ͲͷΑ͏ʹΘΕͯΔ͔Γ͍ͨ
σʔλΛݩʹվળΛݟ͚ͭΔ
NJYQBOFM w Ϣʔβʔ୯ҐͷΠϕϯτΛࡉ͔͘औಘɾੳͰ͖Δ
NJYQBOFMͷಛ w NJYQBOFMUSBDL ʜ ͰҙͷΠϕϯτΛૹ৴Ͱ͖Δ w σʔλΛ"1*ͰFYQPSUͰ͖Δ w #JH2VFSZʹJNQPSU w
ଞͷσʔλιʔε %# ͱΘͤͯɺ3FEBTIͰΫΤϦΛ ࡞Γɺ༷ʑͳ࣠Ͱੳ͕Ͱ͖Δ
ͲͷΑ͏ʹૹ৴͢ΕΑ͍͔ʁ
ϢʔβʔΠϕϯτͷநԽ w 41"Ͱ༷ʑͳʮΠϕϯτʯ͕ൃੜ͢Δ w %0.Πϕϯτ ϑΥʔϜͷೖྗ ϘλϯΫϦοΫ w ϧʔλʔʹΑΔը໘ભҠ
w ϞʔμϧΞϥʔτͷ։ด w Ϗδωεཁ݅తͳ ίϯόʔδϣϯΠϕϯτ w FUDʜ
ΠϕϯτͷநԽ w ΠϕϯτͷൃੜՕॴຖʹNJYQBOFMͷૹ৴Λॻ͘ͷɺ ॲཧͷݟཱ͕ͯѱ͘ͳΔ w ͦ͜ͰɺΠϕϯτΛ3YKTͷετϦʔϜͱͯ͠நԽ w ͜ͷετϦʔϜΛ4VCTDSJCFͯ͠.JYQBOFMૹ৴ w 3YKT࣌ؒͰൃੜ͢ΔΠϕϯτΛநతʹѻ͏͜ͱʹಛԽ͠
ͨϥΠϒϥϦ
ࢀߟʹͨ͠Ϟσϧ ҰൠతͳQVCTVCϞσϧ w SYKT͕ΈΛఏڙͯ͘͠ΕΔ -PH+ͳͲͰݟΒΕΔΧςΰϦઃܭ w lVJz w
lVJCVUUPOz w lVJCVUUPODMJDLz
this.ngZone.runOutsideAngular(() => { if (e && e["__pushed__"]) return; if (e)
e["__pushed__"] = true; const element = this.elemRef.nativeElement as HTMLElement; const value = element.textContent; const typeAttr = element.getAttribute("type"); const kindAttr = element.getAttribute("kind"); const iconAttr = element.getAttribute("iconKind"); const activity = createActivity(element, { categorySuffix: "button", action: "click", value, }); if (typeAttr) activity.label += `[type='${typeAttr}']`; if (kindAttr) activity.label += `[kind='${kindAttr}']`; if (iconAttr) activity.label += `[iconKind='${iconAttr}']`; this.accumulator.push(activity); }); 1VCMJTI&WFOUT
Observable.merge( activities .filterCategorizedActivity("ui.router") .filter(({ action }) => action === "navigationEnd")
.debounceTime(100), activities .filterCategorizedActivity("ui.root", { exclude: true }) .filterCategorizedActivity("ui.router", { exclude: true }) ) .mapFlattenData() .subscribe(({ action, category, ...rest }) => mixpanel.track(`${category}.${action}`, rest)) ; 4VCTDSJCF&WFOUT
ΠϕϯτநԽͷϝϦοτ w ΠϕϯτͷநԽʹΑΓɺૹ৴ίʔυΛՃ͢Δ͚ͩͰɺଞ αʔϏεͷ࿈ܞ͕Մೳɻ w FYɿྫ֎ൃੜ࣌ʹɺൃੜͨ͠Πϕϯτͷۙ݅ΛΤϥʔ τϥοΩϯάαʔϏε4FOUSZૹ৴ ܽམ͢Δ͜ͱʜ
4VNNBSZ
·ͱΊ w NJYQBOFM͍͍ͧ w #JH2VFSZ͍͍ͧ w 3Y+4͍͍ͧ w "OHVMBS͍͍ͧ
5IBOLZPV