0Pricing
JavaScript Academy · レッスン

WeakMapとWeakSet — シンプルなプライバシー保護とキャッシュ

WeakMapとWeakSetの基本を学びます。オブジェクト専用のキー、sizeや反復がないこと、プライバシー用ヘルパー、自動的に整理される小さなキャッシュを扱います。

「WeakMapとWeakSet — シンプルなプライバシー保護とキャッシュ」はCoddyKit上の無料JavaScript Academyレッスンです。 これはレッスン2/3です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはJavaScript Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 JavaScript Academyコースには全3レッスンが含まれています。

なぜWeakコレクションなのか

目標:ガベージコレクションを妨げずに、オブジェクトへメタデータを追加します。

  • WeakMap:オブジェクト → 値
  • WeakSet:オブジェクトのメンバーシップ
  • sizeも反復処理もありません
  • プライバシー保護とキャッシュに適しています
WeakMapとWeakSet — シンプルなプライバシー保護とキャッシュ — イラスト1

WeakMapの基本

WeakMapのキーに指定できるのはオブジェクトだけです。set/get/has/deleteをサポートしますが、反復処理やsizeはありません。

// WeakMap: keys must be objects
const wm = new WeakMap();

const user = { name: "Ayla" };
wm.set(user, { visits: 1 });

console.log("has user?", wm.has(user));
console.log("get meta:", wm.get(user));

// Note: no wm.size, no wm.keys() — not iterable
WeakMapとWeakSet — シンプルなプライバシー保護とキャッシュ — イラスト2

WeakSetの基本

WeakSetはオブジェクトを保持します。重複はなく、反復処理もsizeプロパティもありません。

// WeakSet: store objects without duplicates
const ws = new WeakSet();

const obj1 = {};
const obj2 = {};

ws.add(obj1);
ws.add(obj2);
ws.add(obj1); // duplicate ignored

console.log("has obj1?", ws.has(obj1));

// Note: no ws.size and no iteration
WeakMapとWeakSet — シンプルなプライバシー保護とキャッシュ — イラスト3

WeakMapによるプライバシー保護

WeakMapを使うと、APIオブジェクトに非公開データを関連付けられます。APIオブジェクトがなくなると、そのデータも回収できるようになります。

// Privacy helper: store private data outside the object
const _priv = new WeakMap();

function makeCounter() {
  const api = {};
  _priv.set(api, { value: 0 });

  api.inc = function () {
    const box = _priv.get(api);
    box.value = box.value + 1;
    console.log("value", box.value);
  };

  // No public field exposes value directly
  return api;
}

const c = makeCounter();
c.inc();
c.inc();
// console.log(c.value) -> undefined (nothing public)
WeakMapとWeakSet — シンプルなプライバシー保護とキャッシュ — イラスト4

オブジェクトごとのキャッシュ

オブジェクトごとのキャッシュを作成できます。キーとなるオブジェクトが参照されなくなると、エントリも消えます。

// Cache computed data per object without leaks
const cache = new WeakMap();

function computeLength(doc) {
  // Return cached result if present
  if (cache.has(doc)) {
    return cache.get(doc);
  }
  // Fake "expensive" compute
  const result = (doc.text || "").length;
  cache.set(doc, result);
  return result;
}

const d1 = { text: "hello" };
const d2 = { text: "world!" };

console.log("len d1:", computeLength(d1));
console.log("len d1 cached:", computeLength(d1));
console.log("len d2:", computeLength(d2));

// If d1/d2 become unreachable, their cache entries can disappear automatically
WeakMapとWeakSet — シンプルなプライバシー保護とキャッシュ — イラスト5

制限と使わない場合

覚えておきましょう:

  • WeakMap/WeakSetでは反復処理もsizeも使えません。
  • キーにはオブジェクトを指定する必要があります。
  • キーの一覧表示や項目数のカウントが必要なら、Map/Setを使います。
WeakMapとWeakSet — シンプルなプライバシー保護とキャッシュ — イラスト6

WeakMapとMapのクイズ

簡単な確認:WeakMapの使用例です。

WeakMapとWeakSet — シンプルなプライバシー保護とキャッシュ — イラスト7

まとめ

まとめ:オブジェクトと値の関連付けによるプライバシー保護やキャッシュにはWeakMapを使い、メモリリークを起こさずにオブジェクトのメンバーシップを管理するにはWeakSetを使います。キーはオブジェクトだけで、反復処理やsizeは使えない点に注意してください。

WeakMapとWeakSet — シンプルなプライバシー保護とキャッシュ — イラスト8

よくある質問

「WeakMapとWeakSet — シンプルなプライバシー保護とキャッシュ」レッスンは無料ですか?

はい。「WeakMapとWeakSet — シンプルなプライバシー保護とキャッシュ」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、JavaScript Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 JavaScript Academyコースには全3レッスンが含まれています。

「WeakMapとWeakSet — シンプルなプライバシー保護とキャッシュ」で何を学びますか?

WeakMapとWeakSetの基本を学びます。オブジェクト専用のキー、sizeや反復がないこと、プライバシー用ヘルパー、自動的に整理される小さなキャッシュを扱います。 ブラウザで直接実行するハンズオンコードでJavaScript Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

JavaScript Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのJavaScript Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/3です。

「WeakMapとWeakSet — シンプルなプライバシー保護とキャッシュ」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このJavaScript Academyレッスンでコードを書いて実行できますか?

はい。すべてのJavaScript Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. MapとSetの基本
  2. WeakMapとWeakSet — シンプルなプライバシー保護とキャッシュ
  3. 反復処理のパターン
← JavaScript Academyに戻る