weakmapとは?初心者向けガイド:特徴と使い方を徹底解説共起語・同意語・対義語も併せて解説!

  • このエントリーをはてなブックマークに追加
weakmapとは?初心者向けガイド:特徴と使い方を徹底解説共起語・同意語・対義語も併せて解説!
この記事を書いた人

高岡智則

年齢:33歳 性別:男性 職業:Webディレクター(兼ライティング・SNS運用担当) 居住地:東京都杉並区・永福町の1LDKマンション 出身地:神奈川県川崎市 身長:176cm 体系:細身〜普通(最近ちょっとお腹が気になる) 血液型:A型 誕生日:1992年11月20日 最終学歴:明治大学・情報コミュニケーション学部卒 通勤:京王井の頭線で渋谷まで(通勤20分) 家族構成:一人暮らし、実家には両親と2歳下の妹 恋愛事情:独身。彼女は2年いない(本人は「忙しいだけ」と言い張る)


weakmapとは?

weakmap は JavaScript のデータ構造のひとつで、キーにはオブジェクトを、値には任意のデータを対応づけて管理します。覚えておきたい点は「弱い参照」をキーが持つことで、対象のオブジェクトがどこからも参照されなくなると、メモリが解放されやすくなるという性質です。

つまり WeakMap は、オブジェクトと値を結びつける「箱」のようなものですが、箱の中身をずっと大切に保つのではなく、オブジェクトが不要になれば自動的に整理してくれる役割を持っているのです。これにより、長く動き続けるアプリケーションでもメモリの無駄遣いを抑えることができます。

強い参照と弱い参照の違い

私たちが普段使う普通の Map はキーの参照が強いため、キーとなるオブジェクトがどこかで参照されていればガベージコレクションの対象になりにくくなります。一方、WeakMap のキーは「オブジェクトのみ」で、外部からそのオブジェクトへの参照がなくなると WeakMap からも解放される可能性が高くなります。これが WeakMap の最大の特徴です。

WeakMap の使いどころ

ライフサイクルを管理したい場面に向いています。例えば、UI の各要素に対して追加情報を一時的に持たせたいとき、要素が削除されたらその情報も自動的に解放されるようにしたいときなどが挙げられます。

ただし、WeakMap は キーの列挙ができない点や、サイズを取得するメソッドがない点など、Map と比べて使い勝手が劣る場面もあります。情報を一覧で表示したい場合や、長期的にデータを蓄積したい場合には Map の方が適していることが多いです。

基本的な使い方

WeakMap を使うにはまずインスタンスを作ります。次にオブジェクトをキーとして値を設定します。

let wm = new WeakMap();

let obj = {};

wm.set(obj, 'value');

このようにして obj に対して value というデータを関連付けることができます。重要なのはキーには必ずオブジェクトを使うことです。文字列や数値をキーとして使うことはできません。

値を取り出すには wm.get(obj); のようにします。もし obj が WeakMap に登録されていなければ undefined が返ります。さらに wm.has(obj); で登録の有無を確認できます。削除する場合は wm.delete(obj); を使います。

Map との違いを表で比較

項目 Map WeakMap
キーの型 任意の値 オブジェクトのみ
参照の扱い 強い参照 弱い参照
ガベージコレクション時の動作 オブジェクトが解放されても参照が残ることがある オブジェクトが解放されると参照は自動的に消える
主な用途 データの結びつきやキャッシュなど幅広い用途 一時的なデータの関連付けやオブジェクトのライフサイクル追跡

よくある誤解と注意点

WeakMap は強くオブジェクトを保持しないため、オブジェクトを確実に覚えておきたい場合には適していません。キーの列挙ができない点も覚えておきましょう。つまり、WeakMap には現在登録されているキーのリストを取得する方法は基本的には用意されていません。その代わり、対象オブジェクトが不要になったときに自動的に解放される性質を活かす使い方が有効です。

まとめ

本記事では weakmap の基本を中学生にも分かる言葉で解説しました。弱い参照という概念を理解すると、オブジェクトのライフサイクルに応じたデータ管理ができるようになります。キーにはオブジェクトのみを使い、ガベージコレクションを意識した使い方を心がけましょう。Map との違いを頭の中で整理しておくと、適切な場面で適切なデータ構造を選べるようになります。


weakmapの同意語

WeakMap
JavaScriptの組み込みコレクションの1つ。キーはオブジェクトのみを参照として保持し、値は任意の型。キーへの参照は弱く保持されるため、該当オブジェクトが他に参照されなくなるとエントリが自動的に削除される可能性がある。
Weak Map
WeakMap のスペース入り表記。場面に応じてこの表記が使われることがある。
弱い参照マップ
WeakMap の日本語訳表現のひとつ。キーはオブジェクトのみを参照し、エントリは弱い参照で管理されるマップ。
弱参照マップ
WeakMap の直訳寄りの日本語表現。キーはオブジェクトのみで、ガベージコレクタによりエントリが削除され得るマップ。
ウェークマップ
WeakMap のカタカナ表記。技術記事などで見られる表記。
WeakMap(ウェークマップ)
WeakMap の正式名とカタカナ表記を併記した表現。どちらの表現も同じ機能を指す。
弱い参照付きマップ
キーの参照が弱く保持され、不要になればエントリが削除され得るマップという意合いの表現。
弱い参照を用いるマップ
キーを弱い参照として保持することで、対象オブジェクトが不要になった際にエントリが解放されやすいマップという説明表現。

weakmapの対義語・反対語

通常のMap
WeakMapの対義語として最も近い概念。Mapはキーとしてオブジェクトだけでなく任意の値を許容し、キーを強い参照で保持します。そのためガベージコレクションの対象となるかどうかは参照の寿命に強く左右され、WeakMapのような自動的な解放は基本的に発生しません。
強参照マップ
WeakMapと対になる考え方のマップ。キーを強い参照で保持するため、対応するオブジェクトが不要になっても自動的には解放されません。通常はMapと同様の利用を想定します。
従来のオブジェクト連想配列
文字列キーを用いる典型的な連想配列。オブジェクトをキーとして使うことはできず、キーは常に強い参照で保持されるためガベージコレクションの影響を受けにくい一方で、WeakMapのような弱参照の性質はありません。
WeakSet(補足的な対比)
WeakMapの“弱参照”の考え方を拡張した概念として、弱い参照を持つ集合の例。WeakSetは値を弱い参照で保持するため、参照がなくなると要素が自動的に解放されやすい点が特徴です。WeakMapの対極にある弱参照の扱いを知る入門として有用です。

weakmapの共起語

WeakMap
WeakMap は、キーにオブジェクトを使い、対応する値を格納するコレクションです。エントリはガーベージコレクションの対象となる可能性があり、オブジェクトが生きている限りだけ値を保持します。
Mapとの違い
Map は任意の値をキーにできる強参照のコレクションですが、WeakMap はキーがオブジェクトのみで、エントリは列挙できない点が大きな違いです。
キーはオブジェクトのみ
WeakMap のキーは原則としてオブジェクトでなければなりません。プリミティブ値は使えません。
列挙不可
WeakMap には for...of や keys/values/entries のような列挙機能がなく、全エントリを走査することはできません。
基本メソッド: set/get/has/delete
エントリの追加は set、取得は get、存在確認は has、削除は delete が使われます。
ガベージコレクション
キーとなるオブジェクトへの他の参照がなくなると、そのエントリは GC の対象となり得ます。結果として自動的に解放されやすいです。
メモリリーク対策
WeakMap を適切に使えば、長期的な参照を避けてメモリ使用量を抑える助けになります。
DOMノードの紐付け
DOM 要素などのオブジェクトと補助データを結びつけるのに便利で、要素のライフサイクルとともに管理できます。
プライベートデータの格納
公開 API とは別に、オブジェクトに関連するデータを隠して管理する手段として用いられることがあります。
イベントリスナーの管理
特定の要素とイベントハンドラの対応を WeakMap で管理する設計が取られることがあります。
TypeScript対応
TypeScript でも問題なく利用可能で、型システムと組み合わせて安全に使えます。
ES6/ES2015導入
WeakMap は ES2015 で標準化されたコレクションのひとつです。
キャッシュ用途
短期間の紐付けやデータのキャッシュとして用いられることがありますが、全てのケースに適しているわけではありません。
プリミティブキー不可
文字列や数値などのプリミティブ値をキーにできない点には注意が必要です。
弱参照
WeakMap のエントリはキーの参照が弱い(強参照ではない)ため、ガーベージコレクションの影響を受けやすいです。
サイズ情報がない
WeakMap にはサイズを取得するプロパティはなく、現在のエントリ数を知ることはできません。

weakmapの関連用語

WeakMap
WeakMap はキーをオブジェクトのみとし、値を対応付けて管理するコレクションです。キーへの参照が弱く、ガベージコレクションの対象になりやすい点が特徴です。
Map
Map はキーと値をペアで管理する一般的なコレクションです。WeakMap とは異なり、キーは強参照を受け、プリミティブなキーも使えます。
WeakSet
WeakSet はオブジェクトだけを要素として持つ集合で、要素への参照は弱く管理されます。WeakMap の考え方を集合に適用したものです。
WeakRef
WeakRef はオブジェクトへの弱い参照を作る仕組みです。参照が弱いため、ガベージコレクションの対象になりやすく、キャッシュ的な使い方で活用します。
ガベージコレクション
JavaScript エンジンが不要になったオブジェクトを自動的に回収してメモリを解放する仕組みです。WeakMap のエントリは GC の対象になることがあります。
参照の種類
強参照と弱参照の違いを理解すると、WeakMap の挙動がわかりやすくなります。弱参照は GC の対象になりやすい特性があります。
キーはオブジェクトのみ
WeakMap のキーにはオブジェクトしか使えません。プリミティブ値は許されません。
プライベートデータ
WeakMap を使うと、クラスのインスタンスに対する秘密データを外部から見えないように紐付けられ、プライベート感を演出できます。
get / set / has / delete
WeakMap の要素を操作する基本メソッドです。キーはオブジェクト、対応する値を取得・設定・存在確認・削除します。
互換性
主要なブラウザと Node.js で広くサポートされていますが、古い環境では未対応のこともあるため環境確認が大切です。
実装上の注意
WeakMap は弱参照の性質上、キーオブジェクトが他の参照から解放されるとエントリが自動的に削除されます。サイズの取得はできません。
使い方パターン
クラスのプライベートデータの管理、メタデータの紐付け、イベントリスナの管理など、外部から直接アクセスさせたくないデータの保持に適しています。

weakmapのおすすめ参考サイト


インターネット・コンピュータの人気記事

awstatsとは?初心者でもわかる使い方と基本解説共起語・同意語・対義語も併せて解説!
14215viws
bing・とは?初心者のための基本ガイド:検索エンジンの仕組みと使い方共起語・同意語・対義語も併せて解説!
2332viws
着信転送とは?初心者向けガイドで分かる使い方と設定のコツ共起語・同意語・対義語も併せて解説!
1041viws
充電アダプターとは何かを徹底解説|初心者でも分かる基本と選び方のコツ共起語・同意語・対義語も併せて解説!
872viws
リマインドメールとは?初心者にもわかる基本ガイドと使い方のコツ共起語・同意語・対義語も併せて解説!
750viws
com端子・とは?初心者にも分かる基礎ガイド|シリアルポートの使い方と歴史を解説共起語・同意語・対義語も併せて解説!
719viws
pinロックとは?初心者が知っておくべき基本と使い方ガイド共起語・同意語・対義語も併せて解説!
629viws
16進数カラーコード・とは?初心者でもつまずかない基礎と使い方ガイド共起語・同意語・対義語も併せて解説!
607viws
7zファイル・とは?初心者でもわかる使い方と特徴を解説共起語・同意語・対義語も併せて解説!
563viws
asp・とは?初心者向けに徹底解説する基本と使い方ガイド共起語・同意語・対義語も併せて解説!
521viws
差し込み印刷・とは?初心者でもすぐわかる使い方と仕組みガイド共起語・同意語・対義語も併せて解説!
513viws
ローカルポート・とは?初心者にも分かる基本と使い方ガイド共起語・同意語・対義語も併せて解説!
484viws
全角文字とは?初心者向け解説|全角と半角の違いをやさしく学ぶ共起語・同意語・対義語も併せて解説!
470viws
ワンタイムコード・とは?初心者でも分かる基本と使い方ガイド共起語・同意語・対義語も併せて解説!
464viws
none とは?初心者にもやさしく解説する意味と使い方ガイド共起語・同意語・対義語も併せて解説!
452viws
select句・とは?初心者でも分かるSQLの基本と使い方共起語・同意語・対義語も併せて解説!
376viws
csvダウンロードとは?初心者が今すぐ使える基本ガイド共起語・同意語・対義語も併せて解説!
374viws
wi-fiとは?初心者向けにわかりやすく解説する基礎ガイド共起語・同意語・対義語も併せて解説!
363viws
ダイレクトチャットとは?初心者向けガイドで使い方と注意点を徹底解説共起語・同意語・対義語も併せて解説!
340viws
sha256とは?初心者が知るべき暗号ハッシュの基礎と使い道共起語・同意語・対義語も併せて解説!
307viws

新着記事

インターネット・コンピュータの関連記事