fluct データチーム+α 開発合宿最高だった

※こちらの記事は社内向けに書いた記事を社外向けに一部加筆修正したものになります。

こんにちは fluctエンジニアの@shu22203です。

3行まとめ

  • fluctのデータエンジニア4人で2泊3日で開発合宿してきたよ
  • 想像以上にしっかり進捗が出たり、ハマりポイントみんなでデバッグ出来たり、知見が共有できたりで最高だったよ
  • 温泉と飯がマネージドなところの方がいいぞ

合宿の目的

  • 今後は、Snowflakeをがっつり使っていくので、全員で入門してレベル感を合わせたい 。みんなの基準を揃えた上で ”よーいどん” で始めた方が早い。
  • Fivetran, Snowflake, dbt Cloud といったモダンデータスタック SaaS の初期導入をチーム全体ゴリっと進めて、後はコードを書き進められるだけという(以下、YARUDAKE)状態にする
    • Snowpipe + Fivetran で加工元データのロード → dbt Cloud でトランスフォーム → QuickSight で見れるというところまで一気通貫で出来るようにする
  • 対象としては、様々なログ種類(自社および外部計測)のうちの一部のデータで良い
  • 普段と違う環境で集まって開発することで、リフレッシュしたりチームワークを強化する
  • 合宿の実績を作って、事業部内の他のチームにもやるといいぞ!と自信を持って言えるようにする

そもそもデータスタックって何なのさ

(ここはデータエンジニアリングについて詳しく知らない人かつ興味がある人は読んでください。)

  • Snowflake
    • 今一番イケてる(諸説あり)データウェアハウス
    • 良いところ抜粋
      • データ(Data)とコンピューティング(Warehouse)が完全に分離している
      • Snowpipe という S3 にファイルを置くと勝手にロードしてくれる機能がある
      • サポートの相性が弊社と合っている
  • Fivetran
    • 様々なデータソースからデータを自動的に集めて、ウェアハウスにロードすることが出来る
    • MySQL の場合、初期同期の後は binlog ベースで変更に追従することが出来る
    • 運用データでディメンションテーブルとして使いたいものを持って来たい目的
  • dbt Cloud
    • dbt-core の SaaS 版。dbt 実行基盤や多機能 Web IDE、スケジューリング、ドキュメントホスティング、通知機能等がある
    • dbt-core 自体は、OSS であり ETL(ELT) の T(Transform) の部分を便利に管理できるソフトウェア
  • Amazon QuickSight
    • AWSが提供しているBI ツール
    • 機能は素朴でまだ発展途上な部分も大きいが、他の BI ツールを凌駕する安さがいい
    • モデリングがちゃんとしてればまあ普通に使える

合宿前後の構成比較

before

元々は以下の構成でした。

  • データウェアハウス: RedShift
  • データの加工 dbt-core(ECS上でbuild)
  • BI: QuickSight

また合宿前の準備や状態は、以下のようなものでした。

  • Snowflake, dbt Cloud, Fivetran のアカウントは予め用意してある
    • Snowflake はユーザー、ロール、ウェアハウスが部分的に整備されている程度(稼働はしていない)
  • Snowflake へロードする元データは S3 にある
  • QuickSight 自体は RedShift をソースとして運用しており知見があった

after

こちらを以下の構成に移管しました。

  • データウェアハウス: Fivetran で Snowflake にデータロード
  • データの加工: dbt Cloud
  • BI: QuickSight

どこまで出来たか

Fivetran

  • Aurora MySQLのデータが Snowflake に 15min ごとに同期され Snowflake で見れるようになった
  • dbt Cloud で、ログデータと合わせて加工することが出来るようになった

Snowflake

  • Extractor が S3 に置いたファイルが Snowpipe 経由で Snowflake に入ってくるようになった
  • Database, Schema 運用などがおおむね固まった
  • User, Role, Warehouse 辺りが整理され Terraform 管理されるようになった

dbt Cloud

  • Snowflake との Connection を作り、dbt Cloud 環境で dbt が動いた。結果としてモデルを作れるようになった
  • バッチで頑張って加工していた部分を raw JSON (VARIANT 型) から dbt で組み立てられるようになった
  • 加工したデータを QuickSight で見れるようになった

開発合宿はどういう風に進めたか

客室とは別に会議室を借りていて、そこで基本的にずっと借りたディスプレイ1台でモブプロで進めました。

Driver は大体半日で交代という感じ。人それぞれの環境が見れるのも面白いなーというのもペアプロ・モブプロの醍醐味ですね。

情報はホワイトボードに書いて、Google Docsに雑にまとめたり 事業部のチャンネルで実況したりしてました。

各々勝手に作業してるだけだとせっかく集まってる意味が無いので、一緒に設定したりデバッグしたりペアレビューしたりと言う感じで進めました。

結果として、環境ごとのハマりポイントだったりバグっぽい挙動が色々見つかってその場ですぐ解決まで行けたりするので、それだけで既に最高だなという感じでした。しかも全員に知見が同時に貯まっていく。

また、初めて使うツール群は必然的に運用方針を決めるという腰の重いタスクがありますが、「それも考えなきゃね」っていうタイミングになると、すぐにその場でみんなでしっかり話して決めることが出来ました。帰った後により YARUDAKE 状態にすることが出来ました。

結果的に当初予定していた「ここまでやろう」というゴールは3日目の14時過ぎくらいに終わらせることができ、少し Additional なところまで試すことが出来ました!

↓様子です。

日中帯の開発合宿の様子

開発外の部分

今回、合宿に利用させていただいた宿はこちらです。

  • 場所: 湯河原おんやど恵
    • 電車で2時間程度
    • 開発合宿で有名な宿
    • 会議室が借りれてホワイトボードが付いてたり、課金でプロジェクターやディスプレイなども借りれる
    • 日程:5月下旬 の2泊3日

想像よりご飯がしっかりしていてテンション上がりました。

夕食の一部
歓喜の美酒
朝食

温泉にも入ることが出来たんですが、進捗がしっかり出ているという事実でめちゃくちゃ気持ちよく温泉を堪能することが出来ました(温泉は朝10時までいつでも入れる)。

夜はみんなで VCT で ZETA DIVISION を応援したりハイラルに行ったりしました。

部屋がデカい

良かった点まとめ

とにかくデバッグが楽でした。なぜなら、環境の突き合わせができるので、違う部分が見つけやすく解決が早いからです。

また、進捗が最高になります。普段と違う環境ということもあり集中できます。第二領域的なタスクがどんどん進み、その場で運用方針などがどんどん決まります。

合宿という大義名分によって普段なら起きるだろう差し込みがないのも大きな要因です。これはチームの皆様のおかげです。ありがとうございました🙏。

さらに、進捗に反してストレスが溜まらないのも大きなメリットです。良い宿、良いご飯、良い温泉でリフレッシュできるのも良い点です。

注意点まとめ

人数がこれ以上増えると、暇な人が増えてダレそうです。モブプロでやるなら、3~4人のチームが複数いる感じが良さそうです。

また、ドライバーはもう少し頻繁に変えても良かったかもしれません。画面を見ている時間が長くなると、やっぱり疲れたり集中力が落ちたりします。

あと、目的・ゴールははっきりと決めておいた方が良いです。最低限の目標、ストレッチ目標があると良いです。

そして、普段ではなかなかできないことをやるのが良いです。せっかくの差し込まれずに集中できるという環境でこそ、進められるものを進めるべきです。

今後について

複雑なコンテキストを含む古い仕組みやコードを減らし、仕組みをシンプルにすることで認知負荷を減らしたいと考えています。その結果、無駄も減り、コストも削減でき、トータルで見ると安いと考えています。

また、1つの開発チームに閉じていた現代データ基盤がチーム外にも波及することで、全体のデータエンジニアリングの質が向上し、プロダクトの質も伸びていく未来になっていくはずです。

さらに、合宿そのものもかなり良い体験であり、進捗も生まれるものだと分かったので、他の事業部やチームでも是非トライしてみて欲しいと思います。

まとめ

  • 日常業務の中だとなかなか重い腰の上がらない筋肉タスクをゴリッとすすめるのに開発合宿はめちゃくちゃ良かったです。

  • ずっとモブプロで進めているとどうしても疲れたりダレたりが発生するので、時々やり方を変えるとか、2泊3日くらいがちょうど良かったなと思いました。