このサイトはいろんな人が来てくれる。昔からの友達、仕事でおつきあいした人、後輩、スピリチュアル系、まったく知らない人、Yahoo!やGoogleで迷い込んできた気の毒な人。
IT業界じゃない人も、たくさんいる。そこで、IT業界では知られている考え方だけど、巷の人に役立つんじゃないかな、という考え方を「俺がITで学んだこと」というカテゴリーで書いてみることにした。
第一回目に取り上げるのはレイヤー(層別)。これが最も応用されている分野は通信だ。たとえば、インターネットを支えているTCP/IPというのは、ざっくり次のような層をもつ。リンク(WiFiとかイーサネットとか、物理的なもの), インターネット(IPアドレスの概念とリンクを繋ぐ), トランスポート(普通の通信用、動画用、放送用など), アプリケーション(ドメイン、FTP、HTTP、SMTP, POPなどなどおなじみのもの)
個々の層の解説は話題の目的ではない。大事なことは、「ひとつの層はもうひとつ下の層のことだけを考えればいい」という割り切りである。メールサービスを作る人は、トランスポートではTCPとの会話ルールだけを考えればいい。それが無線LAN(WiFi)なのか、イーサネットなのか、はたまた伝書鳩(RFCというインターネットの規約のひとつに伝書鳩による通信は考察されている。ココを参照のこと)なのかは、一切気にする必要がない。レイヤーの中に押し込められている。
そして、メールを送ると、アプリケーション、トランスポート、インターネット、リンクと層を下がっていく。その度ごとにエンベロープ(封筒)に入れられていく。メールの受け取り側目がけてリンク、インターネット、トランスポート、アプリケーションとレイヤーをあがっていく。レイヤーをひとつ抜けるごとにエンベロープは取り外されていく。最終的には、書いたものとほぼ同じものを受け取る。
複雑な要素を組み合わせる場合、グループ化するという考え方には簡単にたどり着くが、それが上下の層になっていく、という考え方にはなかなか到達しない。レイヤーアーキテクチャーは、グループに関係する問題はグループの中ですべて解決する、という重要なことを教えてくれた。