見出し画像

“エンドユーザーに露出するプラットフォーム”をつくる。Core Platformチームの仕事はなぜチャレンジングなのか

プレイドのKARTEシリーズを支える技術的な強みとして、「リアルタイムに膨大なデータを解析する独自の解析エンジン」が挙げられます。サービスを訪れるユーザーの最新の解析結果の計算と、結果に応じたアクションの実行判定を1秒以内に決定。これにより、刻一刻と変わるユーザーの状況や行動に合わせた、コミュニケーションを実現しているのです。

プレイドのCore Platformチームは、この解析エンジンのコアとなる技術を開発・運用するチーム。多種多様かつ超大規模なユーザーの行動データを収集・解析・表示するデータプラットフォームを構築し、プロダクトや事業の成長を加速させています。また、プラットフォームを作る上で発生する技術的課題を解くことで、他社と比較した技術的な競争優位性を作り出していく役割を担っています。

今回はCore Platformチームの日鼻旬と金築敬晃、塩澤元にプレイドへと参画した経緯や具体的なプロジェクトの事例、仕事のやりがいなどを聞きました。


大量データを扱えて、優秀なメンバーと働ける環境

――簡単に自己紹介をお願いします。

日鼻:Core Platformチームの責任者をしています。具体的な役割としては、Core Platformチームの2~3年先のビジョンを考えたり、その内容をロードマップに落とし込むためのプランニングをしたりしています。それ以外にも、社内の各チームの状況や課題をヒアリングして、Core Platformチームとして何か貢献できないかを考えています。

塩澤:私はCore Platformチームでリアルタイム解析エンジンの開発・運用を担っています。具体的には、解析を行うサーバーサイドと、顧客のWebサイトに埋め込むサードパーティースクリプトの2つをメインに担当しています。

金築:私はCore Platformで比較的広い技術領域を見ていますが、最近のメインの業務はBigQuery関連の部分。特に「KARTE Datahub」のデータガバナンスに関する取り組みを行っているのと、各サービスの監視・障害対応をなどを担当しています。

左から、日鼻旬、金築敬晃、塩澤元

――プレイドに入社した経緯を教えてください

日鼻:私はリファラル採用でした。創業者であり取締役CPOの柴山の弟が前職の同期で、そのつながりで2018年に開催されたプレイドオフィスの銀座移転パーティーに参加したんです。会場で「プレイドに入社しないか?」と声をかけられ、採用面接を受けることにしました。

入社に至った一番の理由としては、エンジニアとして強そうな人が多そうだなと感じて、それに惹かれたというところですかね。CTOの牧野と話したときに、考えていることが哲学的かつ抽象的すぎて、「何言ってるんだ、この人は」と思った記憶があります(笑)。今はもちろん理解できるのですが、当時はまったく理解できなくて、それが逆に好印象というか。

日鼻旬 (Core Platform Dept Head / Core Platform Team Head)

塩澤:前職はスタートアップで、エンジニアとして7年くらい働いていました。これまでと違うことに挑戦したくて転職活動をしていたときに、プレイドからスカウトをもらったのがきっかけです。その1年前に前職の同僚がプレイドに転職しており、彼から仕事について良い話を聞いていたので、面接を受けることにしました。

採用面接ではプレイドのプロダクトの開発観点での面白みみたいな会話がしっかりできました。私は技術を突き詰めること以上に、「技術を使ってどのようなプロダクトを作るか、どういうインパクトを出せるか」を考えることが好きなので、自分に合いそうだなと思えました。もちろん皆、技術やスキルもすごいんですが、それに加えてプロダクトに対する視点や事業についての視点なども共感できて、この環境ならば楽しく働けそうだと感じました。

金築:私の前職は新卒で金融系Webサービスを開発するスタートアップで、ベトナム拠点の開発チームを立ち上げ、自分自身も現地で開発をしていました。大規模データを扱う開発を行いたいと考え、エージェントから紹介がありプレイドの面接を受けることになりました。

元々、データのストリーミングインサートや大規模なデータをストレージに入れずにインメモリで何とかするといった、大規模データの取り扱いに興味がありました。関連する論文などもよく読んでいましたし、いつかそのような開発に関わってみたいという想いもありました。

面接に際して「データに詳しい人と話したい」と伝えたところ、日鼻さんが面接官として出てきて、「百何十ペタバイトのデータを消してます」みたいなことをすごい楽しそうに話をしてくれて、面白そうな会社だなと。他にもいろいろな観点があったのですが、総じて楽しく働けそうと感じてプレイドへの入社を決めました。

解析基盤刷新。スクリプト軽量化。SLO定義。システムの根幹を支える業務

――Core Platformチームの役割を教えてください。

日鼻:組織名が表す通りですが、Core Platformチームではこの解析エンジンやその基盤など、プレイドが提供する各プロダクトの基盤的な部分の設計・開発・運用などを担っています。たとえば、独自のリアルタイム解析エンジンやクラウドインフラや、行動データをより簡単かつ有効に活用いただくためのデータ分析基盤、アプリケーション実行基盤やCICDの共通基盤などを主に扱い、プライバシーとセキュリティに特化したメンバー(Security Engineer)も在籍しています。プロダクトたちを支える根幹のところで技術差分・強みを作れないか、いろいろと模索している組織です。

プロダクトの性質上、扱うデータやトラフィックは非常に多くなっていますし、KARTEをはじめマルチプロダクト展開を進めているので、規模感は大きく要件は複雑な難しい課題に取り組んでいます。Platform Engineerとして出している採用情報にも書いている例を挙げると、以下のような取り組みを行っています。

  • 行動データの収集・配信コンテンツの表示を0.x秒以内に行う数KB程度の軽量な計測Scriptを作る

  • 100万RPS程の大量トラフィックを0.x秒以内の低レイテンシーでリアルタイム解析を行えるバックエンド基盤を作る

  • ペタバイト級の行動データに対して、インタラクティブな検索や可視化を1秒程度で行えるクエリ実行基盤を作る

  • 多種多様かつペタバイト級の行動データをマルチプロダクトで使いやすい形に正規化し、拡張可能なデータ加工パイプラインを作れる状態にする

  • 30以上のマイクロサービスを各チームが分散して開発するなかで、全体を俯瞰したアーキテクチャを描き、実現することで全体の開発・運用体験を向上させる

Core Platform、基盤と言っても結構幅が広くて、単にインフラ構築するだけではなくて、必要に応じてアプリケーション開発だったり、CICDの整理などさまざまな領域にも各々が少しずつはみ出しています。もちろん、コアなところも広くて深くて難しいので、集中的に取り組んでいる人やプロジェクトもあります。このあたりは人やタイミングによって混在している感じですが、守備範囲広めに動くことを前向きに捉えられるメンバーが多いと思います。

金築:特徴的なこととしては、トラフィック数やデータ量の規模です。秒間で約13万ものイベントをリアルタイムに捌いて0.X秒以内に振り分けていますし、月間では1ペタバイトくらいのデータ量が来ます。大きな規模を高速に安定的に捌くことは事業やプロダクトの肝なので、求められる期待値もとても高いです。リアルタイムにパーソナライズされた体験を提供できる解析エンジンであることが重要な価値なので、1秒未満=0.X秒で返すことには結構こだわってますし、対外的にも強みとしてアピールしています。

金築敬晃 (Core Platform Team, Platform Engineer)

塩澤:他社さんのプロダクトだと、エンドユーザーが訪れたタイミングのイベントが条件に反映されていないということが実際はあるみたいで、後ろでバッチ的に解析しているから、どうしても10秒遅れちゃうとか、訪れたタイミングで出せないということがあるようです。KARTEは、訪れたタイミングのイベントを含めて全部解析して、リアルタイムで返しているので、大きな技術差分だと思っています。クライアントにも喜ばれるところで、条件を満たした瞬間にちゃんとアクションを返せることは、良い体験や価値を生んでいると思います。

塩澤元 (Core Platform Team, Platform Engineer)

――プロジェクトの具体事例をいくつか教えてください。

日鼻:1つ目はリアルタイム解析基盤の刷新です。このシステムのローンチは2015年で、そこから長く運用が続けられてきました。そして、旧アーキテクチャの根本的な構造を変えないまま開発・運用を続けても、大幅なパフォーマンス向上やコスト削減などを実現できる見込みが立たなかったんです。そこで、解析基盤だけではなく計測タグのところも含め、サーバー側だけじゃなくてフロントエンドもとにかく高速にしようと。パフォーマンスを10倍良くして、コストは10分の1にしようみたいなコンセプトで始まったプロジェクトでした。

ゼロベースでリアルタイム解析基盤のアーキテクチャやユーザーデータ構造を再設計し、システムの刷新を約2年ほどかけて行いました。既存の仕組みとかは一旦考慮せずに、ゼロベースでどうあるべきかを考えて、新しいものを実装していきました。新規実装に1年ぐらい、既存の移行をそこから走らせて、普段からリアルタイム解析を提供する中で、ダウンタイムなしで移行することができました。ダウンタイムなしを実現するために、データベースやサーバーサイドなどのレイヤーごとで移行のアーキテクチャをかなり慎重に検討して進めてましたね。

また、ゼロベースでアーキテクチャを考えた末、パフォーマンスやコスト以外にも“強整合な解析“を実現することができました。詳細はブログ記事を参照いただければと思います。

塩澤:少し具体的に話すと、互換性を担保するために新しい解析基盤をまだ移行していない段階で立ち上げて、エンドユーザーに返すパーソナライズされたアクションを新旧それぞれのBigQueryに保存しておいて差分を見てました。結構最初は差分が出るんですけど、それらを丁寧に潰していくみたいなことを結構やりましたね。

移行の成果としては、目指していた観点は大体実現できました。大幅な金銭コストの削減にもなりましたし、レスポンスのレイテンシも平均で1/2くらいになりました。解析サーバーの台数が劇的に減るといった目に見える変化もありましたし、元々一つの巨大なモノリシックなアーキテクチャをモジュールに分割したので、メンテナンス性もかなり上がったと思っています。

■参考資料:KARTE リアルタイムユーザー解析基盤のDB (450TB)をゼロダウンタイムで 新DBに移行したノウハウ

塩澤:アーキテクチャ改善に関する事例について話すと、少し前にサードパーティスクリプトの全面的な書き換えをしました。改善前は、すべてのクライアント企業に対して共通のサードパーティスクリプトを提供していたんです。このスクリプトには、クライアントによっては使わないようなモジュールもすべて含まれていたため、それが読み込み速度に悪い影響を及ぼして、最初のイベントを計測するまでにレイテンシが発生していました。また、ブラウザの機能が進化したことにより、本当はスクリプトに含めなくて良いような不必要なコードも増加していました。

そこで、必要なモジュールのみを取捨選択できる仕組みや、Treeshaking・Dead Code Eliminationを意識した開発プロセスを取り入れました。加えてInternet Explorer対応をしない決定をしました。これによって、スクリプトのサイズを10分の1以下に軽量化することに成功しています。

■参考資料:これから先も戦えるサードパーティスクリプト — 1/10に軽量化・柔軟な拡張性・互換性の担保 —

金築:各チームに横断的に携わった事例について話すと、各プロダクトのSLOを設定する作業を行いました。プレイドが扱っているプロダクトはかなり幅広くて、β版で一部の顧客に試験的に提供しているものもあれば、「KARTE」のリアルタイム解析基盤のように多くの顧客が利用しており運用が長く続けられているものもあります。それぞれのプロダクトによって信頼性が重要になるクリティカルなポイントは何か、リスクをどのくらい許容して何を防ぐべきか、見るべき指標(SLI)は何かなどが異なります。

そこで、プロダクトマネージャーや事業責任者も巻き込みつつ、何かトラブルが発生した場合にクライアントやユーザーに与えてしまうインパクトなどから逆算して開発側でSLOの叩き台を作りました。それをプロダクトマネージャーや事業責任者にレビューしてもらい、ディスカッションしながら着地点を見つけていくような作業をしましたね。

日鼻:工夫した点を補足すると、一気にSLOを広めずに、プレイドやKARTEにとって何を優先すべきなのかを考慮して、最初の目的設定と取捨選択を丁寧にやりました。配信系の仕組みなどエンドユーザーの体験に関わるところや、クライアントの自動オペレーションに組み込まれているところなどは期待値も高いです。仮に不安定だとクライアントの業務にかなり支障が出てしまう部分を優先的にやると決めて、その目的も含めて各プロダクト担当者と連携していきました。

SLOを取り決めたことで、リスクを取る時の開発スタンスみたいなのが結構変わったなと個人的には思っています。何かリスクをとってやりたい時に、バジェット的に許容可能なのか、許容可能でなければどういう対策をとればいいのかみたいな部分が、SLOがあることで共通の意識を持ってリスクを取りやすくなったと思っています。

■参考資料:マルチプロダクト環境下で SLO運用を浸透させるために

縁の下の力持ち“ではない”。直接的な価値が見えるプラットフォームだからこその面白さ

――Core Platformの今後のビジョンを教えてください。

日鼻:プロダクトで扱っているデータのガバナンスやセキュリティを、より高いレベルに向上させ続けることが重要だと考えています。クライアントのクライアント、つまりエンドユーザーのデータを扱う身として、より安全により適切により有効にデータが活用できる環境にしていきたいです。そして、プレイドが提供しているリアルタイムでの解析機能に加えて、管理画面上からよりインタラクティブにデータを分析できるような機能拡充を行うことで、さらなる技術的な優位性をつくっていきたいです。

塩澤:これは個人的な目標になりますが、これまで私はインディビジュアルコントリビューター的な働き方が主でした。ですが、今年から各チームを横断的に見たり、技術的なアドバイスをしたりといった機会が増えてきました。より自分自身の活動の幅を広げつつ、今後もさらに楽しんでいけたらと思います。

金築:私も個人的な想いになるのですが、プレイドが提供するプロダクトをアメリカやヨーロッパなど海外にも展開できると嬉しいですね。また、よりコンピューターサイエンスの専門的な領域を扱えるようなスキルを磨きたいと思っています。領域としては、たとえばデータベースやそれに対するインタラクティブな問い合わせ、大量データを活用したデータ分析やAI・ML関連の技術などを専門にしていきたいです。

――他の会社のプラットフォーム系のチームと比較して、プレイドのCore Platformチームで働くことにはどのような面白さがあると思われますか?

日鼻:明確な違いと言えるのは、プラットフォームが提供する技術がエンドユーザーに直接露出していることです。一般的に、プラットフォーム系のチームには「縁の下の力持ち」というイメージがあります。ですが、私たちが開発・運営している「KARTE」のリアルタイム解析エンジンはエンドユーザーに直接提供していますし、改善することで事業へのインパクトがすぐに出る、“エンドユーザーに露出するプラットフォーム”であることはわかりやすい魅力です。

あとは、他社ではなかなかない規模のデータ量を扱えることです。小〜中規模くらいのデータ量ならば問題なく動くようなアーキテクチャであっても、ペタバイト規模のデータになるとパフォーマンスに問題が生じることがあります。そうした技術的難易度の高い課題を解決することが面白いです。

塩澤:他の企業のプラットフォーム系の部署では、一般的に一人のエンジニアの担当する技術領域が決まっているケースが多いと思います。でも、プレイドのCore Platformチームではそういったことがありません。たとえば、私の場合はサーバーサイドも見るし障害対応もする、JavaScriptのサードパーティスクリプトもアプリのSDKコードも取り扱ってきました。守備範囲が限定されすぎず、いろいろな経験ができています。個人のWillも尊重してくれて、「この領域に携わりたい」と手を挙げればサポートしてくれますし、新しい挑戦がしやすいのはいい環境だと感じています。

金築:個人的に感じているチームの特徴としては、データベースに詳しい人が多いことです。たとえば、私たちはBigQueryを使っているのですが、一般的な企業のエンジニアはあまりその内部的な設計・実装を調べようとはしないと思います。でも、Core PlatformチームのメンバーはBigQueryの論文まで読んだうえで、より良い活用方法について社内でディスカッションしています。エンジニアリングの深い知識を身につけることに興味のあるメンバーが集まっています。

――最後に、今後Core Platformチームに加わってくれるであろう方に向けてメッセージをお願いします。

日鼻:Core Platformチームは扱うデータ量が超大規模で、パフォーマンス要件も厳しいというハードな環境です。でも、そんな環境でいくつもの難題に楽しく立ち向かえるような人と、一緒に挑戦していきたいです。

塩澤:「KARTE」というプロダクトはクライアント企業やエンドユーザーの規模が大きいので、自分の取り組んだエンジニアリングのインパクトがわかりやすく出ます。私たちが担当するのは顧客体験に直結している部分なので、成果を実感しやすくやりがいを持って働けます。

そして、エンジニアとして技術的なチャレンジがたくさんできます。私自身、プレイドに入社してから業務や周りの人たちとのコミュニケーションを通じて成長できているので、ぜひこの環境で一緒に切磋琢磨してほしいです。

金築:Core Platformチームは広範な技術領域を見ることができるので、よりエンジニアリングの専門的な部分に携わりたい人には合うと思います。学ぼうとする姿勢が常にあって、技術にディープダイブするのが好きな方は、ぜひCore Platformチームに来てください。

■採用情報(Platform Engineer)

■エンジニア向け採用関連情報のまとめページ

みんなにも読んでほしいですか?

オススメした記事はフォロワーのタイムラインに表示されます!