見出し画像

BFFとは?2つの異なる観点が存在するかも


はじめに  


こんにちは。株式会社SHIFT DAAE(ダーエ)テクノロジーGのフィンです。

日々モダンなアプリケーション開発に携わる皆さん、「BFF (Backend For Frontend)」 という言葉を耳にしたことはありますか?

ご存知の方もいれば、名前だけは聞いたことがあるという方もいるかもしれません。今回は、最近の案件での経験を踏まえ、BFFについて共有したいと思います。

実は、BFFについて調べてみると、私が認識していたこととは異なる観点も存在することに驚きました。根本的に異なる2つのBFFの観点が存在するのです。今回は、両方の観点について紹介し、特に2つ目の定義に焦点を当てて解説していきます。

第1の観点


BFF (Backend For Frontend) とは、フロントエンドバックエンド中間に位置するアプリケーション層のことです。

注目ポイントは複数のマイクロサービスやバックエンドエンドポイントから、フロントエンドが必要とするデータや機能を最適な形で提供するために設計されます。

イメージはこんな感じです。

図:筆者作成

第2の観点(今回注目したい)


BFF (Backend For Frontend) とは、特定のフロントエンドのために個別に実装されるバックエンドのことです。

イメージはこんな感じです:

図:筆者作成

第1の観点と同様に、フロントエンドとバックエンドの中間に位置するアプリケーション層である点は共通していますが、第2の観点は、特定のフロントエンドごとに個別に実装されるという点が異なります。この違いにより、必要性やメリット・デメリットも異なります。

この観点はBFFパターンも呼ばれています。Microsoft Learnの公式ページにも詳しく記載されています。

以降では、第2の観点に焦点を当てて解説していきます。

なぜ必要なのか?問題の背景


技術は問題解決のために生まれます。BFFパターンも例外ではありません。

モダンなシステムでは、Webやモバイルアプリなど、多様なフロントエンドをサポートする必要があります。

さらに、フロントエンドの種類やユーザーごとに必要なデータや機能も異なります。これらの要求をすべて1つの汎用的なバックエンドで処理しようとすると、ロジックが複雑になり、セキュリティリスクも高まります。

そこで、フロントエンドごとに専用のバックエンドを持つというBFFパターンが登場しました。

BFFのメリット


  • UI/UXの最適化と開発効率の向上: BFFは特定のフロントエンドと密接に連携し、UI開発チームがBFFも管理するため、UI/UXに最適化されたAPIを提供しながら、フロントエンドとバックエンドの連携をスムーズにし、開発効率を向上させることができます。

  • 柔軟性と独立性: フロントエンドごとにBFFを持つことで、変更が他のフロントエンドに影響を与えることなく、柔軟かつ独立した開発が可能になります。

例えば、以下の場合は、モバイルアプリ開発AチームフロントWeb開発Bチームは、それぞれの要求に応じて、他のチームに気にせず、個別にBFFエンドポイントを柔軟に修正できます。

図:筆者作成

また、フロントエンドに限らず、例えば、あなたの独自システムが複数のサードパーティにサービスを提供する場合、BFFパターンの原理を活用することで、サードパーティごとに独立したバックエンドを持つため、変更による影響範囲が限定されデグレードのリスクを低減できます。

図:筆者作成

BFFの懸念点


フロントエンドごとに単一のBFFを持つことへの懸念の1つは、BFF間で多くの重複が発生する可能性があることです。例えば、同じ種類の集約処理を行ったり、下流のサービスと連携するための同じようなコードを持つことになるかもしれません。

図:筆者作成

ライブラリ化共通BFFを用意する方法もありますが、いずれの場合も、ある程度同じコードを持つBFFが複数存在する問題は完全に避けることは難しいでしょう。ただし、このコードの重複は、BFFパターンの独立性というメリットを活かすためのトレードオフと言えるでしょう。

BFFの導入を検討すべきケース


それぞれフロントエンドやサードパーティ向け特定の機能を提供する必要がある場合は、最初から各フロントエンドごとにBFFを使用することを検討するべきです。

追加のサービスをデプロイするコストが高い場合は再考する必要がありますが、BFFがもたらす関心の分離は、ほとんどの場合、非常に魅力的な提案となります。UIを構築する人と下流のサービスを提供する人の間に大きな隔たりがある場合は、前述の理由から、BFFを使用する傾向がさらに強くなります。

おわりに


今回のブログでは、特に特定のフロントエンドごとに個別に実装されるBFFパターンに焦点を当て、そのメリットや導入を検討すべきケースなどを紹介しました。

Microsoft LearnAWS Blogでも紹介されているように、BFFパターンはSam Newman氏によって最初に提唱されたものです。私もこのブログを書く際にSam Newman氏のブログを参考にしました。皆さんも是非、時間がある時に参考にしてみてください。

\もっと身近にもっとリアルに!DAAE 公式 X/


執筆者プロフィール:Huynh Minh Anh Tuan(フィン ミン アイン トゥアン)
SHIFT DAAE(ダーエ)テクノロジーグループ所属のエンジニア。

お問合せはお気軽に

SHIFTについて(コーポレートサイト)

SHIFTのサービスについて(サービスサイト)
https://service.shiftinc.jp/

SHIFTの導入事例
https://service.shiftinc.jp/case/

お役立ち資料はこちら
https://service.shiftinc.jp/resources/

SHIFTの採用情報はこちら
https://recruit.shiftinc.jp/career/

PHOTO:UnsplashMohammad Rahmani