開発

Alan Kayの真意、オブジェクト指向は「クラス」ではない

Alan Kayが提唱したオブジェクト指向の本質は「メッセージング」にある。現代のプログラミング実務ではクラス階層に矮小化されがちな概念を、Kay自身の言葉とインターネットとの類推で再検討する議論が注目を集めている。

10分で読める SINGULISM 編集チームが確認・編集

Alan Kayの真意、オブジェクト指向は「クラス」ではない
Photo by Zulfugar Karimov on Unsplash

「オブジェクト指向プログラミング」という用語が独り歩きし、本来の意図とは異なる意味で定着している——。Lobstersで2026年7月24日に公開された、blog.mempko.com by mempkoによる記事「A Love Letter to Object Orientation」が、プログラミングコミュニティに一石を投じている。著者が開発を進める「Abject」プロジェクトの説明を試みる中で浮かび上がったのは、Alan Kayが本来定義したオブジェクト指向の核心が、クラスや継承ではなく「メッセージング」にあるという事実である。

誤解されたオブジェクト指向

著者はAbjectプロジェクトの趣旨を説明する際、「インターネットはオブジェクト指向システムである」と述べたところ、多くのプログラマーから理解を得られなかったと振り返る。その原因は、現代のプログラミング教育がオブジェクト指向を「クラスとクラス階層」として教えている点にあると指摘する。

この認識のずれは深刻だ。インターネットは単一の巨大なクラス階層ではなく、独立したシステム同士が合意された境界を越えてメッセージを送信するシステムである。この性質こそ、Kayが本来意図したオブジェクト指向の本質に他ならない。

Kayが定義した「メッセージング」の核心

「オブジェクト指向プログラミング」という用語を造語したのはAlan Kayである。彼がSmalltalkを開発する以前、大学院在籍時にこの概念を着想した。Kayに影響を与えたのは、Ivan SutherlandのSketchpad——最も初期のオブジェクト指向的アイデアを含むシステムのひとつ——と、彼自身の生物学のバックグラウンドだった。

Kayが重視したのはメッセージングである。Smalltalkのカーネルは、オブジェクト間でメッセージを送信する仕組みと、レイトバインディングを実現する優れたメタシステムで構成されていた。レイトバインディングとは、メッセージの意味を受信時点で決定することを指し、事前にクラス階層に決定を固定化しない設計思想である。メタシステムとは、システムが自身のルールを推論し、安全に拡張できる層を意味する。

Kayは1998年、Squeak開発メーリングリストに以下のメッセージを投稿している。この内容は、現在もなお多くのプログラマーが見過ごしている重要な示唆を含む。

Just a gentle reminder that I took some pains at the last OOPSLA to try to remind everyone that Smalltalk is not only NOT its syntax or the class library, it is not even about classes. I’m sorry that I long ago coined the term “objects” for this topic because it gets many people to focus on the lesser idea.

The big idea is “messaging” — that is what the kernal of Smalltalk/Squeak is all about (and it’s something that was never quite completed in our Xerox PARC phase). The Japanese have a small word — ma — for “that which is in between” — perhaps the nearest English equivalent is “interstitial”.

The key in making great and growable systems is much more to design how its modules communicate rather than what their internal properties and behaviors should be. Think of the internet — to live, it (a) has to allow many different kinds of ideas and realizations that are beyond any single standard and (b) to allow varying degrees of safe interoperability between these ideas.

If you focus on just messaging — and realize that a good metasystem can late bind the various 2nd level architectures used in objects — then much of the language-, UI-, and OS based discussions on this thread are really quite moot.

Kayは「オブジェクト」という用語を自ら造語したことを後悔していると述べ、多くの人が本質ではないアイデアに焦点を当ててしまったと指摘する。真のアイデアは「メッセージング」であり、それがSmalltalk/Squeakのカーネルの全てだと断言する。

「間」としてのメッセージング

Kayは日本語の「間(ま)」という概念を引用し、モジュール間の通信を設計することの重要性を説く。優れた拡張可能なシステムを作る鍵は、モジュールの内部プロパティや振る舞いをどう定義するかではなく、モジュールがどのように通信するかを設計することにある。

この視点は、現代のマイクロサービスアーキテクチャやAPI設計の議論と深く共鳴する。内部実装の詳細に注目するのではなく、インターフェースとプロトコル——すなわち「間」——に注力する姿勢は、Kayが1998年にすでに示していたのである。

現代のプログラミング実務との乖離

Kayの定義からすれば、多くの言語で実装されている「オブジェクト指向」は、その本質を矮小化したものだと言える。JavaやC++のような静的型付け言語におけるクラス階層の設計は、Kayが重視したレイトバインディングよりも、コンパイル時の静的な決定を優先する。この傾向は、メッセージングの動的な性質と相容れない部分がある。

一方で、Erlangのアクターモデルや、Goのインターフェース設計、Rustのトレイト機構などは、Kayの理想に近いアプローチを採用していると評価できる。これらの言語は、メッセージパッシングや振る舞いの抽象化に重点を置き、クラス階層に依存しない設計を促進する。

インターネットが示す実装例

Kayがインターネットを例に挙げたのは偶然ではない。HTTPプロトコル、RESTful API、JSONによるデータ交換——これらの技術は、まさに「独立したシステム同士がメッセージを送信する」というKayのビジョンを体現している。それぞれのサーバーやサービスは内部実装を隠蔽し、定義されたインターフェースを通じて通信する。

この観点から見ると、マイクロサービスアーキテクチャの台頭は、Kayの理想への回帰であると解釈できる。サービス間の通信プロトコルを慎重に設計し、各サービスが独立して進化できるようにする考え方は、KayがSmalltalkで追求したメッセージングの哲学と一致する。

編集部の見解

短期的には、Kayのメッセージが再び注目されることで、オブジェクト指向の教育や言語設計の議論に変化が生じる可能性がある。特に静的型付け言語でクラス階層の複雑さに悩む開発者にとって、メッセージングに焦点を当てた設計への再考は、コードの保守性向上につながると見られる。また、マイクロサービスや分散システムの設計において、内部実装よりもインターフェース設計を重視する潮流は、Kayの思想を追認する形でさらに加速するだろう。 長期的視点では、Kayが提唱した「優れたメタシステムによるレイトバインディング」の実現が、次世代のプログラミングパラダイムの方向性を示唆している。AIによるコード生成や動的最適化が進む中、コンパイル時の決定ではなく実行時の柔軟性を重視する設計思想は、より重要性を増すと評価できる。ただし、静的解析の利点や型安全性を放棄するわけにはいかず、両者のバランスをどう取るかが課題として残る。 編集部としては、Kayが「オブジェクト」という用語の造語を後悔したという逸話は、技術用語が独り歩きする危険性を如実に示していると考える。

参考

よくある質問

Alan Kayが定義したオブジェクト指向の本質は何か
Alan Kayは、オブジェクト指向の核心を「メッセージング」にあると定義している。クラスや継承、構文といった要素は本質ではなく、オブジェクト間でメッセージを送信し、受信時にその意味を決定するレイトバインディングこそが重要だと述べている。
現代のプログラミング言語はKayの定義を正しく実装しているか
多くの静的型付け言語(Java、C++など)はクラス階層に重点を置いており、Kayが意図した動的なメッセージングの精神とは乖離がある。一方、ErlangのアクターモデルやGoのインターフェース設計は、メッセージパッシングを重視しており、Kayの理想により近いと評価できる。
インターネットがオブジェクト指向システムであるとはどういう意味か
インターネットは単一のクラス階層ではなく、独立したシステム(サーバー、サービス)が合意されたプロトコル(HTTP、REST)を通じてメッセージを交換するシステムである。この性質は、KayがSmalltalkで追求した「オブジェクト間のメッセージング」と本質的に同じ構造を持つ。
出典: Lobsters

コメント

← トップへ戻る