どうも、みなさんこんにちは、よしです。
この記事では、「レイヤーとは?」について解説します。
「レイヤー、層とは何か?」
「ソフトウェアにはどのようなレイヤーがあるのか?」
「レイヤー化の利点は?」
「レイヤー」が分かればITの全貌が見えてきます。
ほな、いきましょう!
よし
Contents
仕事をレイヤーに分ける
例えば、自分はある物を作るのが得意で、それを「インターネットを介して沢山の人に販売したい」と考えたとしましょう。
これを自分一人で実現しようとすると大変です。販売サイトを構築し、集客を行い、そして商品が売れた場合はそれを配送しなければなりません。
しかし、AmazonなどのECサイトを利用すれば、それらの仕事から解放され、自分は商品作りに専念することができます。
また、ECサイトのAmazonは商品の配送をヤマト運輸などの配送業者に委託すれば、サイト運営や集客に専念することができます。
つまり、「仕事を役割ごとに分離し、自分は自分の仕事だけに専念する。そして、自分の仕事が完了すれば、次の職人に仕事を引き渡していく。」ことで効率的に作業ができるでしょう。
この方式はITの分野でも用いられており、これが「レイヤー」の考え方です。
レイヤーとは?
「レイヤー」または「階層」とは、ある物がいく段にも積み重なっていること、またその重なりを意味します。
要するに「仕事を役割ごとに階層化し、次の層の職人に仕事を引き渡していく」その重なりを、レイヤーと表現します。
先述の例では、「物作りのレイヤー」、「販売のレイヤー」、「配送のレイヤー」に分けることで、効率的に商品を顧客へ届けることができました。配送の仕組みがあるから販売が成り立ち、販売の仕組みがあるから物作りが成り立つ。
上の層は下の層に頼りながら成り立っていることから、レイヤーのように表現します。
ソフトウェアのレイヤー
では、ITの分野にはどのようなレイヤーが存在するのか、ソフトウェアを例にとって考えてみましょう。
アプリケーションレイヤー・オペレーティングシステムレイヤー
ソフトウェアには、アプリケーションやオペレーティングシステムなどの種類があることを説明しました。

アプリケーションは、人々の具体的なニーズを満たす仕事に専念し、オペレーティングシステムはハードウェアを動かす仕事に専念しています。
例えば、音楽アプリはユーザーからの選曲指示を受け取ると、その曲をスピーカーというハードウェアから再生してもらうようオペレーティングシステムへ依頼します。つまり、ソフトウェアには、アプリケーションのレイヤーとオペレーティングシステムのレイヤーがあるということがわかります。
ミドルウェアレイヤー
ところで、音を出力するハードウェアには、スマートフォン本体のスピーカーやイヤホンなど複数あるのはご存知でしょう。そのため、どのハードウェアから音を出力するかを判断する必要があります。
冒頭の例を用いると、配送レイヤーのヤマト運輸か佐川急便か、どの業者へ仕事を委託するかを選択しなければなりません。これは、物作りレイヤーと配送レイヤーの間にいる販売レイヤーが、状況に応じて選択しています。つまり、販売レイヤーが配送レイヤーを隠蔽化してくれるおかげで、物作りレイヤーは物作りに専念することができます。
このように、アプリケーションレイヤーとオペレーティングシステムレイヤーの間に位置し、アプリケーションがアクセスしやすいように、オペレーティングシステムの機能を隠蔽化しているソフトウェアを「ミドルウェア」と呼びます。
ミドルウェアのおかげで、アプリケーションはどちらのスピーカーから音を出力するかの判断を必要とせず、「この曲を出力してください」とミドルウェアに頼みさえすれば良いのです。
レイヤー図・スタック図
ここまでを整理すると、アプリケーションは処理の一部をミドルウェアに依頼し、ミドルウェアは処理の一部をオペレーティングシステムへ依頼しています。
つまり、ソフトウェアは、「アプリケーションレイヤー」、「ミドルウェアレイヤー」、「オペレーティングシステム(OS)レイヤー」に大別することができます。これらは「アプリケーション層」、「ミドルウェア層」、「オペレーティングシステム(OS)層」と呼ぶこともあります。
アプリケーションはミドルウェアに頼り、ミドルウェアはオペレーティングシステムに頼っているため、このようなレイヤーで表現します。
これらレイヤーの構造を示した図を「レイヤー図」や「スタック図」と呼びます。
加えて、これらソフトウェアはハードウェアに頼っているため、ソフトウェアレイヤーの下にハードウェアレイヤーも併せて表現することが多くあります。
よし
ミドルウェアとライブラリの違いは、ミドルウェアはソフトウェアの一種であり単独で動作しますが、ライブラリは他のソフトウェアに組み込んで使用し、それ単独で動作させることはできません。
レイヤー化の利点
では、レイヤー化、階層化する利点はどこにあるのでしょうか。レイヤーに分けるということは、視点を変えれば自分の仕事の範囲を限定するということです。そのため、以下のメリットが生まれます。
レイヤー化の利点 生産性の向上
冒頭の例では、販売や配送の業務を物作りの業務から切り離し委託することで、自分は物作りに専念することできました。アプリケーションは、人々の具体的なニーズを満たす仕事に専念し、オペレーティングシステムはハードウェアを動かす仕事に専念しています。
このように、レイヤー化して仕事の範囲を分割することで、より限られた業務に集中することができます。そのため、生産性の向上が期待できます。
レイヤー化の利点 拡張性の向上
スマートフォンは、様々なアプリケーションをインストールして、容易に機能を拡張することができます。これは、アプリケーションレイヤーが他のレイヤーと分離されているからです。
もし、アプリケーションがミドルウェアやオペレーティングシステムと分離されずに一体化されていたと仮定すると、機能拡張するにはその一体化された塊の中に機能を入れ込む必要があります。そうすると、塊の中に含まれるミドルウェアやオペレーティングシステムにも影響を与えてしまうため、それらが正しく動作するか再度検証する必要が生じるでしょう。
しかし、レイヤーを分離することで、他のレイヤーに影響を与えることなくアプリケーションの更新や変更が可能になります。つまり、レイヤー化することでソフトウェア変更時の影響範囲を限定的にすることができます。そのため、拡張性が向上すると言えます。
レイヤー化の利点 保守性の向上
システムに不具合が生じた場合、レイヤー化せずに全てを一体化して管理していては、不具合箇所を特定するのが大変です。整理整頓されず散らかっている引き出しから探し物を見つけるのは困難でしょう。
このように、レイヤー化して仕事の範囲を分割、整理することで、不具合箇所の特定を容易にし、また不具合の影響範囲を限定的にすることができます。つまり、保守性が向上すると言えます。
よし
まとめ
最後に、ここまでの内容を振り返ってまとめたいと思います。
今回、「レイヤーとは?」、「層とは?」について解説して来ました。
ことを説明しました。
また、レイヤー化の利点として、
が見込めることを解説しました。
ということで、今回は以上になります。
よし
「YouTube」で動画解説もしていますので、質問のある方はコメント欄へお気軽にメッセージください!
ほなね!