カテゴリ: TypeScript 更新日: 2025/12/23

TypeScriptでコンストラクタ引数にアクセス修飾子を使う書き方を徹底解説!初心者向けオブジェクト指向入門

TypeScriptでコンストラクタ引数にアクセス修飾子を使う書き方
TypeScriptでコンストラクタ引数にアクセス修飾子を使う書き方

先生と生徒の会話形式で理解しよう

生徒

「先生、TypeScriptでクラスを作るときに、コンストラクタってよく出てきますけど、引数にアクセス修飾子を付ける方法があるって聞いたんです。どういうことですか?」

先生

「いい質問ですね。アクセス修飾子というのは、クラスの外から見える範囲を決めるためのものです。コンストラクタ引数にアクセス修飾子を付けると、わざわざプロパティを定義しなくても、自動的にクラスのプロパティとして扱われるんです。」

生徒

「なるほど!でもプロパティを省略できるってどういうことですか?コードを見せてもらえますか?」

先生

「もちろんです。まずは通常の書き方と比べて、アクセス修飾子を使った書き方を見てみましょう。」

1. コンストラクタとは?

1. コンストラクタとは?
1. コンストラクタとは?

TypeScriptのコンストラクタconstructor)は、クラスからオブジェクトを作るときに最初に呼ばれる特別なメソッドです。オブジェクトとは、プログラムの中でデータと処理をまとめた「入れ物」のようなものです。たとえば「生徒」というオブジェクトを作ると、名前や年齢などの情報を持たせることができます。

通常は、クラスの中でプロパティ(変数のようなもの)を宣言し、それをコンストラクタで初期化します。これが基本の使い方です。

2. アクセス修飾子とは?

2. アクセス修飾子とは?
2. アクセス修飾子とは?

アクセス修飾子は、クラスの外からそのプロパティやメソッドが「見える」かどうかを制御するための仕組みです。TypeScriptでは以下の3種類があります。

  • public:どこからでもアクセスできる。
  • private:クラスの中からしかアクセスできない。
  • protected:クラスとその子クラス(継承したクラス)からアクセスできる。

これをコンストラクタの引数につけることで、宣言と代入を一度に済ませることができます。まるで「名札を書いたら同時に胸につけられる」ようなイメージです。

3. 通常の書き方とアクセス修飾子を使った書き方

3. 通常の書き方とアクセス修飾子を使った書き方
3. 通常の書き方とアクセス修飾子を使った書き方

まずは通常のクラス定義の例を見てみましょう。


class Student {
    name: string;
    age: number;

    constructor(name: string, age: number) {
        this.name = name;
        this.age = age;
    }
}

const s1 = new Student("太郎", 20);
console.log(s1.name); // 太郎

太郎

上の例では、プロパティをあらかじめ宣言してからコンストラクタで代入しています。これでも問題ありませんが、コードが少し長くなってしまいます。

次にアクセス修飾子を使った書き方です。


class Student {
    constructor(public name: string, private age: number) {}
}

const s2 = new Student("花子", 18);
console.log(s2.name); // 花子
// console.log(s2.age); // エラー:privateなので外からは見えない

花子

この書き方では、public nameprivate ageと書くだけで、自動的にプロパティが作られ、値が代入されます。つまり、余分な記述を省いてスッキリ書けるのです。

4. アクセス修飾子を使うメリット

4. アクセス修飾子を使うメリット
4. アクセス修飾子を使うメリット

この書き方を使うことで、以下のようなメリットがあります。

  • コードが短くなるため、見やすく保守しやすい。
  • アクセス修飾子を付けることで、データの公開範囲を明確にできる。
  • コンストラクタで値を受け取るだけで、自動的にプロパティが初期化される。

例えば「生徒の名前は外から見えるけど、年齢は非公開にしたい」という場合も、アクセス修飾子を使えば簡単に実現できます。

5. 具体的な活用例

5. 具体的な活用例
5. 具体的な活用例

最後に、少し実践的な例を見てみましょう。


class Book {
    constructor(
        public title: string,
        private price: number
    ) {}

    getInfo(): string {
        return `本のタイトル: ${this.title}`;
    }

    getPrice(): number {
        return this.price;
    }
}

const book = new Book("TypeScript入門", 2500);
console.log(book.getInfo()); 
// console.log(book.price); // エラー:privateなので直接アクセス不可
console.log(book.getPrice());

本のタイトル: TypeScript入門
2500

この例では、本のタイトルはpublicなので外部から自由に参照できますが、価格はprivateにしてあるため外から直接アクセスできません。代わりに、getPriceメソッドを用意して必要なときだけ取得できるようにしています。これにより、大切な情報を守りつつ、必要な情報だけ公開するという「情報隠蔽」の考え方を自然に学ぶことができます。

まとめ

まとめ
まとめ

コンストラクタ引数とアクセス修飾子で広がるTypeScriptの書き方

TypeScriptでクラスを扱うとき、「プロパティの宣言」と「コンストラクタでの代入」を別々に書くのが当たり前だと思っていた人も多いでしょう。 しかし、アクセス修飾子をコンストラクタ引数に付けるだけで、宣言と代入を同時にまとめられるという便利な書き方があります。 これは特に「プロパティが多いクラス」や「初期化が中心のクラス」を作るときに効果を発揮し、コードが驚くほど読みやすくなります。

また、アクセス修飾子であるpublicprivateprotectedを使うことで、 クラス内部の情報がどこまで外部に公開されるかを細かく調整できるようになります。 外部に見せていい情報はpublic、見せたくない情報はprivate、継承したクラスで使いたい情報はprotectedといった使い分けができ、 TypeScriptのオブジェクト指向がより理解しやすくなるでしょう。 とくに今回の内容は、JavaScriptにはないTypeScriptならではの書き方でもあるため、初心者のうちから習得しておくと、 その後のクラス設計が格段に楽になります。

アクセス修飾子を使った書き方のメリットを振り返る

アクセス修飾子付きコンストラクタの書き方には、見た目のスッキリ感以上に大きな価値があります。 冗長なコードを減らせるだけでなく、プロパティを宣言し忘れるミスを防ぎ、データの意図しない公開を避けることもできます。 初心者にとっては「最初から分かりやすいコードを書く習慣」を自然と身につけるきっかけになり、 中級者・上級者になったときにも役立つ「情報整理の技術」を学ぶことにつながります。 また、TypeScript特有の型チェックとの組み合わせにより、コード上の間違いにすぐ気付くことができる点も魅力です。

アクセス修飾子付きコンストラクタの応用例

ここで、少し応用したサンプルプログラムを紹介します。 「ユーザー情報」と「ログイン機能」を持つ簡易的なクラスを例にしながら、アクセス修飾子がどのように役立つのか確認してみましょう。


class User {
    constructor(
        public username: string,
        private password: string,
        protected role: string
    ) {}

    login(): string {
        return `${this.username}さんがログインしました`;
    }

    getRole(): string {
        return `権限: ${this.role}`;
    }
}

class AdminUser extends User {
    showAdminMessage(): string {
        return `${this.username}は管理者権限を持っています`;
    }
}

const admin = new AdminUser("山田", "secret123", "admin");
console.log(admin.login());
console.log(admin.getRole());
// console.log(admin.password); // privateなので外部アクセス不可
console.log(admin.showAdminMessage());

この例では、ユーザー名はpublicなので外部から自由に読めますが、パスワードはprivateで外部アクセス不可になっています。 ロール(権限)はprotectedのため、継承したクラスから参照できます。 管理者ユーザー(AdminUser)では、roleにアクセスしつつ独自メソッドを追加しています。 このようにアクセス修飾子を上手に組み合わせることで、安全性と柔軟性を両立したクラス設計が可能になります。

TypeScriptを使うメリットを実感しよう

TypeScriptの強力な型システムとアクセス修飾子の組み合わせは、JavaScriptにはない安全性と分かりやすさを生み出します。 初めて学ぶときには少し難しく感じるかもしれませんが、慣れてしまうと「なぜ今まで使わなかったのか」と思えるほど便利な機能です。 特にオブジェクト指向の考え方を身につけたい初心者にとって、コンストラクタとアクセス修飾子は絶好の練習材料になります。

先生と生徒の振り返り会話

生徒

「先生、アクセス修飾子付きコンストラクタって便利ですね。普通の書き方よりずっと読みやすいです!」

先生

「そうでしょう?TypeScriptの強みは型とクラスの仕組みを使って安全に設計できるところなんです。特に今回の書き方は、プロパティを宣言し忘れるミスも減りますしね。」

生徒

「publicやprivateの違いも分かってきました!外から見られたくない情報を守れるのはいいですね。」

先生

「その通りです。情報を必要な範囲だけに公開するのは、プログラミングでもとても大切な考え方なんですよ。」

生徒

「今日のまとめで理解が深まりました!これからクラスを作るときは、アクセス修飾子を積極的に使ってみます!」

この記事を読んだ人からの質問

この記事を読んだ人からの質問
この記事を読んだ人からの質問

プログラミング初心者からのよくある疑問/質問を解決します

TypeScriptのコンストラクタにアクセス修飾子を付けると、なぜプロパティ宣言を省略できるのですか?省略しても問題が起きない仕組みを知りたいです。

TypeScriptでは、コンストラクタ引数にpublic・private・protectedなどのアクセス修飾子を付けると、自動的にクラスのプロパティとして登録される仕様になっています。そのため別途プロパティ宣言を書かなくても、コンストラクタ内の処理だけで初期化が完了します。コード量が減り、初心者でも読みやすく保守しやすい書き方になります。
関連記事:
カテゴリの一覧へ
新着記事
New1
TypeScript
TypeScriptでパスエイリアスを設定する方法!baseUrlとpathsでコードをスッキリ整理
New2
JavaScript
JavaScriptのfor文の書き方を初心者向けにやさしく解説
New3
JavaScript
JavaScriptの関数でよくあるエラーとその解決法まとめ
New4
JavaScript
JavaScriptのイベント処理でよくあるエラーとその対処法
人気記事
No.1
Java&Spring記事人気No1
JavaScript
JavaScriptのインストール方法まとめ!Windows・Mac・Linux別にステップ解説
No.2
Java&Spring記事人気No2
JavaScript
JavaScriptのマウスイベントの使い方(click, mouseoverなど)
No.3
Java&Spring記事人気No3
JavaScript
JavaScriptのtoStringとString関数の違いを初心者向けに解説
No.4
Java&Spring記事人気No4
JavaScript
JavaScriptの純粋関数(pure function)と副作用の違いを理解しよう
No.5
Java&Spring記事人気No5
JavaScript
JavaScriptプログラムの実行方法まとめ!ブラウザ・Node.js・コンソールの使い方
No.6
Java&Spring記事人気No6
TypeScript
TypeScript学習におすすめの無料教材・リファレンスサイト【初心者向け】
No.7
Java&Spring記事人気No7
JavaScript
JavaScriptで文字列をforループで1文字ずつ処理する方法!初心者向け解説
No.8
Java&Spring記事人気No8
TypeScript
TypeScriptの始め方:開発環境の構築手順【初心者向け】