クリーム色の背景、色付き表示、高コントラスト、大きな文字のほうが読みやすいですか?配色と文字を選ぶと、すべてのページに一度で反映されます。

無料レッスン

デバイスにデータを保存する

このレッスンのあとで: データを端末に保存する方法と、その限界を説明できる。

55分のレッスンコマンド2件モバイルウェブのラボ:ブラウザーで作るレスポンシブでインストールできるウェブアプリ

localStorage とは

localStorage は、ブラウザが端末の中に、名前と値の組を保存する仕組みです。ページを閉じても、再読み込みしても、値が残ります。

このレッスンでは、保存の書き方と、大きさの上限、消えてしまう場合を学びます。

このレッスンのゴール

メモ

データを端末に保存する方法と、その限界を説明できる。

重要な言葉

ことばいみれい
localStorage文字の組を、端末のブラウザの中に保存する仕組み
キーと値名前と、それに結びついた中身の組"habits" と JSON の文字
上限保存できる大きさの限り
オリジンアドレスの、https と名前とポートの組
IndexedDB大きなデータも入る、ブラウザの中のデータベース

学生が入力するセルは、このプレビューでは空白です。

値は文字だけ。JSON にして入れる

localStorage に入れられるのは、文字だけです。setItem で入れ、getItem で読みます。

配列や辞書のようなデータは、JSON.stringify で文字にして入れ、読んだら JSON.parse で戻します。ラボのアプリも、この形です。

学食の注文を保存する

コード: web
const KEY = "orders";

// 保存する。配列を JSON の文字にして入れる
function save(orders) {
  localStorage.setItem(KEY, JSON.stringify(orders));
}

// 読む。何もなければ、空の配列を使う
function load() {
  return JSON.parse(localStorage.getItem(KEY) || "[]");
}

ラボのアプリの保存を探す

ラボのアプリは、習慣の一覧を localStorage に入れています。grep で、その行を探します。

-n は、行の番号を付ける印です。出力は、行の番号とその行の文です。

localStorage を使う行を探す

コマンド
docker exec jupyter grep -n localStorage app/app.js

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

保存できる大きさには上限がある

保存できる大きさには、上限があります。多くのブラウザで、オリジンごとに 5 MB 前後ですが、ブラウザしだいです。

上限を超えて入れようとすると、エラーが起きます。エラーを受け止める try と catch を、書いておきます。

あふれたときのエラーを受ける

コード: web
function trySave(key, text) {
  try {
    localStorage.setItem(key, text);
    return true;
  } catch (error) {
    // 上限を超えると、ここに来る
    console.log("保存できませんでした");
    return false;
  }
}

大きさは、文字の数とは限らない

日本語の文字は、保存の大きさを数えるとき、英数字より大きくなることがあります。UTF-8 では、ひらがなは1文字が3バイトです。

次の Run は、「あ」を UTF-8 の列にして、バイトの数を出します。

「あ」のバイト数を数える

コマンド
docker exec jupyter python3 -c "print(len('\u3042'.encode('utf-8')))"

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

保存したデータが消える場合

場面どうなるか対策
利用者がサイトのデータを消すすべて消える大事な物は、サーバーにも置く
別のブラウザで開く見えないサーバーで共有する
別の端末で開く見えないログインして、サーバーから読む
プライベートな閲覧閉じると消えることが多い消えても困らない作りにする
保存の上限を超えるエラーで保存されないエラーを受けて、知らせる

学生が入力するセルは、このプレビューでは空白です。

ほかの保存場所との使い分け

IndexedDB は、大きなデータや、写真のような中身も入る、ブラウザの中のデータベースです。使い方は、localStorage より複雑です。

パスワードのような秘密は、localStorage に置きません。ページの中のどのスクリプトからも、読めてしまうからです。

よくある間違い

注意

ブラウザに保存すれば、ずっと残ると考える間違いが多いです。利用者が消すと、なくなります。ほかの端末にも、ありません。大事なデータは、サーバーにも置きます。

このラボとソースについて: モバイルウェブのラボ:ブラウザーで作るレスポンシブでインストールできるウェブアプリ

授業で使いますか?このモジュールを学生に割り当てると、教員用ガイド、自動採点つきの課題、学生ごとのラボを使えます。