FDP APIサーバーの成長報告

この記事は、Retty Advent Calender 2020の7日目の記事です。 adventar.org

昨日は、松田さんのフロントエンドエンジニアからデータアナリストになって2ヶ月の振り返りについての話でした。

はじめに

こんにちは、Retty株式会社広告コンテンツ部開発チームに2020年の4月からエンジニアとして所属している森田です。 好きな料理は、鶏肉料理(唐揚げや串焼きなど)です。 いよいよ2020年も残すところあと23日になりましたね!!

この記事では、私が2020年4月から開発に着手しているFood Data Platform(FDP)のAPIサーバーの成長報告をしていきたいと思います。

FDPの概要

FDPは、食領域のビックデータ連携基盤システムのことです。 f:id:rettydev:20201129201257p:plain グルメサービスとしてのRettyの認知度は高く、ありがたいことに多くのユーザーさんにRettyを利用していただいているため、Rettyには大量の食領域のデータがあります。 このデータは非常に有用であり、他企業や官公庁などのクライアントがこのデータを活用したいと思ってくださっています。しかし、生のデータだと扱うのが難しいので、整形や統計値への変換をしたうえでデータを提供することができるFDPは、非常にニーズがあると思います。

FDPの概要について説明すると、まずメディア系サービスであるRettyで収集したデータを整形したり、統計を取ったり、レコメンドアルゴリズムを使ってレコメンドデータを生成したりなどをして提供データを生成します。

つぎに、生成したデータをクライアントが保有するサービスと連携します。

こうすることで、クライアントが保有するサービスのデータのバリエーションが豊富になり、サービスの質向上の助けになることができるプロダクトになります。

そのため、FDPは、大きく分けて2つの要素から構成されています。

1つ目の要素は、ETL基盤です。 つまり、Rettyが保有するデータの収集(Extract)、収集したデータの加工(Transform)、加工したデータをFDP用のデータベースに挿入(Load)をするための基盤のことです。 この基盤でクライアントの要求に応えられる価値あるデータを生成しています。

f:id:rettydev:20201201105142p:plain
2020年4月時点のETL基盤のシステム概要図

2つ目の要素は、APIサーバーです。 こちらは、ETL基盤で生成したデータをクライアントが保有しているサービスにシームレスに連携するための機能となります。

f:id:rettydev:20201130170233p:plain
2020年4月時点のFDP APIサーバーのシステム概要図

FDPについてこれ以上詳しく説明すると長くなってしまうので、気になる方はこちらを色々と漁ってください!(宣伝は基本ですよねw)

FDP APIサーバーの課題

2020年4月時点のFDP APIサーバーでは、下記のデータをRetty側で指定した固定形式でのみ取得が可能でした。

  • Rettyが保有する飲食店の基本データ
  • Rettyが保有する飲食店の口コミデータ
  • Rettyが保有する飲食店の画像データ
  • Rettyが算出した飲食店の統計データ
  • Rettyが算出した飲食店のレコメンドデータ

これにより、下記のようなクライアントからの要望に応えることができませんでした。

  • 取得可能データを組み合わせて取得したい
  • 必要なカラムだけを指定して取得したい
  • Rettyが保有するデータとクライアントが保有するデータを組み合わせて取得したい

そのため、2020年7月から現在(2020年12月)にかけて、上記の要望に応えられる機能の開発プロジェクトが実施されています。

課題を踏まえて新たに追加した機能

先ほどあげた3つの要望を解決するにあたり、ビジネス側の優先度の高さから先に取得可能データを組み合わせて取得したい必要なカラムだけを指定して取得したいを解決する機能を先に開発することになりました。

そのため、開発プロジェクトは、2つのフェーズに分けることになりました。

まずフェーズ1では、取得可能データのカスタマイズ機能を、その次のフェーズではRettyデータと外部データの統合機能を開発しています。

フェーズ1: 取得データのカスタマイズ機能の追加

f:id:rettydev:20201130170335p:plain
1回目の開発プロジェクト後のFDP APIサーバーのシステム概要図

開発プロジェクト フェーズ1により、取得可能データを組み合わせて取得したい必要なカラムだけを指定して取得したいに応えることができるようになりました。

2020年4月時点のAPIサーバーは、取得データのカスタマイズを想定した設計ではありませんでした。 そのため、取得データのカスタマイズ機能の追加開発が困難だったため、APIサーバーのリアーキテクチャ設計も同時におこないました。

APIサーバーのリアーキテクチャについて気になる方は、こちらを読んでみてください!

engineer.retty.me

f:id:rettydev:20201129203754p:plain f:id:rettydev:20201129203819p:plain f:id:rettydev:20201129203855p:plain f:id:rettydev:20201129203915p:plain 取得可能データの組み合わせと必要なカラム指定は、URLパラメータ”custom_type”で制御することで実現しました。

これにより、提供できるデータの幅が広くなり、様々なクライアントの用途に対応することができるようになりました。

フェーズ2: Rettyデータと外部データの統合機能の追加

次に現在進行形で稼働している開発プロジェクトにより、Rettyが保有するデータとクライアントが保有するデータを組み合わせて取得したいに応えることができるようになります。(応えられるように全力で頑張ってます!!笑)

f:id:rettydev:20201130172152p:plain
2回目の開発プロジェクト後のFDP APIサーバーのシステム概要図

開発プロジェクト フェーズ2では、主にFDP ETL基盤側でRetty以外のクライアント(外部クライアント)のデータを取得して、整形して、Rettyのデータと統合してFDP DBに組み込む機能の開発をおこなっています。

FDP ETL基盤で外部クライアントのデータをFDP DBに組み込む機能の開発における工夫などは、Retty Advent Calender 202020日目の記事で公開予定なので、気になる方はぜひ読んでみてください!

FDP APIサーバー側の開発は、1回目の開発プロジェクトで開発したURLパラメータ”custom_type”でRettyデータと外部クライアントデータの統合テーブルも制御可能にするだけとなりました。

これにより、FDPは、Retty以外のデータも扱えるようになり、1回目の開発プロジェクトと合わせて、様々なデータを組み合わせてクライアントごとにカスタマイズしたデータを提供することが可能になります!!

おわりに

こうしてFDPのAPIサーバ側の大まかな成長過程をふりかえると、FDPはビジネス要件を元に機能開発がおこなわれて、徐々にクライアントが欲しがるプロダクトに成長しつつあるのかなと思いました。

とはいえ、2回に渡りおこなった開発プロジェクトでは、機能追加やリアーキテクチャを優先的におこなったため、今後はプロダクトの安定稼働を意識していく必要があるなと個人的には思っています。

そのため、私は自身の開発力やチームの開発力をしっかりと高めつつビジネスチームとの連携もできるような人になり、FDPをこれからも成長させ続けられるようにしていきたいと思います。