localStorage で覚えさせる — 閉じても消えないデータ
ページを再読み込みすると入力が消えてしまう。localStorage を使うと、ブラウザに保存しておけます。仕組みと注意点を、動くもので確かめます。
変数に入れた値は、ページを再読み込みすると消えます。閉じても残しておきたいときに使うのが localStorage です。サーバーもデータベースも要りません。
書き方は2つだけ
script.js
// 保存する(名前と値のセット)
localStorage.setItem("username", "ふじわら");
// 取り出す
const name = localStorage.getItem("username");
// 消す
localStorage.removeItem("username");名前を付けて保存し、その名前で取り出す。それだけです。保存先はその人のブラウザの中なので、他の人には見えませんし、別の端末にも引き継がれません。
名前を入れて保存を押し、プレビューを再実行(実行ボタン)してみてください。入力欄に前回の値が戻ります。
保存できるのは文字列だけ
数値を入れても、取り出すときには文字列になっています。配列やオブジェクトをそのまま入れることもできません。入れるときに JSON.stringify で文字列に変え、出すときに JSON.parse で戻します。
配列を保存する
const list = ["りんご", "みかん"];
// 保存:文字列に変換する
localStorage.setItem("list", JSON.stringify(list));
// 取り出し:元に戻す
const restored = JSON.parse(localStorage.getItem("list"));何も保存されていないとき getItem は null を返します。null を JSON.parse に渡すとエラーになるので、値があるか確認してから使ってください。
注意すること
- パスワードや個人情報は保存しない … 同じ端末を使う他の人から読めてしまう
- 容量は5MB程度が上限 … 大量のデータには向かない
- 別の端末・別のブラウザには引き継がれない … 同期はされない
- プライベートモードでは消える、または使えないことがある
特に1つ目は大事です。localStorage はブラウザの開発者ツールから誰でも中身を見られます。秘密にしたい情報を置く場所ではありません。
向いている使い道
- 入力の下書きを一時保存する
- 表示設定(並び順、開閉状態)を覚えておく
- 「はじめての方へ」の案内を一度見たら出さない
どれも「消えても致命的ではないもの」です。この基準で選ぶと、使いどころを間違えません。
sessionStorage との違い
書き方がまったく同じ sessionStorage というものもあります。違いは寿命で、こちらはタブを閉じると消えます。一時的な保持でよければ、こちらのほうが安全です。