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

PadSummit#2_BrainPad_LT_20230427

BrainPad
April 28, 2023

 PadSummit#2_BrainPad_LT_20230427

BrainPad

April 28, 2023
Tweet

More Decks by BrainPad

Other Decks in Technology

Transcript

  1. ©BrainPad Inc. Strictly Confidential 自己紹介 2 新谷 大樹(しんたに だいき) プロダクトビジネス本部

    開発部 エンジニア 2019年にブレインパッドに参画。 推薦エンジンの開発・顧客提供を経て、 2021年から新規プロダクト『Rtoaster insight+』の開発に従事。 趣味はジグソーパズルとカラオケ。
  2. ©BrainPad Inc. Strictly Confidential 会社紹介 3 ブレインパッドについて MISSON データ活用の促進を通じて、持続可能な未来をつくる 会社名

    株式会社ブレインパッド 設立 2004年3月18日 市場区分 プライム市場上場(証券コード:3655) 従業員数 533名(2022年12月31日現在) 加盟団体 一般社団法人データサイエンティスト協会 一般社団法人日本ディープラーニング協会 変革を目指す企業と 共に最前線を走り続ける、 データ活用推進パートナーのパイオニア データ活用推進を支える2つの事業 プロフェッショナルサービス データ活用のプロフェッショナルがアナリ ティクス/エンジニアのスキルを駆使し、 最適なデータ活用を実装します。 プロダクトサービス 実用的なSaaSで、データ活用を日 常化する可視化や効率化、データに よる意思決定を支援します。
  3. ©BrainPad Inc. Strictly Confidential 新規プロダクト開発の背景 5 • 元々、顧客のweb上の行動履歴を分析するためのプロダクトがあった • 課題

    ◦ データの分析のみで終わってしまい、マーケティング施策に繋がらなかった ◦ 実店舗のオフラインデータなど 顧客のもつデータを統合的に扱うニーズに対応できなかった • 既存のプロダクトの追加開発ではなく、新プロダクトとして開発することになった
  4. ©BrainPad Inc. Strictly Confidential 要件定義 6 • 抽象度の高いプロダクトのため苦労したが、様々な関係者を巻き込んで ターゲットユーザーやユースケースを決めた ◦

    開発部以外の、実際にCDPを活用している部署からの聞き取り • 話し合ったユースケースなどをもとに、プロダクトマネージャー・デザイナー・エンジニアが密にコミュニケーションを とりながら、必要な機能を決めていった
  5. ©BrainPad Inc. Strictly Confidential システムの要件 7 • 顧客が保有するデータを統合的に管理する ◦ 様々な場所に散らばっている顧客データの取り込み

    ▪ データレイク ▪ データウェアハウス ▪ 弊社の他プロダクト • 集めたデータをマーケティング施策のために整形・分析できる ◦ 大規模データに耐えうる設計が求められる
  6. ©BrainPad Inc. Strictly Confidential • 最小限の実装で目的を達成する ◦ なるべくクラウドサービスの機能を用いる • 顧客数や扱うデータ量の増加に備える

    • 新規開発のため速度は求められつつも、品質は落とさない ◦ 静的解析ツール ◦ スキーマ駆動 技術選定の際に考慮したこと 8
  7. ©BrainPad Inc. Strictly Confidential • 顧客データの取り込み・加工・出力処理(以下ETL)を 非同期 & 並列可能にする ◦

    顧客数が増加してもスケールするようにする • 分析機能はBigQueryで実現する システム構成 9 施策のためのプロダクト 顧客管理のデータ ETL処理 データ分析 セグメント作成 非同期
  8. ©BrainPad Inc. Strictly Confidential • 型の恩恵を受けるためTypeScriptを採用 • アトミックデザインを採用 ◦ 再利用性や統一性を高める

    ◦ organismsが増えがちなので、機能単位でまとめる • 状態管理にVuexを採用 ◦ 無法地帯にならないよう コンポーネントからのアクセスにルールを設ける ▪ 粒度の小さいコンポーネントからVuexを参照しない 技術選定〜フロントエンド〜 10 components/ ├ atoms/ ├ molecules/ ├ organisms/ ├ jobs/ ├ jobList.vue ├ … ├ segments/ ├ segmentModal.vue ├ … ├ …
  9. ©BrainPad Inc. Strictly Confidential • Python + mypyでの静的型チェックを導入 • クリーンアーキテクチャを採用

    ◦ モジュール間の依存関係にルールを定める ◦ テスト時の対象DBの切り替えなど インフラ層の取り替えが容易 • フロントエンドから受け取る値のバリデーションに marshmallowを採用 技術選定〜バックエンド〜 11
  10. ©BrainPad Inc. Strictly Confidential • バックエンドのmarshmallowで指定するスキーマと フロントエンドからAPIに送るデータのスキーマを 手軽に揃えたい • marshmallowのスキーマ定義から

    対応するTypeScriptの型を生成するツールを開発 ◦ スキーマ駆動による、バックエンドと フロントエンドの同時開発が可能に インターフェースの工夫 12
  11. ©BrainPad Inc. Strictly Confidential • 各種ETL処理を、顧客が定義した前後関係で実行するための機能 • ワークフローエンジン Digdag を利用

    ◦ 静的なワークフローでの利用が一般的だが Rtoaster insight+では顧客の定義に従った、動的なワークフローの実現のために利用 機能紹介〜ワークフロー〜 13
  12. ©BrainPad Inc. Strictly Confidential • 管理画面上で顧客が設定したジョブの前後関係は、 有向非巡回グラフ(DAG)として表現される • DAGをトポロジカルソートして、 Digdagの動作を規定するdig.yamlを作成する

    機能紹介〜ワークフロー〜 timezone: Asia/Tokyo +group_0: _parallel: limit: 5 +job_1: sh>: {ジョブ1を実行するスクリプト} +job_2: sh>: {ジョブ2を実行するスクリプト} +job_3: sh>: {ジョブ3を実行するスクリプト} +success: sh>: {成功時の処理}
  13. ©BrainPad Inc. Strictly Confidential • データの準備からマーケティング施策までに必要な設定を、できるだけ減らしたい ◦ 決められたフォーマットのデータを用意するだけで、 マーケティング施策までに必要な設定が簡単にできるようにする •

    立ち上げ時期から時間が経ったので、技術的な負債にも対処していきたい ◦ バックエンドアーキテクチャの意味でのドメイン再考 ◦ 機能が増え、複雑になりつつある権限管理の再考 今後の展望 15
  14. ©BrainPad Inc. Strictly Confidential 新規プロダクト開発に携わって思ったこと 16 • ゼロからプロダクトを作り上げていく事は、苦労も多いがやはり楽しい ◦ 要件定義フェーズ

    ▪ 要件定義は手探りで、様々な関係者と話してやっとまとまった ▪ 新しいビジネスへの挑戦はモチベーションになる ◦ 設計・開発フェーズ ▪ 開発者にそれなりの視野の広さ、深さが求められる ▪ 目的達成のために一番ふさわしい解決策を、技術的負債に囚われずに選べる
  15. ©BrainPad Inc. Strictly Confidential まとめ 17 • 新規プロダクト開発の背景と技術選定 ◦ スピードを考えつつも、品質は落とさない

    ▪ 静的解析 ▪ スキーマ駆動 • 新規プロダクト開発に携わって思ったこと ◦ ゼロからプロダクトを作り上げていく事は、苦労も多いがやっぱり楽しい ▪ 新しいビジネスへのチャレンジ ▪ 技術的負債に囚われない