レイヤー構造の意味を正しく理解する
アーキテクチャとは、ビジネス、産業、社会を複雑なややこしいシステムとして捉え、それに対して人間(社会)がソフトウェアのロジックを基本において立ち向かうためのものだと言った。以下では、どう立ち向かおうとしているのかを順を追って説明する。それは、これまでに幾度も取り上げたレイヤー構造について、その意味を掘り下げて考えることである。と同時に、そうした作業は、これまで我々が慣れ親しんだ見方から出発して、新しい見方へと到達する手助けにもなるはずだ。
ロイ・フィールディングというコンピュータ科学者がいる。皆さんもどこかで目にしたことのあるhttpというプロトコル規格の主著者の一人であるが、そのキャリアの途中で博士号を取得した。2000年のことだ。そのときに提出した博士論文で、ウェブのアーキテクチャについてRESTと呼ばれるスタイルを提案し、API(アプリケーション・プログラミング・インターフェース)の定義を行っている。今日でも引用される論文である。彼がその論文の冒頭で展開しているのが、ソフトウェア・アーキテクチャ論である。
フィールディングは、ソフトウェア・アーキテクチャの真髄は抽象化にある、とする。同時に、抽象化するときの到達点は一つではなく、いくつものレベルがあるのだともいう。抽象化が真髄だということを通じて、フィールディングはソフトウェア・アーキテクチャについてのありがちな理解を否定する。
彼が否定する典型的な例は、ソフトウェア・アーキテクチャをプログラムに書かれた文字列そのもの、つまりソースコードとして見ることである。我々もソフトウェアと言われれば、プログラム言語で書かれたもののことだとイメージしやすい。実際にそういう見方に立ってソフトウェア・アーキテクチャを議論する専門家もいるようだ。これに対してフィールディングは、その専門家たちが見ているのはアーキテクチャと呼ぶべきではなく、ソフトウェアの静的な構造に過ぎない、という。そしてソフトウェア・アーキテクチャは、静的な構造ではなく、ソフトウェアを実際に動かしたときにそれが実行する内容を表現すべきなのだ、と主張する。