ソフトウェア開発において、フロントエンドとはユーザーが直接操作するプレゼンテーション層を指し、バックエンドとは裏側で行われるデータ管理と処理を指します。「フルスタック」とは、この両方を合わせたものです。クライアント・サーバーモデルでは、通常、クライアントがフロントエンドとみなされ、ユーザー向けのタスクの大部分を処理し、サーバーはバックエンドとして、主にデータとロジックを管理します。
ソフトウェアアーキテクチャにおいては、ハードウェアとエンドユーザーの間に多くのレイヤーが存在する可能性がある。フロントエンドは抽象化レイヤーであり、ユーザーフレンドリーなインターフェースを提供することで基盤となるコンポーネントを簡素化する役割を担う一方、バックエンドはデータストレージとビジネスロジックを処理する。
Eコマースウェブサイト:フロントエンドはユーザーインターフェース(例:商品ページ、検索バー)であり、バックエンドは決済処理や在庫更新を行います。
銀行アプリ:フロントエンドでは口座残高が表示され、バックエンドでは安全な取引処理と記録の更新が行われます。
ソーシャルメディアプラットフォーム:フロントエンドはニュースフィードを表示し、バックエンドは投稿を保存し、通知を管理します。
電気通信において、フロントエンドはデバイスまたはサービスとみなすことができ、バックエンドはサービスの提供を支えるインフラストラクチャである。
一般的に、フロントエンド(クライアント側)とは、ユーザーが操作するすべてのコンポーネントを指します。バックエンド(サーバー側)は通常サーバー上に存在し、ユーザーから物理的に遠く離れていることが多いです。
ソフトウェアの文脈では、「フロントエンド」と「バックエンド」という用語の定義にはさまざまな方法があります。たとえば、コンテンツ管理システムでは、フロントエンドはエンドユーザー向けのビューを指し、バックエンドは管理者ユーザー向けのビューを指します。[ 1 ] [ 2 ]同様に、音声合成の分野では、フロントエンドは入力テキストを記号的な音声表現に変換する合成システムの一部を指し、バックエンドは記号的な音声表現を実際の音に変換します。[ 3 ]プログラミング言語コンパイラでは、フロントエンドはコンピュータのソースコードを中間表現に変換し、バックエンドは中間表現から実行可能コードを生成します。バックエンドは通常、より高速に実行されるコードを生成するように最適化します。フロントエンド/バックエンドの区別は、ソースコードを扱うパーサーと、実行可能コードを生成および最適化するコンパイラを区別することもできます。GCCなどの設計では、複数のフロントエンドオプション (異なるソース言語を解析) と複数のバックエンドオプション (異なるターゲットプロセッサ用のコードを生成する)が提供されています。 [ 4 ]
一部のグラフィカルユーザーインターフェース(GUI)アプリケーションは、基盤となるコマンドラインインターフェース(CLI)プログラムの薄いフロントエンドとして機能し、ユーザーがCLIの用語やコマンドを学習する必要をなくします。
フロントエンドとバックエンドの違いを理解するもう一つの方法は、それぞれがソフトウェア開発者に求める知識を検討することです。以下の例は、Web開発に焦点を当てています。
フロントエンドはAPIを介してバックエンドと通信します。Webおよびモバイルのフロントエンドの場合、APIは多くの場合HTTPリクエスト/レスポンスに基づいています。APIは、「Back end For Front end」(BFF)パターンのように、異なるフロントエンドインターフェースに異なるバックエンドサービスを使用することで、フロントエンドの処理負荷を軽減することもできます。[ 5 ]
コンピュータネットワークにおいて、フロントエンドとは、デバイスをネットワークに接続したり、DMZなどのセキュリティ機能を提供したり、データを転送可能な形式に変換したりするハードウェアを指します。バックエンドとは、ネットワーク内でデータを処理および転送するハードウェアを指します。
プロセッサ設計において、フロントエンド設計とは、 Verilogなどのハードウェア記述言語を用いて回路の動作を最初に記述することを指し、バックエンド設計とは、その動作をダイ上の物理的なトランジスタにマッピングするプロセスを指す。