【オブジェクト指向入門】なぜ class は便利なの?「たい焼きの金型」で理解する設計思想 公開日: 2025年9月27日 Python, Java, JavaScript (ES6以降) … 多くのモダンなプログラミング言語を学んでいると、必ず class というキーワードに出会います。 「なんだか難しそう…」「関数だけで良くない?」と感じて、少し敬遠してしまっている人も多いのではないでしょうか。 今日は、この class という概念を、日本人なら誰もが大好きな「たい焼き」に例えて、その本当の便利さを体験してみましょう。 もし class がなかったら… (一個ずつ手作りするたい焼き) 【実録】変数の海に溺れた、私のRPG開発失敗談 これは私がまだ class の概念を理解せず、独学でRPGゲームを作ろうとしていた頃の話です。 当時の私は、主人公が戦う「スライム」を作ろうとして、こんな風にコードを書き始めました。 slime_a_hp = 10、slime_b_hp = 10 …。 最初は順調でした。しかし、スライムを5匹、10匹と増やそうとした瞬間、私のコードは崩壊しました。「スライムAの攻撃処理」「スライムBの攻撃処理」…似たような処理をひたすらコピー&ペーストし続け、気付けば1000行を超えるスパゲッティコードが完成していました。 そして極めつけに、「スライムのHPを少し増やしたい」と思った時、私は絶望しました。何十箇所にも散らばった変数を、一つ一つ手作業で書き換えなければならなかったからです。結局、そのゲームは完成することなく、私はそっとプロジェクトフォルダを閉じました。 もし当時の私が class を知っていれば、あんな苦労はせずに済んだはずです。 では、class を使わないプログラミング(当時の私が行っていた方法)が、具体的にどういう状態なのか、たい焼き屋さんを例に見てみましょう。 あなたがたい焼き屋さんになったとします。class を使わないプログラミングは、一個一個、たい焼きを手でこねて作っていくようなものです。 # 1個目のたい焼き (データ) taiyaki_1 = { "anko": "つぶあん", "size": "普通" } # 1個目のたい焼きを焼く (処理) def bake_taiyaki_1(): print(f"{taiyaki_1['size']}サイズの、{taiyaki_1['anko']}のたい焼きが焼けました!") # 2個目のたい焼き taiyaki_2 = { "anko": "こしあん", "size": "ミニ" } def bake_taiyaki_2(): print(f"{taiyaki_2['size']}サイズの、{taiyaki_2['anko']}のたい焼きが焼けました!") bake_taiyaki_1() bake_taiyaki_2() これでも、たい焼きは作れます。しかし、100個の注文が来たらどうでしょう? 同じようなコードを100回書かなければならず、もし「焼き時間を変える」という仕様変更があったら、100個すべての関数を修正する必要があります。これは悪夢です。 class の登場:「たい焼きの金型」という発明 ここで、天才的な職人が、「たい焼きの金型」を発明しました。 この「金型」こそが、class です。 # これが「たい焼き」というものの設計図(金型)です class Taiyaki: # 金型からたい焼きを作る(インスタンス化する)ときの初期設定 def __init__(self, anko, size): self.anko = anko # このたい焼きの「あんこ」という属性 self.size = size # このたい焼きの「サイズ」という属性 # この金型から作られたたい焼きなら、誰でも「焼く」ことができる def bake(self): print(f"{self.size}サイズの、{self.anko}のたい焼きが焼けました!") class Taiyaki は、たい焼きそのものではなく、「たい焼きとは、”あんこ”と”サイズ”というデータを持ち、”焼く”という行動ができるものである」という設計図(テンプレート)を定義したものです。 金型から、本物のたい焼き(インスタンス)を作る この「金型 (class)」さえあれば、あとは生地を流し込むだけで、いくらでも本物のたい焼き(インスタンスやオブジェクトと呼ばれます)を、簡単かつ高品質に量産できます。 # 1個目のたい焼きを、金型から作る taiyaki_1 = Taiyaki("つぶあん", "普通") # 2個目のたい焼きを、金型から作る taiyaki_2 = Taiyaki("クリーム", "特大") # それぞれのたい焼きに「焼け!」と命令する taiyaki_1.bake() # → 普通サイズの、つぶあんのたい焼きが焼けました! taiyaki_2.bake() # → 特大サイズの、クリームのたい焼きが焼けました! どうでしょうか?コードが非常にスッキリし、再利用性が高くなりましたよね。 もし「焼き時間を変える」という仕様変更があっても、修正するのは class Taiyaki の中の bake 関数、たった一箇所だけです。 まとめ:class は、高品質な部品を作るための設計図 オブジェクト指向と class の本質。それは、 関連する「データ(属性)」と「処理(メソッド)」を、一つの「部品(オブジェクト)」としてまとめることで、コードの再利用性を高め、メンテナンスを容易にする という、非常にパワフルな考え方です。 車は、「タイヤ」「エンジン」「ハンドル」といった独立した部品から成り立っています。それぞれの部品が、自分の役割に責任を持つことで、巨大で複雑な「車」というシステムが、破綻なく動いています。 class を使いこなせるようになることは、あなたが「ただ動くコードを書く人」から、「再利用可能で、美しい『部品』を設計できるエンジニア」へと進化するための、大きな一歩なのです。 プログラミング学習に必須ツール! 記事で紹介したコードがよく分からなかったり、ご自身のコードについてもっと知りたい場合は、AIコード解説ツールが便利です。コードを貼り付けるだけで、AIが日本語で分かりやすく解説します。 AIコード解説ツールを使ってみる →