はじめに
こんにちは!エンジニアを目指して日々勉強している学生です。
HTML/CSSからプログラミングの学習を進めて、その後PythonやJavaなどに触れ始めたとき、私はある巨大な壁にぶち当たりました。それが、 「クラス(Class)」 と 「インスタンス(Instance)」 という概念です。
最初にこの言葉を聞いたとき、私はこう思いました。
「ん? class ってHTMLのコードを書くときに、CSSを当てるために使ったあのグループ名じゃないの…?」と。
インスタンスに関しては「いや、聞いたことはあるけどわからん...」
今回は「教材の説明を読んでも、いまいちピンとこない…!」という、当時の私と同じ画面の前のあなたに向けて、私自身が調べて「あ、そういうことか!」と腑に落ちた納得のプロセスを共有します!
私が陥った最初の罠:HTMLのclassと何が違うの?
まず、私と同じようにWebデザイン(HTML/CSS)を少しでも触ったことがある人が必ず大混乱する名前の罠を解き明かしておきます。
なぜここから説明するかというと、頭の中にある「HTMLの知識」が邪魔をして、プログラミングのクラスへの理解を妨げてしまうことが多いからです。
✕ HTMLの「class」はただの「ラベル(名札)」
HTMLは画面に文字やボタンを配置する言語です。
HTMLの class は、「このボタンは『赤色グループ』ね」と、見た目(CSS)を変えるためにペタッと貼るだけのラベルです。1つのグループを作るイメージですね。
◯ プログラミングの「class」は「仕組みの設計図」
一方で、PythonやJavaといったプログラミング言語では、class は動く仕組みの設計図という意味で使われます。名前は同じ「クラス」ですが、役割は全くの別物です。
まず私は「HTMLのクラスとは別次元の話なんだな」と頭を切り替えました。
そもそも「クラス」「インスタンス」って何のためにある?
では、本題です。特定の言語の命令でもないのに、なぜ世界中のエンジニアが「クラス」「インスタンス」という言葉を共通して使うのでしょうか?その理由は...
同じような仕組みのデータを、何個も効率よく、バグなく量産するためです。
プログラミングでアプリやゲームを作るとき、中身のデータ(名前や数値など)は違うけれど、持っている仕組みやルールは全く同じものをたくさん作りたくなる場面が必ず出てきます。
イメージしやすいように、僕らが普段使っているTwitter(X)のユーザーアカウントを例に、エンジニアが裏側でどうやってプログラムを組んでいるのかを見てみましょう。
Twitterには世界中に何億人もユーザーがいますが、全ユーザーが以下のルールを共通して持っていますよね。
- 持っているデータ(属性): 「名前」「アイコン画像」「自己紹介文」
- できる行動(メソッド): 「ツイートする」「フォローする」
この共通のルールを、新しいユーザーが登録されるたびに、いちから1人ずつプログラミングし直すのは不可能ですし、めちゃくちゃ非効率です。そこで、エンジニアは次のような2つのステップを踏んで効率化しています。
ステップ① まず「設計図」を1つだけ作る = これが「クラス」
「ユーザーアカウントとは、こういうデータ(名前や画像)と、こういう行動(ツイート)を持つものである」という共通のテンプレートを、最初に1つだけ書きます。これが クラス(Class) です。これ自体はまだただの設計図なので、これ単体では画面上で動きません。
ステップ② 設計図から「実物」を人数分生み出す = これが「インスタンス」
作った設計図(クラス)のテンプレートを元に、パソコンのメモリの中に「名前は『太郎』で、自己紹介は〇〇で〜」という具体的なデータを持った本物のユーザーデータを生み出します。この、設計図から生まれた「実際に動くリアルな実物データ」のことを、インスタンス(Instance)と呼びます!
言葉だけだとイメージしにくいかもしれないので、実際のコード(Python)で書くとこんな感じ。
# ① 設計図(クラス)を作る
class TwitterUser:
def __init__(self, name):
self.name = name # 属性(名前)
# ② 設計図から実物(インスタンス)を量産する
user1 = TwitterUser("太郎") # インスタンス1
user2 = TwitterUser("花子") # インスタンス2
私たちが普段使っているアプリのアカウントも、ゲームの敵キャラクター(スライムA、スライムBなど)も、すべてエンジニアが作った1つの設計図(クラス)から量産された実物(インスタンス)だったんです!
まとめ
最後に、今回学んだポイントをもう一度整理します。
-
クラス(Class)
効率よくデータを量産するための共通の設計図。 -
インスタンス(Instance)
設計図を元に、パソコンの中に生み出された具体的な実物。 -
HTMLのclassとの違い
HTMLのclassは「グループのラベル」。プログラミングのclassは「仕組みの設計図」。
最初は「クラス?インスタンス?言葉の響きだけで難しそう…」と思ってしまいますが、「あ、同じような構造のデータをたくさん量産するための効率的な仕組みなんだな」とイメージできたかと思います!
PythonやJavaなどに触れ始めた途端にこの壁にぶつかり、必死に調べてようやく少しずつ理解できるようになってきたばかりです。これからも、自分が勉強していく中で「ここ難しかったな」「悩んだな」というポイントがあれば、皆さんと共有しながら一緒に成長していけたら嬉しいです。
理想のエンジニアになれるよう、私も一歩ずつコツコツと勉強を続けていきます!
最後までお読みいただきありがとうございました!

