プログラミングのクラスをわかりやすく解説【実例コードつき】

Mirai

クラスって言葉は聞いたことあるんですけど、実際に何をするものなのかよくわからないんです。どう理解すればいいんでしょうか?

Zetto

クラスは「データと処理をまとめた設計図」ですね。これを理解するとコードの整理がぐっとラクになりますよ。

この記事では、プログラミングのクラスをわかりやすく解説します。

本記事の専門性
現役エンジニアのZettoです。Java GoldとJava Silverの資格を持ち、フリーランス案件を複数経験しています。

この記事を読めば、クラスとは何か・基本的な書き方・クラスが必要な理由まで、コードの実例とともに一通り理解できます。

記事内のコードサンプルは、ブラウザで動かしやすいJavaScriptで示します。

目次

プログラミングのクラスの基礎知識

クラスの基本概念

クラスという概念は、オブジェクト指向プログラミングの中心にあるものです。

  • クラスとは何か
  • クラスとオブジェクト指向の関係

それぞれ詳しく解説します。

クラスとは何か

クラスとは、「データ」と「処理」をひとまとめにした設計図のことです。

もう少し具体的に言うと、「どんな情報を持つか」と「何ができるか」を定義したテンプレートのようなものですね。

たとえば「犬」を例にすると、こんなイメージです。

  • 名前・犬種・年齢(データ)
  • 鳴く・走る・食べる(処理)

この「犬クラス」という設計図を作っておくと、「ポチ」「シロ」「クロ」のような個別の犬を何体でも作り出せます。

設計図(クラス)を1枚作れば、そこから何十個もの「もの」が量産できる。これがクラスの本質的な役割です。

建物に例えると、クラスが「建築設計図」で、そこから建てられた個々の建物が「オブジェクト(インスタンス)」になります。設計図は1枚ですが、建物は何棟でも建てられますよね。

クラスを使う最大の目的は「コードの再利用」です。同じ構造のデータや処理を何度も書き直す必要がなくなります。

Zetto

「設計図」というたとえがしっくりこない人は、「型紙」に置き換えるとわかりやすいかなと。型紙(クラス)から服(オブジェクト)を何枚でも作れる。クラスを理解する糸口として、このイメージは結構使えます。

クラスとオブジェクト指向の関係

クラスを語るうえで「オブジェクト指向」という言葉が出てくることが多いです。

オブジェクト指向(Object-Oriented Programming)とは、プログラムを「もの(オブジェクト)の集まり」として考える考え方です。

オブジェクト指向には大きく3つの特徴があります。

  • カプセル化:データと処理を1つにまとめて隠す
  • 継承:既存のクラスを引き継いで新しいクラスを作る
  • ポリモーフィズム(多態性):同じ呼び出し方で異なる動作をさせる

クラスは、この「オブジェクト指向」を実現するための仕組みです。

プログラムを「もの」として整理したいとき、その「もの」の設計図となるのがクラスです。オブジェクト指向の考え方は最初は難しく感じますが、クラスの書き方を覚えていくうちに自然と理解が深まっていきますよ。

オブジェクト指向の概念を完全に理解してからクラスを書こうとすると、なかなか先に進めなくなります。まずは「設計図」というイメージで使い始めて、後から理論を補うのが実践的なアプローチです。

Zetto

オブジェクト指向って最初に聞くと難しそうですが、クラスを実際に書き始めると「なるほど、こういうことか」と腑に落ちる瞬間がきます。僕自身、TECH CAMPでRuby on Railsを学んでいたとき、コードを書きながらじわじわ理解できた感覚がありました。

クラスの基本的な書き方

クラスの書き方

ここからは実際にコードを使って、クラスの書き方を確認していきましょう。

  • クラスの宣言とインスタンスの作り方
  • プロパティ(フィールド)の定義方法
  • メソッドの書き方と呼び出し方

ひとつずつ見ていきましょう。

クラスの宣言とインスタンスの作り方

JavaScriptでクラスを宣言する基本的な書き方はこの通りです。

class Dog {
  // ここにデータ(プロパティ)や処理(メソッド)を書く
}

`class` キーワードのあとに、クラスの名前を書きます。

クラス名は慣習として大文字始まり(パスカルケース)で書きます。

次に、このクラスから「インスタンス」を作る方法です。

class Dog {
  // (中身は後で書きます)
}

const pochi = new Dog(); // Dogクラスからインスタンスを作る
const shiro = new Dog(); // 別のインスタンスも作れる

console.log(pochi); // Dog {}
console.log(shiro); // Dog {}

`new クラス名()` と書くことで、クラスの設計図をもとにした「実体(インスタンス)」が作られます。

インスタンスは設計図から生み出された「本物」です。クラスはあくまで型なので、`new` を使って実体を生み出さないと使えません。この違いを押さえておくと、次のステップがスムーズになります。

Zetto

「クラスはケーキの型、インスタンスは実際に焼いたケーキ」というたとえもよく使われます。型は何度でも使い回せて、焼くたびに別のケーキが生まれる。このイメージが一番しっくりくるかなと。

プロパティ(フィールド)の定義方法

プロパティとは、クラスが持つ「データ(変数)」のことです。

クラスでよく使う書き方は `constructor`(コンストラクター)を使う方法です。

class Dog {
  constructor(name, breed, age) {
    this.name = name;   // 名前
    this.breed = breed; // 犬種
    this.age = age;     // 年齢
  }
}

const pochi = new Dog("ポチ", "柴犬", 3);
console.log(pochi.name);  // ポチ
console.log(pochi.breed); // 柴犬
console.log(pochi.age);   // 3

`constructor` はインスタンスを作ったとき(`new` したとき)に自動的に呼ばれる特別なメソッドです。

`this` はその時点のインスタンス自身を指します。`this.name = name` は「このインスタンスの name というプロパティに、引数で受け取った name を入れる」という意味です。

コンストラクターを使うことで、インスタンスを作るときに初期値を渡せます。これにより、同じクラスから異なるデータを持つインスタンスを量産できます。

プロパティの定義に関連して、アクセス修飾子(publicやprivateなど)という概念もあります。JavaなどではJavaScript以上に厳格ですが、まずは「クラスにデータを持たせる」という感覚を掴むことを優先してください。

Javaにおけるアクセス修飾子の詳細は以下の記事で解説しています。Javaを学んでいる方はあわせて読んでみてください。

メソッドの書き方と呼び出し方

メソッドとは、クラスが持つ「処理(関数)」のことです。

class Dog {
  constructor(name, breed, age) {
    this.name = name;
    this.breed = breed;
    this.age = age;
  }

  // メソッドの定義
  bark() {
    console.log(`${this.name}:ワン!`);
  }

  introduce() {
    console.log(`僕は${this.breed}の${this.name}です。${this.age}歳です。`);
  }
}

const pochi = new Dog("ポチ", "柴犬", 3);
pochi.bark();       // ポチ:ワン!
pochi.introduce();  // 僕は柴犬のポチです。3歳です。

メソッドは `クラス名のブロック内` に `メソッド名() { }` の形で書きます。

呼び出すときは `インスタンス名.メソッド名()` です。

クラスにプロパティとメソッドを組み合わせることで、「データ」と「そのデータに対する処理」を1つの設計図に閉じ込められます。これがクラスを使う大きなメリットです。

Zetto

今まで関数を書くときは、データと処理が別々でしたよね。クラスを使うと、関連するデータと処理が1箇所に集約されるから、管理がめっちゃラクになるんですよ。

クラスが必要な理由を実例で確認する

クラスの必要性と実例

クラスの書き方がわかったところで、「そもそもなぜクラスを使うのか」を実例で確認しましょう。

  • クラスなしで書くとコードはどうなるか
  • AIを使ってクラスの理解を深める方法
  • 次に学ぶオブジェクト指向の概念

具体的に解説します。

クラスなしで書くとコードはどうなるか

クラスを使わずに「3匹の犬のデータ」を管理しようとすると、こうなります。

// クラスなし
const dog1Name = "ポチ";
const dog1Breed = "柴犬";
const dog1Age = 3;

const dog2Name = "シロ";
const dog2Breed = "トイプードル";
const dog2Age = 5;

const dog3Name = "クロ";
const dog3Breed = "ラブラドール";
const dog3Age = 2;

function barkDog1() {
  console.log(`${dog1Name}:ワン!`);
}
function barkDog2() {
  console.log(`${dog2Name}:ワン!`);
}
function barkDog3() {
  console.log(`${dog3Name}:ワン!`);
}

barkDog1();
barkDog2();
barkDog3();

3匹でこれだけの量になりました。10匹・100匹になると想像するだけでゾッとしますよね。

同じ構造の変数と関数が繰り返されていて、修正が必要なときに全箇所を変えなければいけません。

クラスを使うとこうなります。

// クラスあり
class Dog {
  constructor(name, breed, age) {
    this.name = name;
    this.breed = breed;
    this.age = age;
  }

  bark() {
    console.log(`${this.name}:ワン!`);
  }
}

const dogs = [
  new Dog("ポチ", "柴犬", 3),
  new Dog("シロ", "トイプードル", 5),
  new Dog("クロ", "ラブラドール", 2),
];

dogs.forEach(dog => dog.bark());

コードが格段にすっきりしました。

クラスを使うことで、同じ構造のデータと処理を1箇所に集約できます。

追加・修正・削除もクラスの定義を1か所変えるだけで済みます。これがクラスを使う最大の実務的なメリットです。

プログラムの規模が大きくなるほど、この差は広がっていきます。最初は「別に変数で管理してもいいか」と感じても、チーム開発や長期運用を想定するとクラス設計の重要性が実感できますよ。

Zetto

クラスなしのコードを見ると「これは確かにきつい」と感じますよね。僕も実務の現場でクラス設計が甘いコードを読んだことがありますが、何をしているのか追うだけで時間がかかります。設計図をちゃんと引いてあるコードは、読んでいてストレスがない。それだけでチームの生産性がかなり変わります。

プログラミングの基本構造についてさらに詳しく知りたい方は、以下の記事も参考になります。

AIを使ってクラスの理解を深める方法

2026年現在、ChatGPTやClaudeなどのAIツールは、プログラミング学習の強い味方になっています。

クラスの理解を深めるためのAI活用法として、おすすめの使い方があります。

  • 「このコードを日本語で説明してください」と聞く
  • 「〇〇クラスをJavaScriptで書く例を見せてください」と例を出してもらう
  • 自分で書いたコードを貼り付けて「改善点を教えてください」と聞く

ただし、初学者のうちは「AIに全部書いてもらう」のは避けた方がいいです。

理由としては、自分でコードを書かずにAIの出力を貼り付けるだけでは、コードの意味が理解できないまま進んでしまうからです。エラーが出たときや面接で「このコードを説明してください」と聞かれたときに詰まってしまいます。

おすすめの使い方は次の通りです。

  • まず自分でコードを書いてみる
  • 動かない・理由がわからない場合にAIに質問する
  • AIの説明を読んで自分の言葉で理解し直す

AIは「解説してくれる先生」として使うのが、基礎力が身につく活用法です。

Zetto

僕は今プライベートでClaudeを使って個人開発をしていますが、AIに指示を出すにも「クラスとは何か」「どう設計するか」が頭に入っていないと、うまく使いこなせないんですよね。基礎を理解している人とそうでない人では、AIの使い方の質に大きな差が出ます。

次に学ぶオブジェクト指向の概念

クラスの基礎が理解できたら、次のステップとして以下の概念を学ぶと理解がぐっと深まります。

  • 継承(Inheritance):既存のクラスを引き継いで新しいクラスを作る仕組み
  • カプセル化(Encapsulation):データを外から直接触れないようにする仕組み
  • ポリモーフィズム(Polymorphism):同じメソッド名で異なる動作をさせる仕組み

これらはオブジェクト指向の3大要素と呼ばれるもので、クラスを土台にして成り立つ概念です。

たとえば継承を使うと、`Dog` クラスを引き継いで `GuideDog`(盲導犬)クラスを作ることができます。「犬としての基本機能はそのままに、盲導犬固有の機能を追加する」といったことが簡単にできます。

一度に全部を覚えようとする必要はないです。まずはクラスの宣言・インスタンスの生成・プロパティとメソッドの使い方を繰り返し練習してから、次のステップに進む流れがおすすめです。

Javaでのクラスの考え方を深掘りしたい方は、以下の記事でJavaのクラスについて詳しく解説しています。

クラスに関するよくある質問

クラスのFAQ

よくある質問と回答をまとめました。

  • クラスとインスタンスの違いがよくわかりません
  • クラスはJava以外の言語でも使いますか
  • クラスを使いこなせるようになるにはどれくらいかかりますか

順番に確認していきましょう。

クラスとインスタンスの違いがよくわかりません

クラスは「設計図」、インスタンスは「設計図から作られた実体」です。

たとえば「スマートフォン」の設計図(クラス)があるとします。その設計図をもとに製造された「iPhoneの実機」がインスタンスにあたります。

class Smartphone {
  constructor(brand, model) {
    this.brand = brand;
    this.model = model;
  }
}

// 同じ設計図から複数のインスタンスを生成
const phone1 = new Smartphone("Apple", "iPhone 16");
const phone2 = new Smartphone("Google", "Pixel 9");

console.log(phone1.brand); // Apple
console.log(phone2.brand); // Google

`phone1` と `phone2` は同じ `Smartphone` クラスから作られましたが、それぞれ独立したデータを持つ別々のインスタンスです。

クラス自体はメモリ上に「設計図」として存在するだけで、実際にデータを持って動くのはインスタンスです。`new` して初めて実体が生まれます。

クラスはJava以外の言語でも使いますか

使います。

クラスはJavaだけの概念ではなく、多くの主要なプログラミング言語で使われています。

  • JavaScript:`class` キーワードでクラスを定義(ES6から対応)
  • Python:`class` キーワードを使う
  • Ruby:`class` キーワードを使う
  • PHP:`class` キーワードを使う
  • Swift・Kotlin・C#など:それぞれ同様の仕組みを持つ

言語によって書き方の細かい違いはありますが、「設計図を作って、インスタンスを生成して、プロパティとメソッドを使う」という基本的な考え方は共通しています。

1つの言語でクラスをしっかり理解しておくと、別の言語を学ぶときに「書き方が少し違うだけで、やっていることは同じだ」と気づきやすくなります。

プログラミング言語の種類や特徴について知りたい方は、以下の記事が参考になります。

クラスを使いこなせるようになるにはどれくらいかかりますか

個人差はありますが、「基本的な使い方に慣れる」のであれば、毎日コードを書いていれば1〜2か月で感覚がつかめてくることが多いです。

ただし「使いこなせる」の定義次第です。

  • クラスを宣言してインスタンスを作れる:1〜2週間
  • 継承・カプセル化も含めて設計できる:1〜3か月
  • 実務レベルの設計(クラス構成・責務分割)ができる:実務経験を積みながら半年〜1年

大事なのは「手を動かす時間」です。

説明を読んで理解した気になっても、自分でコードを書いて動かしてみないと本当の理解にはなりません。「犬クラス」「車クラス」「本クラス」など、身近なものを設計図に見立てて自分で書く練習を繰り返すのが一番の近道です。

クラスの理解を固めて次のステップへ

クラス理解と次ステップ

クラスの基本について解説してきました。

ポイントをまとめます。

  • クラスは「データと処理をまとめた設計図」
  • `new` でインスタンス(実体)を生み出す
  • プロパティでデータを、メソッドで処理を定義する
  • クラスを使うことでコードの再利用性と保守性が上がる

クラスはオブジェクト指向の入口です。最初は難しく感じても、実際にコードを書いて動かすことを繰り返すうちに「なるほど、こういう使い方をするんだ」と腑に落ちる瞬間が必ずきます。

まずは今日中に「Dog」や「Car」「User」など身近なクラスをひとつ自分で書いてみてください。インスタンスを作って、プロパティを表示して、メソッドを呼び出す。それだけで理解がぐっと深まります。

Mirai

クラスって「設計図」なんですね。インスタンスとの違いも、コードを見たらすっと理解できました。

Zetto

その調子です!実際に自分の手でコードを書いてみると、もっと腑に落ちますよ。ぜひやってみてくださいね。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次