Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Speaker Deck
PRO
Sign in
Sign up for free
フロントエンドで学んだことをデータ分析で使ってみた話
Daichi Igarashi
January 19, 2023
Programming
0
190
フロントエンドで学んだことをデータ分析で使ってみた話
#TypeScript #AtomicDesign #GoogleAppsScript #BigQuery #SQL #Jest #DataAnalysis
Daichi Igarashi
January 19, 2023
Tweet
Share
Other Decks in Programming
See All in Programming
Form実装基本を学び直してみた
hyugatsukui
0
250
量子コンピュータ時代のプログラミングセミナー / 20230119_Amplify_seminar _shift_optimization
fixstars
0
200
TypeScript 4.9のas const satisfiesが便利
tonkotsuboy_com
9
2.3k
ポケモンで学ぶiOS 16弾丸ツアー 🚅
giginet
PRO
1
620
NGK2023S - OCaml最高! スマホ開発にも使えちゃう?!
haochenxie
0
120
Milestoner
bkuhlmann
1
250
データドリブンな組織の不正検知
fkubota
0
320
ITエンジニア特化型Q&Aサイトteratailを 言語、DB、クラウドなど フルリプレイスした話
leveragestech
0
460
なぜRubyコミュニティにコミットするのか?
luccafort
0
340
CDKでValidationする本当の方法 / cdk-validation
gotok365
1
270
The State of Kotlin | FOSDEM 2023
prof18
1
110
Amebaブログの会員画面システム刷新の道程
ryotasugawara
1
260
Featured
See All Featured
Unsuck your backbone
ammeep
659
56k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
31
20k
Designing on Purpose - Digital PM Summit 2013
jponch
108
5.9k
From Idea to $5000 a Month in 5 Months
shpigford
374
44k
A better future with KSS
kneath
230
16k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
29
8k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
6
850
BBQ
matthewcrist
75
8.1k
Building Better People: How to give real-time feedback that sticks.
wjessup
346
17k
Creatively Recalculating Your Daily Design Routine
revolveconf
207
11k
Writing Fast Ruby
sferik
613
58k
The Invisible Customer
myddelton
113
12k
Transcript
フロントエンドで学んだことを データ分析で使ってみた話
はじめに
五十嵐 大地 2020年 Webフロントで新卒入社. Ameba Pickチームで約2年勤務. 機能開発・DX改善・データ整備に携わる. 2023年よりSEO周りの分析と開発に従事. https://github.com/Dai7Igarashi
五十嵐 大地 2020年 Webフロントで新卒入社. Ameba Pickチームで約2年勤務. 機能開発・DX改善・データ整備に携わる. 2023年よりSEO周りの分析と開発に従事. https://github.com/Dai7Igarashi
五十嵐 大地 2020年 Webフロントで新卒入社. Ameba Pickチームで約2年勤務. 機能開発・DX改善・データ整備に携わる. 2023年よりSEO周りの分析と開発に従事. https://github.com/Dai7Igarashi 本日は、メンテナンス性を意識した
データ整備についてお話しします
あらすじ
1.背景 2. 設計 3. 実装 4. 振り返り
1. 背景
None
投稿数 商品名 imp数 CV数 ブロガー報酬額 投稿UU アフィリエイトサービスで追いたい指標は様々
投稿数 商品名 imp数 CV数 ブロガー報酬額 投稿UU 様々なモニタリングをしたい! アフィリエイトサービスで追いたい指標は様々
既存でモニタリング環境は あるにはあった💹
None
クエリ クエリ クエリ クエリ クエリ
クエリ クエリ クエリ クエリ クエリ 需要に応じて分析ツールは様々。 そしてクエリの保管場所も様々😇
そして... 開発 仕様変更 指標変化 分析
メンテナンスが追いつかず 破綻したクエリが続出 ということで
クエリを一元管理することに💪
2. 設計
設計方針 ・GitHubで情報を完結できる状態 ・継続的にメンテナンスできる状態 ・仕様や指標の変更で破綻しにくい状態
・GitHubで情報を完結できる状態 Why ・1箇所で管理することで管理コストを減らしたい How ・READMEの充実 ・拡張可能なアーキテクチャ
・継続的にメンテナンスできる状態 Why ・属人化を排除したい How ・学習コストの削減 ┣ 型情報の充実 ┗ 知名度の高いアーキテクチャ
・仕様や指標の変更で破綻しにくい状態 Why ・修正不要、または即修正できる状態にしたい How ・SQLの一元管理 ・再利用性 ・テストコードの追加
要件 ・Google Sheetsへスケジュール書込み ・BigQueryを直接叩けるようにSQL単体も存在
・ベースはNode.js → GASを使うから ・yarn workspaceによるモノレポ → 拡張可能なアーキテクチャ ・TypeScript導入 → 型情報の充実
・こだわりのフォルダ構成 → SQLの一元管理や再利用性 ・Jest導入 → テストコードの追加 設計 確定版
3. 実装
ディレクトリTOP
ディレクトリTOP SQLの一元管理
None
【Point】 ・atomic designの要領で責務分離し再利用性を高める ・SQLとtsファイルを同階層に置き修正漏れを防ぐ ・クエリは直接 or プログラムいずれでの利用も可能
【Point】 ・分析の最終出力クエリはtamplates層で管理する
ディレクトリTOP クエリで呼び出す定数の共通利用
【Point】 ・基本的にGASで呼び出すクエリの定数なのでtsファイル ・定数の変更が抽出に影響するものは、ここでテストコードを追加
ディレクトリTOP 拡張可能なアーキテクチャ
【Point】 ・同一のクエリを使い回して様々なプログラムを組める
GASフォルダ構成 【Point】 ・ts-loaderとgas-webpack-pluginでGASをtsで書く ・claspを用いてCLIからデプロイ
GASフォルダ構成 【Point】 ・src以下は全てtsファイルで型が充実 ・utilsとかはテストコードが充実
おまけ: package.jsonはこんな感じ
4. 振り返り
データ系の実装や運用は突貫工事で放置されがち。 だからこそメンテナンス性が重要。
クエリを中心として ・拡張の容易性 ・型情報の充実 ・高い再利用性 ・テストコード をキーワードにメンテナンス性向上を図った💪
これから本格利用されるので効果を追います ご清聴ありがとうございました🙇