Upgrade to Pro — share decks privately, control downloads, hide ads and more …

フロントエンドで学んだことをデータ分析で使ってみた話

 フロントエンドで学んだことをデータ分析で使ってみた話

#TypeScript #AtomicDesign #GoogleAppsScript #BigQuery #SQL #Jest #DataAnalysis

Daichi Igarashi

January 19, 2023
Tweet

Other Decks in Programming

Transcript

  1. フロントエンドで学んだことを データ分析で使ってみた話

  2. はじめに

  3. 五十嵐 大地 2020年 Webフロントで新卒入社. Ameba Pickチームで約2年勤務. 機能開発・DX改善・データ整備に携わる. 2023年よりSEO周りの分析と開発に従事. https://github.com/Dai7Igarashi

  4. 五十嵐 大地 2020年 Webフロントで新卒入社. Ameba Pickチームで約2年勤務. 機能開発・DX改善・データ整備に携わる. 2023年よりSEO周りの分析と開発に従事. https://github.com/Dai7Igarashi

  5. 五十嵐 大地 2020年 Webフロントで新卒入社. Ameba Pickチームで約2年勤務. 機能開発・DX改善・データ整備に携わる. 2023年よりSEO周りの分析と開発に従事. https://github.com/Dai7Igarashi 本日は、メンテナンス性を意識した

    データ整備についてお話しします
  6. あらすじ

  7. 1.背景 2. 設計 3. 実装 4. 振り返り

  8. 1. 背景

  9. None
  10. 投稿数 商品名 imp数 CV数 ブロガー報酬額 投稿UU アフィリエイトサービスで追いたい指標は様々

  11. 投稿数 商品名 imp数 CV数 ブロガー報酬額 投稿UU 様々なモニタリングをしたい! アフィリエイトサービスで追いたい指標は様々

  12. 既存でモニタリング環境は あるにはあった💹

  13. None
  14. クエリ クエリ クエリ クエリ クエリ

  15. クエリ クエリ クエリ クエリ クエリ 需要に応じて分析ツールは様々。 そしてクエリの保管場所も様々😇

  16. そして... 開発 仕様変更 指標変化 分析

  17. メンテナンスが追いつかず 破綻したクエリが続出 ということで

  18. クエリを一元管理することに💪

  19. 2. 設計

  20. 設計方針 ・GitHubで情報を完結できる状態 ・継続的にメンテナンスできる状態 ・仕様や指標の変更で破綻しにくい状態

  21. ・GitHubで情報を完結できる状態 Why ・1箇所で管理することで管理コストを減らしたい How ・READMEの充実 ・拡張可能なアーキテクチャ

  22. ・継続的にメンテナンスできる状態 Why ・属人化を排除したい How ・学習コストの削減 ┣ 型情報の充実 ┗ 知名度の高いアーキテクチャ

  23. ・仕様や指標の変更で破綻しにくい状態 Why ・修正不要、または即修正できる状態にしたい How ・SQLの一元管理 ・再利用性 ・テストコードの追加

  24. 要件 ・Google Sheetsへスケジュール書込み ・BigQueryを直接叩けるようにSQL単体も存在

  25. ・ベースはNode.js → GASを使うから ・yarn workspaceによるモノレポ → 拡張可能なアーキテクチャ ・TypeScript導入 → 型情報の充実

    ・こだわりのフォルダ構成 → SQLの一元管理や再利用性 ・Jest導入 → テストコードの追加 設計 確定版
  26. 3. 実装

  27. ディレクトリTOP

  28. ディレクトリTOP SQLの一元管理

  29. None
  30. 【Point】 ・atomic designの要領で責務分離し再利用性を高める ・SQLとtsファイルを同階層に置き修正漏れを防ぐ ・クエリは直接 or プログラムいずれでの利用も可能

  31. 【Point】 ・分析の最終出力クエリはtamplates層で管理する

  32. ディレクトリTOP クエリで呼び出す定数の共通利用

  33. 【Point】 ・基本的にGASで呼び出すクエリの定数なのでtsファイル ・定数の変更が抽出に影響するものは、ここでテストコードを追加

  34. ディレクトリTOP 拡張可能なアーキテクチャ

  35. 【Point】 ・同一のクエリを使い回して様々なプログラムを組める

  36. GASフォルダ構成 【Point】 ・ts-loaderとgas-webpack-pluginでGASをtsで書く ・claspを用いてCLIからデプロイ

  37. GASフォルダ構成 【Point】 ・src以下は全てtsファイルで型が充実 ・utilsとかはテストコードが充実

  38. おまけ: package.jsonはこんな感じ

  39. 4. 振り返り

  40. データ系の実装や運用は突貫工事で放置されがち。 だからこそメンテナンス性が重要。

  41. クエリを中心として ・拡張の容易性 ・型情報の充実 ・高い再利用性 ・テストコード をキーワードにメンテナンス性向上を図った💪

  42. これから本格利用されるので効果を追います ご清聴ありがとうございました🙇