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

TypeScriptでstaticメソッド・プロパティを使う方法を徹底解説!初心者でもわかるクラスの仕組み

TypeScriptでstaticメソッド・プロパティを使う方法
TypeScriptでstaticメソッド・プロパティを使う方法

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

生徒

「先生、TypeScriptでクラスを勉強していたら、staticっていうのが出てきたんですが、これは何ですか?」

先生

「良いところに気がつきましたね。static(スタティック)とは、インスタンスを作らなくてもクラスに直接アクセスできる特別な仕組みなんです。」

生徒

「インスタンスって、クラスから作るオブジェクトのことですよね?それを作らなくても使えるって便利そう!」

先生

「その通りです!それでは、staticメソッドやstaticプロパティの基本から使い方まで、具体例を交えて説明していきましょう。」

1. staticメソッド・プロパティとは?

1. staticメソッド・プロパティとは?
1. staticメソッド・プロパティとは?

TypeScriptのstaticメソッドstaticプロパティは、クラスに直接紐づく機能です。通常のプロパティやメソッドはインスタンスを作らないと使えませんが、staticを付けるとクラス名から直接呼び出すことができます。

「インスタンスを作らなくても呼び出せる」という特徴があるので、共通の値を保持したいときや、便利な計算処理をまとめたいときに役立ちます。

2. staticプロパティの基本的な使い方

2. staticプロパティの基本的な使い方
2. staticプロパティの基本的な使い方

まずは、staticプロパティの例を見てみましょう。staticプロパティは、クラスに直接値を持たせる仕組みです。


class User {
    static defaultRole: string = "guest";
}

console.log(User.defaultRole);

guest

この例では、UserクラスにdefaultRoleというstaticプロパティを定義しています。インスタンスを作らなくても、User.defaultRoleのようにクラス名から直接アクセスできます。

staticを付けない場合はインスタンスを作る必要がありますが、staticを使うと「共通で使う情報」をクラスに直接持たせられるのがポイントです。

3. staticメソッドの基本的な使い方

3. staticメソッドの基本的な使い方
3. staticメソッドの基本的な使い方

次に、staticメソッドを見てみましょう。staticメソッドは、クラス名を使って直接呼び出せる関数のようなものです。


class MathHelper {
    static square(num: number): number {
        return num * num;
    }
}

console.log(MathHelper.square(5));

25

この例では、MathHelperクラスの中にsquareというstaticメソッドを定義しています。インスタンスを作らなくても、MathHelper.square(5)のように直接呼び出せます。

このようにstaticメソッドは、「クラス全体で使える便利機能」をまとめるときに役立ちます。

4. staticとインスタンスの違いを理解しよう

4. staticとインスタンスの違いを理解しよう
4. staticとインスタンスの違いを理解しよう

ここで、staticと通常のプロパティやメソッドの違いを整理してみましょう。

  • 通常のプロパティ・メソッド → インスタンスを作ってから使う
  • staticプロパティ・メソッド → クラスから直接使える

class Person {
    name: string;
    static species: string = "Human";

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

    greet() {
        console.log(`こんにちは、${this.name}です`);
    }

    static info() {
        console.log(`これは${Person.species}クラスです`);
    }
}

const taro = new Person("太郎");
taro.greet();             // インスタンスメソッド
Person.info();            // staticメソッド
console.log(Person.species); // staticプロパティ

こんにちは、太郎です
これはHumanクラスです
Human

staticを使うと、インスタンスに依存しない処理をクラス単位で管理できるようになります。これが大きな違いです。

5. staticの活用例

5. staticの活用例
5. staticの活用例

実際の開発では、staticを使うことでコードをすっきり整理できます。例えば、IDを自動的に振る仕組みを作るときに役立ちます。


class Counter {
    private static count: number = 0;

    static getNext(): number {
        this.count++;
        return this.count;
    }
}

console.log(Counter.getNext()); // 1
console.log(Counter.getNext()); // 2
console.log(Counter.getNext()); // 3

1
2
3

この例では、クラス全体で共通のcountを持ち、getNextメソッドで連番を生成しています。staticを使うことで、インスタンスをいくつ作っても同じカウンターを共有できます。

6. staticを使うときの注意点

6. staticを使うときの注意点
6. staticを使うときの注意点

便利なstaticですが、使いすぎには注意が必要です。なぜなら、すべてをstaticにしてしまうと「クラスを使っている意味」が薄れてしまうからです。staticは「共通で使う情報」や「便利な処理」に限定して使うのがポイントです。

例えば、ユーザーごとの名前や年齢など、個別のデータはインスタンスに持たせるべきです。一方で、全員に共通する「ユーザーのデフォルト権限」や「共通の計算処理」はstaticにするのが適しています。

まとめ

まとめ
まとめ

TypeScriptにおけるstaticメソッドとstaticプロパティについて振り返ると、クラス設計の中で「インスタンスを作らずに使える機能」がどれほど便利で、どのような場面で役立つのかがよく理解できます。staticを使うことで、クラス共通の値や共通処理をひとつの場所にまとめられ、インスタンスごとに異なる必要がない情報をシンプルに表現できるようになります。特に、共通設定や初期値、便利機能をクラス単位で管理したいときにstaticは非常に相性がよく、複数のインスタンスが同じ情報を扱う際にも無駄のない形で扱えます。反対に、インスタンス個別の状態を持たせたいときは通常のプロパティを用いる必要があり、この違いを理解して使い分けることでクラス構造がより明確になります。 さらに、staticの特徴として、クラスそのものに紐づくため「状態が共有される」という性質があります。IDを生成するカウンターや、全体で共通の初期値を持つ設定値、計算処理のツール化など、多くのシーンでstaticは活躍します。逆に使いすぎてしまうと、すべてがクラス単位の値になってしまい、インスタンスごとの差がなくなるため、本来のオブジェクト指向らしさが損なわれます。そのため、staticを使うときは「これは本当に全体で共通すべき情報か」を考えることが大切です。 今回の記事全体で取り上げた例を通して、staticという仕組みがどのようにコードを整理し、再利用性を高め、TypeScriptのクラス設計をよりわかりやすくするかを確認することができました。最後に、staticを使ったサンプルプログラムをもう一度用意しましたので、特徴を意識しながら読み返してみると理解がさらに深まります。

サンプルプログラム:staticを用いた共通管理クラス


class SystemConfig {
    static version: string = "1.0.0";
    static author: string = "管理チーム";
    private static logCount: number = 0;

    static showInfo() {
        console.log("現在のバージョンは" + this.version + "です。");
        console.log("作成者は" + this.author + "です。");
    }

    static addLog(message: string) {
        this.logCount++;
        console.log("[" + this.logCount + "] " + message);
    }
}

SystemConfig.showInfo();
SystemConfig.addLog("システムを起動しました");
SystemConfig.addLog("設定を読み込みました");

この例では、バージョン情報や作成者名のように「全体で共通するデータ」をstaticプロパティとして管理し、共通処理であるログ生成機能もstaticメソッドとしてまとめています。インスタンスを作らなくてもクラス名だけで呼び出せるため、どこからでも統一された方法で情報にアクセスできる点がstaticの大きな利点です。また、ログのカウントのように、クラス全体でひとつだけ保持したい値をstaticとして扱うことで、分散せずに管理できる仕組みも作れます。

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

生徒

「staticって最初は特別な仕組みに見えましたが、クラス全体で使う情報をまとめるのにとても便利なんですね。」

先生

「そうなんです。個別のインスタンスに依存しない処理はstaticにまとめると、とても整理されたクラスになりますよ。」

生徒

「確かに、IDを連番で作る例もすごくわかりやすかったです。あれはstaticじゃないとできない動きですよね?」

先生

「その通りです。staticだからこそ、インスタンスをまたいで値が共有されます。便利ですが、必要な場面に絞って使うことが大切ですね。」

生徒

「はい!これからクラスを書くときは、どの情報が個別で、どれが共通なのか意識してみます。」

関連記事:
カテゴリの一覧へ
新着記事
New1
TypeScript
TypeScript × ES6の連携まとめ!安全でモダンなJavaScript開発の鍵
New2
TypeScript
TypeScriptの型システムとは?静的型付けのメリットと基本
New3
JavaScript
JavaScriptの正規表現で繰り返し指定(* + ? {n,m})を学ぼう
New4
TypeScript
TypeScriptとESNextの連携を完全ガイド!最新機能を使いこなす設定と対応法
人気記事
No.1
Java&Spring記事人気No1
JavaScript
JavaScriptのインストール方法まとめ!Windows・Mac・Linux別にステップ解説
No.2
Java&Spring記事人気No2
JavaScript
JavaScriptの日時操作Tips!実務で役立つテクニック集
No.3
Java&Spring記事人気No3
TypeScript
TypeScriptでESLintとPrettierを導入!コード整形ルールを自動で統一する方法
No.4
Java&Spring記事人気No4
JavaScript
JavaScriptプログラムの実行方法まとめ!ブラウザ・Node.js・コンソールの使い方
No.5
Java&Spring記事人気No5
TypeScript
TypeScriptでコメントを書く正しい書き方と使い分け【初心者向けにやさしく解説】
No.6
Java&Spring記事人気No6
TypeScript
TypeScriptのif文の使い方を完全ガイド!初心者でもわかる条件分岐
No.7
Java&Spring記事人気No7
JavaScript
JavaScriptの正規表現で文字列を置換する方法(replaceメソッド)
No.8
Java&Spring記事人気No8
TypeScript
TypeScriptで非同期イテレーター(for await of)を活用する