インスタンス
この記事の正確性に疑問が呈されています。 |
計算機科学におけるインスタンス(英:instance)とは、抽象的な「型(設計・構造の定義、ルール、クラスなど)」に基づいて、計算機システム上に具現化された「個別の実体」を指す。英語の原義である「実例」「実体」「具体的な事実」に由来する。
インスタンスという言葉は、オブジェクト指向プログラミング、オペレーティングシステム(OS)、データベース、クラウドコンピューティングなどで登場する。いずれも、抽象的な型に基づいて具現化されたものを指す。
この概念は、抽象的な型の設計と、実際に稼働する実体を切り分けて管理・理解するのに役立っている。また、情報処理システムでは、同じ型から、同時に複数の独立したインスタンスを生成し、それぞれ異なる状態を持たせて稼働させることができるという特徴からこの概念が有効である。
オブジェクト指向プログラミングではクラスから生成されたオブジェクトを指す。生成後は個別に存在し、各インスタンスは固有の状態を持つ。
オブジェクト指向プログラミングにおけるインスタンス
[編集]オブジェクト指向言語においては、多くの場合クラスと呼ばれるものを元に作成したオブジェクトの実体を指す。データモデルやオブジェクト指向設計においても用いられる用語である。インスタンスを生成するプロセスをインスタンス化 (instantiation、動詞形instantiate)という。
オブジェクト指向において、クラスあるいは型はオブジェクトの分類(分類概念)や集合に相当している。 あるクラス C のインスタンスとは、C という分類に属する(分類される)オブジェクトのことである。 Smalltalkの影響が強い言語では、クラス自体もまたオブジェクトとして扱うことができる(これをクラス・オブジェクトと言う)。そのような場合は特に、「クラスC のオブジェクト」といった言い方では、「クラスC に属するオブジェクト」の意味か「クラスC そのものを表すオブジェクト」の意味か曖昧になる。この場合、「クラスC のインスタンス」という言い方が利用できる。 クラス・オブジェクトと対比して、「インスタンス・オブジェクト」という言葉も使われている。
オブジェクト指向におけるインスタンスという言葉は、元々Sketchpadという言語の"Master"から"Instance"を生成するという仕組み"instance drawings"が由来となっている用語である。[1]そしてC++と並びオブジェクト指向の概念を築づいたSmalltalkが、この"Master"と"Instance"の関係をクラスから生成されたオブジェクトになぞらえ、クラスから生成されたオブジェクト(インスタンス・オブジェクト)の意味で使い始めインスタンス・オブジェクトを表す言葉として定着させた。[2]
静的型付けのオブジェクト指向言語では珍しいが、動的型付けのオブジェクト指向言語の多くは、メタクラスをサポートし、クラス自体もオブジェクトとして扱うことができる(クラス・オブジェクト)。クラス・オブジェクトは、端的に言えば変数に束縛できるクラスである。クラス・オブジェクト、インスタンス・オブジェクト双方を変数に束縛した際どちらもオブジェクトとして振る舞い見かけ上区別はつかない。例えばクラス・オブジェクト、インスタンス・オブジェクト双方が readFrom: というメソッドを持っていた場合、どちらも #readFrom: メッセージを送ってやるとエラーも起こさずそれぞれのメソッドを実行する。
Objective-CやPythonにおいてはクラス・オブジェクトとインスタンス・オブジェクトの明確な区別が行われている。[3][4]
メタクラスがサポートされているシステムでは、クラス・オブジェクトもまた別のクラス(メタクラス)のインスタンスであるということがありうる。この場合「クラス・オブジェクトはインスタンスではない」とは言えないので、注意されたい。
オペレーティングシステムにおけるインスタンス
[編集]オペレーティングシステムにおいては、実行中のプログラムの実体を「プロセスのインスタンス」と表現することがある。ユーザーがアプリケーションソフトウェアを実行すると、ストレージ等に保存されたプログラムがメモリに読み込まれ、1つのプロセスとして実行される。同じアプリケーションソフトウェアを新しく起動した場合は、同じプログラムから生成された2つ目のインスタンスが起動される。このように、それぞれのアプリケーションソフトウェアがクラッシュしても、他方のインスタンスには影響を与えないよう独立して管理される[5]。各インスタンスを識別するためのインスタンス識別子のことをインスタンスハンドルという。
データベースにおけるインスタンス
[編集]データベース管理システムにおけるインスタンスは、「データベース・インスタンス」とデータモデルにおけるインスタンスという2つの使用がある。
Oracle DatabaseなどのDBMSにおいて、ハードディスク上に静的に保存されたデータファイル群に対して、それを読み書きするためにサーバーのメインメモリ上に確保された共有メモリ領域(SGA)と、稼働しているバックグラウンド・プロセスの集合体を「データベース・インスタンス」と呼ぶ[6]。
また、データベースの構造(スキーマ)に対して、スナップショットという、ある特定の瞬間に実際に格納されている具体的なデータ群のことを、そのスキーマのインスタンスと呼ぶ。例えば、あるRDBSにおいて、データスキーマを決めたとしても、時間が立つと、あらたなデータが追加されてデータベース自体は増大していく。データスキーマは変更がなくとも、データ群は変化している。ある時間の瞬間におけるデータ群は、データスキーマと時間などの特定の条件によって生じたインスタンス(実体)とみなすことができる[7]。
クラウドコンピューティングにおけるインスタンス
[編集]AWS(Amazon Web Services)やGoogle Cloudなどのクラウドコンピューティング環境において、仮想化技術(ハイパーバイザー)によって割り当てられ、稼働している1つ1つの仮想サーバー(仮想マシン)をインスタンスと呼ぶ[8]。
クラウドの世界では、OSの種類や初期設定、インストール済みのソフトウェア群をひとまとめにしたマシンイメージが型の役割を果たす。利用者がこのイメージを選択し、CPUやメモリのサイズを指定して起動ボタンを押すと、クラウド基盤の物理サーバー上にリソースが確保され、インスタンスとして具現化される[8]。
脚注
[編集]- ↑ http://gagne.homedns.org/~tgagne/contrib/EarlyHistoryST.html
- ↑ http://stephane.ducasse.free.fr/FreeBooks/BlueBook/
- ↑ Objective-C Runtime Reference
- ↑ Classes ― Python v2.7.3 documentation
- ↑ “ソフトウェア実現”. kamada.cis.ibaraki.ac.jp. 2026年3月30日閲覧。
- ↑ “Database Concepts”. Oracle Help Center. 2026年3月30日閲覧。
- ↑ “データベーススキーマとは何か - データベーススキーマの説明 - AWS”. Amazon Web Services, Inc.. 2026年3月30日閲覧。
- 1 2 “Amazon EC2とは何か?「インスタンス」など関連用語もまとめて解説【保存版】”. ビジネス+IT. 2026年3月30日閲覧。