JavaScript・入力と保存

ブラウザに覚えさせる:localStorage

ページを閉じても消えないメモ帳がブラウザには付いています。localStorageで値を保存・読み出し・削除する書き方と、「文字しか入らない」「入れてはいけないもの」の注意までまとめました。

変数に入れた値は、ページを再読みこみすると消えてしまいます。閉じても消えないメモ帳がブラウザには用意されていて、それがlocalStorageです。ダークモードの設定やゲームのハイスコアなど、「覚えておいてほしいもの」に使います。

覚えるのは3つの操作だけ

localStorage.setItem("name", "しまちゃん");   // 保存する
const name = localStorage.getItem("name");    // 取り出す
localStorage.removeItem("name");              // 消す
書き方やること
setItem("キー", "値")ラベルを付けて保存する
getItem("キー")ラベルで探して取り出す
removeItem("キー")そのラベルのものを消す
clear()このサイトの保存を全部消す

"name"の部分はキー(ラベル)です。オブジェクトのキーと同じで、自分で自由に決められます。

保存されているか確かめる

保存がなかった場合、getItemnull(何もない、の印)を返します。取り出したあとに確認するのが定番の形です。

const saved = localStorage.getItem("name");

if (saved === null) {
  console.log("まだ保存されていません");
} else {
  console.log("前回の名前は " + saved);
}

ページを開いたときにこれを実行すると、前回の続きから始められるページが作れます。

文字しか入らない

localStorageに入るのは文字だけです。ここがいちばんのつまずきどころ。

localStorage.setItem("score", 100);
const score = localStorage.getItem("score");
console.log(score + 1);   // 「1001」になってしまう

数として使いたいときは、取り出したあとにNumber()で戻します。

const score = Number(localStorage.getItem("score"));
console.log(score + 1);   // 101

配列やオブジェクトを保存したいときは、いったん文字に変換します。

const likes = ["おえかき", "ラーメン"];

localStorage.setItem("likes", JSON.stringify(likes));      // 文字にして保存
const saved = JSON.parse(localStorage.getItem("likes"));   // 元の形に戻す

console.log(saved[0]);
  • JSON.stringify()——配列やオブジェクトを文字にする
  • JSON.parse()——文字を元の形に戻す

対になっているので、「保存するときstringify、読むときparse」とセットで覚えてください。

使いどころの例

// ダークモードの設定を覚えておく
localStorage.setItem("theme", "dark");

// 次に開いたとき、前回の設定を復元する
if (localStorage.getItem("theme") === "dark") {
  document.body.classList.add("dark");
}

このパターンだけでも、「毎回設定し直さなくていいページ」が作れます。

CSSダークモードに対応しようダークモードの見た目そのものの作り方は、CSSコースのこの回へ

保存されたものを目で見る

ブラウザの開発者ツールで中身を確認できます。ChromeならApplication(アプリケーション)タブ → 左メニューのLocal Storage。キーと値が表の形で並び、その場で削除もできます。

「保存できているつもりで、実は書けていない」を確かめるときに便利です。

べんりワザ開発者ツールの使い方入門開発者ツールの開き方から知りたい方はこちら

入れてはいけないもの・注意点

そのほか、性質として知っておくとよいことがあります。

  • ブラウザごと・端末ごとに別物。ChromeとSafariでは共有されないし、スマホとパソコンでも別
  • サイトごとに分かれている。他のサイトからは読めない
  • 保存できる容量は5MB程度。文字のメモなら十分だが、画像を詰めこむ用途には向かない
  • ブラウザの「閲覧データを削除」でまとめて消える。消えても困らないものだけを入れる

このレッスンのまとめ

  1. setItemで保存、getItemで取り出し、removeItemで削除——閉じても消えない
  2. 入るのは文字だけ。数はNumber()、配列やオブジェクトはJSON.stringify()JSON.parse()
  3. 中身は誰でも読めるので、パスワードや個人情報は保存しない

やってみよう

今回学んだ「localStorage」は、しまちゃんのページには使いません(覚えておく必要のある設定がないためです)。ダークモードの設定を記憶するページや、途中まで書いた内容を残すページのための道具です。覚えておいて、必要になったら使いましょう。

よくある質問

localStorageに保存したデータはいつ消えますか?
自分でremoveItemやclearを実行するか、ブラウザの閲覧データ削除で消すまで残ります。ページを閉じてもパソコンを再起動しても消えません。
localStorageに数値やオブジェクトは保存できますか?
保存できるのは文字だけです。数値は取り出したあとNumber()で戻し、オブジェクトや配列はJSON.stringify()で文字にしてから保存します。
localStorageとsessionStorageの違いは何ですか?
sessionStorageはそのタブを閉じると消えます。長く覚えておきたいものはlocalStorage、その場かぎりの一時保存ならsessionStorageです。