ScalaからGoへのリプレイスプロジェクトでロジックの社内横展開を実現できた

プロダクト部 テックリード

角本 幸生

プロダクト部 エンジニア

熊本 紘一

フロントエンドとバックエンドを繋ぐBFF
マイクロサービスならではの体制とやりがい

―スタンバイにおけるBFFの役割や概要について教えてください。

角本:スタンバイでは、全社的なシステムとして「マイクロサービスアーキテクチャ」というアプリケーションの開発スタイルを取っています。独立した複数のサービスでソフトウェアを構成しており、例えば「広告を検索する」「特定の求人情報を取得する」といった機能がAPIとして分かれて細分化されています。それらすべての機能をフロントエンド面から個別に制御するのは難しいため、フロントエンドとそれぞれのマイクロサービス(バックエンド)の中間にBFF(Backend For Frontend)を置いています。BFFがフロントエンドが必要としている情報をマイクロサービスから集約する、という役割を担っているんです。
フロンドエンド面は求職者からの要望やそれに応じた施策などを打ち出していくところです。スピード感を持って開発を行うことが多く、それを支える中間的な役割として、フロントエンドと同じようにスピーディな機能提供をすることでサービスに貢献しています。

熊本:スタンバイには数十を超える、非常に多くのサービスが存在しているので、それらを束ねるBFFの存在は必須です。私たちも、スタンバイのマイクロサービス全体を俯瞰できるような形で知っておく必要があり、フロントエンド側が開発したい機能に沿って、BFF側の実装開発を進めています。

角本:ユーザーである求職者にとって、レイテンシ(通信の遅延時間)の短さは、サービス利用時の快適さにつながります。検索結果が実際に表示されるまでのレイテンシを意識して、通信速度を上げるべく開発するためにも、システム全体の知見が必要だと感じています。

今後のエンジニア採用を見据え
Goへの置き換えプロジェクトが始動

―BFFの開発上どのような課題があり、改善に向けて何に取り組んでいますか。

角本:2023年まで、BFFのサーバも含めて全社システムはすべてScalaを用いた開発が行われていました。それをすべてGoにリプレイスする開発を約1年かけて進めてきました。
主な背景として、世界的に見た技術トレンドとエンジニアの採用観点から、Go言語への置き換えプロジェクトが全社を挙げて動き出しました。Goはマイクロサービス間の通信の安定性という観点でも、バックエンド開発で用いるメイン言語として最適だろうと考えました。

BFFでは社内でもいち早く取り組みをスタートさせましたが、言語の置き換えというのは完全な作り直しとなりますので、とても大掛かりなプロジェクトでした。既存のScalaのコードから今の仕様をすべて洗い出してGoに置き換えていく中で、Scalaで実装されているコード上では容易に実現できていたものが、Goだと難しくなったり、動かなくなったりすることも多々起こりました。Goを扱うのが初めてというエンジニアも多かったので、外部の講師の方を招いた勉強会も開催しました。脳の発想の転換という意味で、エンジニアメンバーにとって簡単なことではありませんでしたね。

熊本:スタンバイには、Web面を担当するBFFや、アプリ面を担当するBFFなど、複数のBFFが置かれています。私たちチームでは、Webに面したBFFを担当しています。Web面で培ったロジックをアプリ面にも共通するロジックとして横展開することができ、社内への貢献という意味でとてもやりがいのある仕事だったなと思っています。

角本:熊本さんには、リリース後のモニタリングや不具合の改修なども手掛けてもらいましたよね。

熊本:Web面から取得した情報を、流入元の異なるWeb面でも実現できるように仕様を把握し機能追加を担当しました。システム全体を理解するにあたり、Goリプレイスに参画できたことは、非常に有益な経験になりました。

「やってみよう」のチャレンジ精神で、レイテンシを意識した高度な開発を手掛けられている

―このプロジェクトを乗り越えた今、ユーザー向け機能開発チームはどう変化していきますか。

角本:全社的なリプレイスを経た今、Go言語の経験値は大きくなりましたので、BFFポジションを担うエンジニア採用の面でプラスの影響が大きいと期待しています。
レイテンシを意識する上でも、Goはいろんなシステムに並列でリクエストを送りやすい言語です。複数のマイクロサービスすべてにアクセスしに行くのを順番に進めていては時間がかかってしまいます。まとめて情報を収集しに行く際にGoは非常に有効で、スタンバイのシステムとして合っているなと感じています。

熊本:私は前職でもバックエンドエンジニア経験がありますが、レイテンシを意識しながら開発するという難易度の高いシステム開発ができているのは、スタンバイならではだと感じています。現状の通信時間を維持しながら、スタンバイというリクエスト数の多い大規模システムをいかに開発していくか。エンジニアとしてなかなかできない経験ができています。
スタンバイのバリュー(行動指針)の一つに「やってみよう」というものがあり、それをまさに体現しているのが私たちのチーム。今後もいろいろな機能が追加されていく重要なポジションですので、Go言語開発経験をスタンバイで活かしたい、という方にはぜひ仲間になっていただきたいです。

募集職種・エントリー JOB LIST

スタンバイでは、さまざまな職種の人材を募集をしております。
「まずはどんな会社なのか?」を知りたい方にはカジュアル面談のエントリーも受け付けております。
お気軽にお申し込みください。

READ MORE
ENTRY