カテゴリ: JavaScript 更新日: 2025/07/15

JavaScriptのシンボル(Symbol)とは?ユニークな値を作る仕組みを学ぼう

JavaScriptのシンボル(Symbol)とは?ユニークな値を作る仕組みを学ぼう
JavaScriptのシンボル(Symbol)とは?ユニークな値を作る仕組みを学ぼう

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

生徒

「先生、JavaScriptのシンボルって何ですか?あまり聞いたことがなくてよくわかりません。」

先生

「シンボルはJavaScriptで使える特別なデータ型の一つで、『ユニークな値』を作るために使います。難しく聞こえるかもしれませんが、順を追って説明しますね。」

生徒

「ユニークな値って何ですか?例えばどんな時に使うんですか?」

先生

「それも含めて、これから詳しく解説していきます!」

1. シンボル(Symbol)とは?

1. シンボル(Symbol)とは?
1. シンボル(Symbol)とは?

JavaScriptのシンボル(Symbol)は、ES6(2015年)で追加された新しいデータ型です。普通の文字列や数値とは違い、絶対に他と被らない、ユニーク(唯一無二)の値を作れます。

例えると、「世界に一つだけの秘密の鍵」を作るようなイメージです。この鍵はどんなに同じ名前をつけても別物で、他の鍵と混ざることがありません。

この特別な性質があるため、プログラム内で他の値とぶつからずに特別な識別子(IDのようなもの)を作りたいときに使われます。

2. シンボルの作り方(Symbol()関数)

2. シンボルの作り方(Symbol()関数)
2. シンボルの作り方(Symbol()関数)

シンボルはSymbol()関数を使って作ります。カッコの中には説明用の文字列を入れられますが、これはあくまで目印で、シンボルのユニークさには影響しません。


const sym1 = Symbol("キー1");
const sym2 = Symbol("キー1");

console.log(sym1 === sym2);  // false(別物です)

この例では、sym1sym2は同じ説明を持っていますが、中身は別のユニークな値です。つまり、同じ説明でも別のシンボルとして認識されます。

3. シンボルが使われる場面

3. シンボルが使われる場面
3. シンボルが使われる場面

シンボルは特にオブジェクトのプロパティ(鍵)として使われることが多いです。オブジェクトとはデータをまとめる箱のようなもので、プロパティはその中の「名前と値のセット」です。

普通の文字列を使うと、プロパティの名前が他の部分とかぶることがあります。ですが、シンボルを使うと絶対にかぶらない名前を作れるので、他のコードと衝突しにくくなります。


const id = Symbol("id");

const user = {
  name: "太郎",
  [id]: 12345  // シンボルを使った特別なプロパティ
};

console.log(user.name); // 太郎
console.log(user[id]);   // 12345

このように、シンボルを使うと他の人が作ったプロパティ名と重ならず、安全に特別な情報を管理できます。

4. シンボルの特徴と注意点

4. シンボルの特徴と注意点
4. シンボルの特徴と注意点
  • シンボルはユニークなので、同じ名前でも違うものとして扱われます。
  • 文字列や数値のように表示するとわかりやすくなりますが、シンボル自体は文字列に変換できません。
  • オブジェクトのプロパティに使うと、for...inループなどでは表示されず、隠しプロパティのように扱えます。
  • デバッグ時にはSymbol(description)の形で見えますが、中身は一意な識別子なので同じものはありません。

5. よく使われるシンボルの例(組み込みシンボル)

5. よく使われるシンボルの例(組み込みシンボル)
5. よく使われるシンボルの例(組み込みシンボル)

JavaScriptには、あらかじめ用意された特別なシンボル(組み込みシンボル)があります。たとえばSymbol.iteratorは、オブジェクトを繰り返し処理(ループ)できるようにするためのシンボルです。


const iterableObj = {
  [Symbol.iterator]() {
    let step = 0;
    return {
      next() {
        step++;
        if(step === 1) {
          return { value: "こんにちは", done: false };
        } else if(step === 2) {
          return { value: "世界", done: false };
        }
        return { value: undefined, done: true };
      }
    };
  }
};

for (const word of iterableObj) {
  console.log(word);
}
// 実行結果:
// こんにちは
// 世界

このように、シンボルを使うとJavaScriptの仕組みを拡張できる便利な機能を作れます。

6. まとめないですが最後に

6. まとめないですが最後に
6. まとめないですが最後に

JavaScriptのシンボル(Symbol)は、ユニークな値を作りたいときに便利な新しいデータ型です。主にオブジェクトのプロパティ名として使い、他のプロパティ名と衝突しないようにするために活用します。初心者のうちは少し難しく感じるかもしれませんが、理解するとプログラムの幅が広がります。

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