TypeScriptでコンストラクタ(constructor)の使い方を徹底解説!初心者でもわかるクラスの初期化
生徒
「TypeScriptでクラスを作ったときに、自動的に最初の値を入れる仕組みってありますか?」
先生
「はい、それはconstructor(コンストラクタ)という特別なメソッドを使うことで実現できます。クラスが作られるときに一度だけ呼ばれる仕組みです。」
生徒
「コンストラクタって、どんなときに使うんですか?」
先生
「例えば、人の名前や年齢を登録するときに、最初の値をセットしたいときに便利です。それでは具体的な使い方を見ていきましょう。」
1. コンストラクタ(constructor)とは?
TypeScriptのコンストラクタ(constructor)とは、クラスからオブジェクトを生成するときに、自動的に実行される特別なメソッドのことです。プログラミングの世界では「初期化処理」と呼ばれることもあります。初期化処理とは、クラスを使う前に必要な値を用意したり、最初の設定を行う仕組みのことです。
例えば、人間を表すクラスを作ったときに「名前」や「年齢」が空っぽだと困りますよね。そのときにコンストラクタを使って、最初から名前や年齢を設定できるようにするのです。
2. コンストラクタの基本構文
コンストラクタはconstructorという名前で定義します。普通のメソッド(関数)とは違って、クラスの中に一つだけ定義できる特別なメソッドです。基本の書き方は次のようになります。
class Person {
name: string;
age: number;
constructor(name: string, age: number) {
this.name = name;
this.age = age;
}
}
const user = new Person("太郎", 20);
console.log(user.name); // 太郎
console.log(user.age); // 20
太郎
20
この例では、Personクラスを作り、constructorで「名前」と「年齢」を受け取って、オブジェクトに設定しています。this.nameやthis.ageのthisは、「このクラスから作られたオブジェクト自身」を表すキーワードです。
3. コンストラクタを使わない場合との違い
コンストラクタを使わない場合、クラスを作ったあとに一つずつ値を設定する必要があります。例えば次のようになります。
class Animal {
type: string;
sound: string;
}
const dog = new Animal();
dog.type = "犬";
dog.sound = "ワンワン";
console.log(dog.type); // 犬
console.log(dog.sound); // ワンワン
犬
ワンワン
これでも問題なく動きますが、値を忘れてしまう可能性があるので、必ず初期化したい値はコンストラクタで設定するのが安全です。
4. コンストラクタの省略記法(アクセス修飾子)
TypeScriptでは、もっと短く書くための省略記法も用意されています。constructorの引数にpublicやprivateといったアクセス修飾子を付けると、自動的にプロパティ(変数)が作られます。
class Car {
constructor(public brand: string, public year: number) {}
}
const car = new Car("トヨタ", 2024);
console.log(car.brand); // トヨタ
console.log(car.year); // 2024
トヨタ
2024
このように書くと、this.brand = brand;のような代入処理を省略できるので、コードがすっきりします。
5. コンストラクタの応用:デフォルト値を設定する
コンストラクタには、引数にデフォルト値(初期値)を指定することもできます。これにより、引数を省略したときでも安全に使えます。
class Book {
constructor(public title: string = "未定", public price: number = 0) {}
}
const defaultBook = new Book();
console.log(defaultBook.title); // 未定
console.log(defaultBook.price); // 0
const realBook = new Book("JavaScript入門", 1500);
console.log(realBook.title); // JavaScript入門
console.log(realBook.price); // 1500
未定
0
JavaScript入門
1500
このようにデフォルト値を付けると、値を渡してもしなくてもオブジェクトが正しく作られます。初心者がよくある「値が入っていなくてエラーになる」という問題を防ぐことができます。
6. コンストラクタのイメージ
日常生活で例えると、コンストラクタは「新しいノートを買ったときに、最初に名前を書いておく欄」のようなものです。ノートを買うときに最初から自分の名前を書いておけば、誰のノートかわからなくなる心配がありません。同じように、プログラムでも最初から必要な情報を登録しておくと、あとで安心して使えるのです。
まとめ
TypeScriptでコンストラクタを使うと、クラスを作った瞬間に必要な値を初期化できるため、オブジェクトの扱いがとても安定し、予期せぬエラーを防ぎやすくなります。クラスの設計では「どのような情報を最初に持たせるべきか」を考えることが重要で、特に名前や年齢、商品名や価格などのように、使う前に必ず設定しておきたい値がある場合は、コンストラクタで統一的に管理するとコードの見通しがよくなります。また、クラスの使い方が複雑になるほど初期化が大切になり、特に初心者は「気づいたら値が入っていない」というミスが起こりやすいため、コンストラクタを正しく理解しておくことは非常に大きな意味があります。
さらに、TypeScriptにはアクセス修飾子をつけるだけでプロパティを自動生成できる便利な省略記法があり、クラスを書き慣れていくほどコードの可読性を高める助けになります。これによって、余計な代入処理を書かずに済み、シンプルな構造でオブジェクトを管理できるようになります。特に大規模なプロジェクトでは「読みやすくて整ったコード」が求められるため、初期化処理を省略記法で書くメリットは大きいと言えます。
デフォルト値を設定できるのもコンストラクタの大きな特徴で、省略された引数に自動的に値を入れられるため、初心者でも安心してクラスを扱うことができます。特に、未入力の値が原因でエラーが発生するケースはよくあるため、最初からデフォルト値を用意しておけば、使う側が深く考えなくても安全にインスタンスを生成できます。この考え方は他のプログラミング言語でも広く使われており、TypeScriptでも同じ感覚で設計できるのが魅力のひとつです。
また、今回の記事を通して、コンストラクタが単に値を入れるためだけの機能ではなく、「クラスという仕組みを安心して使うための最低限の準備を整える場所」であることも理解できたはずです。クラスを使ったプログラミングは、最初は難しく見えるかもしれませんが、コンストラクタの役割を理解しておくことで、クラスの動きが一気に分かりやすくなります。たとえば、クラスの内部で使うデータを必ず揃えておくことによって、外から呼び出す側は安心してメソッドを使えるようになりますし、どこで値が設定されているのかもひと目で判断できます。
実際の現場でも、コンストラクタはほぼ必ず登場します。ユーザーを表すクラス、商品を表すクラス、設定情報をまとめたクラスなど、アプリケーションが大きくなるほど初期化処理が必要な場面は増えていきます。そのため、コンストラクタへの理解はTypeScriptの学習を進めるうえで避けて通れない重要なポイントです。一度仕組みを理解してしまえば、その後に続く継承やアクセサ、メソッドの応用なども理解しやすくなるため、今回の知識は今後の学習の土台となってくれます。
コンストラクタの総復習サンプル
class UserProfile {
constructor(
public name: string = "未登録",
public age: number = 0,
public country: string = "不明"
) {}
introduce() {
console.log(`名前: ${this.name}、年齢: ${this.age}、国籍: ${this.country}`);
}
}
const guest = new UserProfile();
guest.introduce();
const member = new UserProfile("太郎", 28, "日本");
member.introduce();
生徒
「コンストラクタがどうして必要なのか、すごく理解しやすかったです。最初に値を入れる場所がはっきりすると、クラスの動きも見えやすくなりますね。」
先生
「そのとおりです。初期化がしっかりしていると、あとからコードを読む人も安心できますし、エラーを減らすことにもつながります。」
生徒
「アクセス修飾子でプロパティを自動生成できるのは便利ですね。省略記法のおかげでクラスがスッキリ書けそうです。」
先生
「そうですね。短く書けるだけでなく、読みやすさも向上します。TypeScriptらしい書き方として覚えておくと役に立ちますよ。」
生徒
「今日学んだデフォルト値の設定も便利でした。これなら必要な情報が抜けていても安心して使えます。」
先生
「その調子です。クラスの設計は慣れればどんどん上達しますので、ぜひ色々なクラスを作って試してみてくださいね。」