BFF 【Backend For Frontend】
概要
BFF(Backend For Frontend)とは、Webアプリケーションの設計パターンの一つで、バックエンド(サーバ)側にフロントエンド(クライアント)とのやり取りに特化したプログラムを用意するもの。バックエンドをマイクロサービスに分割する際に用いることが多い。BFFはバックエンド側でフロントエンドと通信する唯一のアプリケーションであり、原則としてフロントエンド一つにつき一つのBFFが置かれる。BFFはフロントエンドの要求に応じてバックエンド側のサービスやデータを呼び出し、担当のフロントエンドに適した状態に整理して返却する。
例えば、一つのWebアプリケーションにWebブラウザ版とスマホアプリ版がある場合、ブラウザ用のBFFとアプリ用のBFFを用意し、バックエンド側の機能やデータをそれぞれに適した形式に整理して応答する。フロントエンドとバックエンドの仲介役として機能する。
背景
近年のWebアプリケーション開発では、フロントエンド側はPCやスマートフォン、タブレット端末などの機器や機種、操作環境などの違いに対応しなければならず、Webブラウザ、iOSアプリ、Androidアプリなど多様なソフトウェア環境にも対応しなければならない。
これを単一の巨大なバックエンドで対応しようとすると、内部の処理が複雑になり、品質や開発効率の低下を招く。異なる操作環境では必要なデータやタイミングも異なることが多く、環境ごとにそれぞれ別のAPIを用意するなどの対応が必要になる場合もる。
また、バックエンド側では全体を一つの巨大なアプリケーションにするのではなく、機能毎に独立性の高い「マイクロサービス」(microservice)に分割し、Web APIなどで連携する方式が広まっている。その場合にはフロントエンドとバックエンドサービスの「組み合わせ爆発」の問題に直面することになる。
利点・欠点
フロントエンドとバックエンドに間にBFFという中間層を挟むことで、単一バックエンドのように巨大で複雑なバックエンドを抱える必要がなくなり、各BFFは担当のフロントエンドの要求や仕様に合わせてデータや機能を提供するだけのシンプルな実装とすることができる。
バックエンド側が多数のサービスに分かれている場合も、それらの呼び出しやデータの統合はBFFが担当し、フロントエンド側はユーザーインターフェースに注力するという役割分担が進む。BFFと各サービスはサーバ側に実装されるため、フロントエンドと直接通信するより連携の自由度が高い点も副次的な利点となる。
一方、フロントエンドとバックエンドに加えてBFFも追加で開発する必要があるため、その分のコストや工数は増大する。特に、フロントエンドの変更にもバックエンドの変更にも追従しなければならないため、修正とデプロイの頻度は高くなる。また、各BFFの機能は主にバックエンドの呼び出し部などが重複するため、コードが冗長化しやすい。こうした欠点とのトレードオフで利点が勝る状況で導入すべき設計と言える。