ソフトウェアはレストランである。


最近大学の授業の内容で大衆に向けてのプレゼンをする機会があったので、そのときに使った比喩をメモして行こうと思ったので書いていきます。

まずは、レストランでの一連の流れをおさらいしましょう。

レストランでの一連の流れ。

  1. 客が入店、客にメニューを渡す。
  2. フロアの人が客からオーダーを取る。
  3. フロアの人が厨房までそのオーダーを持っていく。
  4. 厨房で、オーダーに対応する材料を集めて、調理をする。
  5. 料理が完成したら、フロアの人に皿を渡す。
  6. フロアの人が客のところまで皿を持っていく。
  7. 客が料理を食べる。

ソフトウェアに当てはめてみる。

  1. ユーザーがソフトを起動、何をするかのメニューが表示される。
  2. ユーザーの入力値をインターフェイスが受け取る。
  3. インターフェイスが受け取った入力をバックエンドの理解できるものに変換して、バックエンドに渡す。
  4. バックエンドのプログラムが入力に対する出力をするためのデータを集め、計算する。
  5. 出力値の計算が完了したら、それをまたインターフェイスに渡す。
  6. インターフェイスが出力値をフロントエンドに渡す。
  7. ユーザーがその出力値を観測する。

ソフトウェア開発等に関わったことのない人はフロントエンドやらバックエンドやらインターフェイスってなんやってなると思うので、そのへんを細かく説明していきます。

フロントエンド

レストランで言う内装、出てくる料理、メニュー等大雑把に言えばレストランへ来た客が五感で感じるものすべてのこと。メニューから客が注文するところまでがフロントエンド。
ソフトウェアでいうデザイン、アイコン、色使い、音楽、ユーザーが触れ合う部分のことをフロントエンドという。ユーザーからの入力はすべてこのフロントエンドから行われる。

この社会に当てはめてみていうとしたらサービス業がもう全部フロントエンド。
仕事を探していてもよくフロントエンドエンジニアなど、フロントエンドに特化する人がいるぐらいに重要で複雑なもの。どんな神ゲーもどんな糞ゲーも全部このフロントエンドがそれ相応のものでないと正当な評価は得られないのではと思ったり。

バックエンド

レストランで言う厨房。生野菜やら調味料やら調理器具やら厨房で使われるものやそれらを手に入れる工程をバックエンドという。それだけではなく、レストランとしての税金を払ったり、保健所とのやりとりをしたり、レストランの管理自体も含まれている。
ソフトウェアでいう、データやそのデータを正規化するプログラム、ユーザーからの入力を処理して何らかの出力を出すプログラム等も全部バックエンド。ソフトウェアにもよるが、サーバーの構築やルーティング、ドメイン設定等の裏方作業も全部バックエンド。

これまたフロントエンドとおなじでバックエンドエンジニアというバックエンドに特化した職種があるように重要で複雑。

インターフェイス

レストランでいうウェイター。客からの注文を取って厨房に回す役割。フロアと厨房を両方行き来することができる。
ソフトウェアでは、フロントエンドとバックエンドをつなげる役割をしているもの。入力値をバックエンドに渡して、バックエンドから返された出力値をフロントエンドに返す仕事。

しっかりした定義はないらしいのでフロントエンドとバックエンドの定義が曖昧になっている部分もあるが、かんたんに言ってしまえばユーザーが触れるものがフロントエンド、ユーザーが触れないものがバックエンドと考えてもらってもいい。

フロントエンドもバックエンドもある程度できるよって人がフルスタックエンジニアと呼ばれている。
このフルスタックっていうのはバックエンドからフロントエンドがスタックのように積み重なっていくので、そういった呼び名らしい。