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

TypeScriptでgetter・setterを理解しよう!初心者でもわかるプロパティの使い方

TypeScriptでgetter・setterを定義する構文と使い方
TypeScriptでgetter・setterを定義する構文と使い方

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

生徒

「先生、TypeScriptでクラスの値を直接触らずに読み書きできる方法ってありますか?」

先生

「いい質問ですね。TypeScriptではgettersetterを使えば、値を安全に読み書きできますよ。」

生徒

「それは便利そうですね!どうやって使うんですか?」

先生

「それでは、基本的な構文と使い方を順番に見ていきましょう。」

1. getter・setterとは?

1. getter・setterとは?
1. getter・setterとは?

TypeScriptにおけるgetter(ゲッター)は「値を取り出すための仕組み」、setter(セッター)は「値を設定するための仕組み」です。
普通のプロパティ(変数のようなもの)に直接アクセスするのではなく、クラスの外側から安全に値を読み書きできるようにするために使われます。
たとえば「体重をマイナスの数値では保存させない」など、制御を加えたいときに便利です。

日常の例で言うと、テレビのリモコンがgetter・setterに似ています。本体の回路(クラスの内部)を直接触らなくても、リモコン(getter・setter)を通してチャンネルを変えたり音量を調整したりできるイメージです。

2. getterの定義方法と使い方

2. getterの定義方法と使い方
2. getterの定義方法と使い方

まずはgetterから見てみましょう。getterはgetキーワードを使って定義します。外部から値を読み取るときに、自動的にこのメソッドが呼ばれます。


class Person {
    private _name: string;

    constructor(name: string) {
        this._name = name;
    }

    // getter
    get name(): string {
        return this._name;
    }
}

const p = new Person("太郎");
console.log(p.name); // getterが呼ばれる

太郎

このように、外部からはp.nameと普通のプロパティにアクセスするように書きますが、実際には内部でget name()が呼び出されています。

3. setterの定義方法と使い方

3. setterの定義方法と使い方
3. setterの定義方法と使い方

setterは値を設定するときに使います。setキーワードを使って定義します。引数を1つ取り、その値をクラスの内部に保存したり、チェックしたりすることができます。


class Person {
    private _age: number = 0;

    // getter
    get age(): number {
        return this._age;
    }

    // setter
    set age(value: number) {
        if (value < 0) {
            console.log("年齢はマイナスにはできません。");
            return;
        }
        this._age = value;
    }
}

const p = new Person();
p.age = 25; // setterが呼ばれる
console.log(p.age);

p.age = -5; // バリデーションにより拒否される

25
年齢はマイナスにはできません。

このように、setterを使えば値を設定する際にチェック処理を入れることができます。これにより不正な値が入るのを防げます。

4. getter・setterを組み合わせた実用例

4. getter・setterを組み合わせた実用例
4. getter・setterを組み合わせた実用例

getterとsetterを組み合わせると、より実用的なクラスを作ることができます。例えば、銀行口座クラスを考えてみましょう。


class BankAccount {
    private _balance: number = 0;

    get balance(): number {
        return this._balance;
    }

    set balance(amount: number) {
        if (amount < 0) {
            console.log("残高をマイナスに設定することはできません。");
            return;
        }
        this._balance = amount;
    }
}

const account = new BankAccount();
account.balance = 1000; // setterで残高を設定
console.log(account.balance); // getterで残高を取得

account.balance = -500; // エラーメッセージが出力される

1000
残高をマイナスに設定することはできません。

このように、getterとsetterを利用することで、クラスのデータを保護しつつ、直感的に読み書きができる仕組みを作れます。

5. getter・setterを使うメリット

5. getter・setterを使うメリット
5. getter・setterを使うメリット

TypeScriptでgetter・setterを使うと、次のようなメリットがあります。

  • クラス内部のデータを安全に管理できる
  • データを読み書きする際に条件や制御を加えられる
  • 外部からは通常のプロパティのように見えるため、使いやすさが向上する

これは、プログラムの信頼性を高め、エラーを防ぐのにとても役立ちます。

まとめ

まとめ
まとめ

getter・setterを使った安全で柔軟なプロパティ管理の振り返り

TypeScriptでのgetter・setterは、クラス内部のデータを安全に扱うための大切な仕組みであり、値にアクセスする際の窓口の役割を果たします。 記事の中で学んできたように、getterは「値を読み取るための自動的な入口」、setterは「値を書き込む際の制御ポイント」として機能します。 これにより、クラスの外からプロパティを直接変更するのではなく、安全に制御しながら必要なデータだけを扱うことができます。 とくに設定時にバリデーション(チェック処理)を挟める点は、現実のアプリケーションでは非常に重要です。 たとえば年齢や金額のように、負の値が入ってはいけないケースでは、setterでチェックするだけで安全性が大きく向上します。 また、getter・setterは通常のプロパティと同じ書き方で使えるため、外部からの操作は直感的でわかりやすく、コードの見通しも改善されます。 さらに、クラスの内部構造を変更したとしても、getter・setter側で吸収できるため、外部に影響が出にくく保守性が高まるという利点もあります。 情報をそのまま露出させず、必要なタイミングで必要な形に加工して使える仕組みは、アプリケーションの質を高める非常に大きな要素です。 特にオブジェクト指向の学習において、プロパティの保護と安全な参照方法という概念は欠かせない基礎となるため、強く押さえておきたいポイントです。

getter・setterを応用したサンプルコード

以下では、複数の条件を組み合わせ、より実用的なデータ管理を行うサンプルとして「商品クラス」を取り上げます。 価格、在庫、商品名を管理し、getter・setterを使って安全に値を扱う例です。


class Product {
    private _name: string = "";
    private _price: number = 0;
    private _stock: number = 0;

    get name(): string {
        return this._name;
    }
    set name(value: string) {
        if (value.trim() === "") {
            console.log("商品名は空にできません。");
            return;
        }
        this._name = value;
    }

    get price(): number {
        return this._price;
    }
    set price(value: number) {
        if (value < 0) {
            console.log("価格はマイナスにできません。");
            return;
        }
        this._price = value;
    }

    get stock(): number {
        return this._stock;
    }
    set stock(value: number) {
        if (value < 0) {
            console.log("在庫数はマイナスにはできません。");
            return;
        }
        this._stock = value;
    }
}

const item = new Product();
item.name = "ノートパソコン";
item.price = 120000;
item.stock = 15;

console.log(item.name);
console.log(item.price);
console.log(item.stock);

item.price = -500; // エラー
item.stock = -1;   // エラー

このサンプルでは、3つのプロパティに対してそれぞれgetterとsetterを用意し、値を書き込むときに必要なチェックを行っています。 価格や在庫数のように間違った値が入ると致命的な結果を招く恐れがあるケースでは、getter・setterによるコントロールは非常に有効です。 また、外からはitem.priceのように通常のプロパティ操作と同じ感覚で扱えるため、可読性も損なわれません。 この「安全性」と「直感的な使いやすさ」の両立が、getter・setterの大きな魅力と言えます。

getter・setterで広がるクラス設計の応用範囲

getter・setterは、単純な値管理だけでなく、さまざまな場面で利用できます。 例えば、値に応じてメッセージを返す加工、内部の計算値を外部にわかりやすく変換するためのプロパティ、ログ出力を挟む仕組みなど、多彩な用途で役立ちます。 また、値の出し入れのルールを統一することで、大規模プロジェクトでも安全にデータを扱える基盤が整い、開発チーム全体の作業効率も向上します。 TypeScriptの型の力と組み合わせることで、より信頼性の高いシステム構築にもつながるため、今後の学習において確実に身につけておきたい要素です。

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

生徒

「getterとsetterって、ただの読み書きじゃなくて安全にデータを扱う仕組みだったんですね!」

先生

「そうなんです。制御を加えたい場面では特に役立ちますよ。値のチェックや加工も簡単にできます。」

生徒

「普通のプロパティみたいに使えるのに、裏ではちゃんとメソッドが動いているのが便利ですね。」

先生

「そのおかげで柔軟なクラス設計がしやすいんです。内部構造を隠しつつ、安全な操作方法を提供できますからね。」

生徒

「これなら大きいアプリでも間違いが減りそうです!」

先生

「まさにその通り。getter・setterはクラス設計の基礎としてとても重要なので、今後の学習でもどんどん使ってみてください。」

関連記事:
カテゴリの一覧へ
新着記事
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の始め方:開発環境の構築手順【初心者向け】