一覧へ

localStorage — ブラウザにデータを保存する

localStorageの使い方、sessionStorageとの違い、そして実務で注意すべき点を説明します。

入門
|
5
|
検証済み (2026-07)
進捗0/55 (0%)

localStorage — ブラウザにデータを保存する

このトピックを終えると

localStorageの使い方、限界、そしてどのようなデータを保存すべきかを判断できるようになります。


リロードすると消えるデータ

JavaScript変数は、ページをリロードすると消えます。ユーザーがダークモードを選択したのに、リロードするたびにライトモードに戻ってしまうのは不便です。

localStorageは、ブラウザにデータを永続的に保存します。リロードしても、ブラウザを閉じても残ります。


基本的な使い方

javascript
// 保存
localStorage.setItem("theme", "dark");

// 読み取り
const theme = localStorage.getItem("theme"); // "dark"

// 削除
localStorage.removeItem("theme");

// 全て削除
localStorage.clear();

キーと値のペアで保存します。値は必ず文字列です。


オブジェクトはJSONとして

javascript
const user = { name: "Alice", age: 25 };

// 保存 — オブジェクトを文字列に
localStorage.setItem("user", JSON.stringify(user));

// 読み取り — 文字列をオブジェクトに
const saved = JSON.parse(localStorage.getItem("user"));
console.log(saved.name); // "Alice"

localStorageは文字列のみを保存するため、オブジェクトを保存するにはJSON.stringifyで変換する必要があります。読み出す際には、JSON.parseで復元します。

直接オブジェクトを保存すると:

javascript
localStorage.setItem("user", { name: "Alice" });
localStorage.getItem("user"); // "[object Object]" — 役に立たない文字列

localStorage vs sessionStorage

javascript
// localStorage — 永続保存
localStorage.setItem("key", "value");

// sessionStorage — タブを閉じると削除
sessionStorage.setItem("key", "value");

sessionStorageは、ブラウザのタブを閉じると消えます。同じサイトの別のタブとは共有されません。一時的なデータ(入力中のフォームのバックアップなど)に適しています。


注意点

容量制限: ドメインあたり約5MB。小さな設定値には十分ですが、大量のデータは保存しないでください。

文字列のみ: 数字、ブール値も文字列に変換されます。

javascript
localStorage.setItem("count", 42);
const count = localStorage.getItem("count"); // "42" (文字列)
const num = Number(count); // 42 (数値に変換)

セキュリティ上の機密データを保存しない: localStorageはJavaScriptで誰でも読み取ることができます。パスワード、トークン、個人情報を保存すると、XSS攻撃で盗まれる可能性があります。

同期API: localStorageは同期的に動作します。大きなデータを読み書きすると、メインスレッドをブロックする可能性があります。


実務での活用

適切なデータ:テーマ設定、言語設定、最近の検索語、カート(未ログインのユーザー)、オンボーディングの完了状態。

不適切なデータ:認証トークン、パスワード、ユーザーの個人情報、大量のデータ。


重要なポイント

localStorageは、ブラウザにキーと値の文字列を永続的に保存します。 オブジェクトはJSON.stringify/JSON.parseで変換して扱います。 セキュリティ上の機密データは絶対に保存しないでください。

💬 質問・コメント

0件のコメント

ログインせずに投稿できます。ゲスト投稿は投稿者自身で編集・削除できません。

0/2000

読み込み中...