Web Storage の試作プログラム
Contents
Web Storageを用いれば、Webを閉じた後も、各種データを保存しておけます。
例えば、Webアプリの「学習システム」を考えた場合、Web Storageに「学習履歴」を保存することが可能になります。
今回、「学習システム」を念頭に置いた試作プログラム(プロトタイプ)を作りました。
Web Storage
SessionStorageとLocalStorage
Web Storageには、「SessionStorage」と「LocalStorage」の2種類があります。
SessionStorageは、セッションが終わる(Webを閉じる)と、その内容が消えてしまいます。
LocalStorageは、セッションが終わっても、その内容はローカルディスク上に残ります。
- SessionStorage: セッションが終わると内容が消える
- LocalStorage: セッションが終わっても内容は残る
今回は、「LocalStorage」を利用します。
デバッガー
Web Storageは、Webブラウザーのデバッガーで、編集できます。

Web Storageはデータを、「Key」と「Value」のペアとして保存します。
Fig.1では、保存データは以下のペアとなっています。
- Key : ”lessonData123”
- Value: 97
(注)Chromeのデバッガー起動方法
- Windowsの場合、「F12」キーを押す
- Macの場合、「option」+「command」+「i」キーを同時に押す
プロトタイプ
プロトタイプの動き(仕様)
「学習システム」を単純化した仕様です。
- レッスン開始: 「Lesson Start」ボタンをクリック
- ・・・データ保存: Web Storageに新規データ { Key:”lessonData123”, Value: 0 } を保存
- レッスン: 「Lesson!」ボタンでレッスンの成績(ダミーのスコア)を表示
- ・・・データ更新: Web Storageのデータを更新
- レッスン終了: 一旦、ブラウザを閉じる
- レッスン再開: 「Lesson Start」ボタンをクリック
- ・・・前回のスコアが残っていることを確認
- ・・・データ消去: 「Remove Web Storage Data」ボタンをクリック
プロトタイプの主な機能
- Web Storageに新規データを保存する
- Web Storageにあるデータを消去する
- Web Storageにあるデータを更新する
プログラム1
<!DOCTYPE html>
<html>
<head>
<meta charset="uft-8">
<title>Web Storage Prototype</title>
<script>
const KEY = "lessonData123"; // Web Storage Key
var score; //
var output_element; // <output>
function pseudoLesson() {
score = Math.floor(Math.random()*101); // 0 <= score <= 100
output_element.innerHTML = score;
writeWebStorageData();
}
function createWebStorageData() {
score = 0;
localStorage.setItem(KEY, score); // setItem
}
function readWebStorageData() {
score = localStorage.getItem(KEY); // getItem
if (!score) {
createWebStorageData();
}
output_element.innerHTML = score;
}
function writeWebStorageData() {
localStorage.setItem(KEY, score); // setItem
}
function removeWebStorageData() {
localStorage.removeItem(KEY); // removeItem
output_element.innerHTML = 0;
}
window.onload = function() {
output_element = document.getElementsByTagName("output")[0];
if (!localStorage) {
output_element.innerHTML = "Local Storage can't use."
return;
}
readWebStorageData();
}
</script>
</head>
<body>
<input type="button" value="Lesson!" onclick="pseudoLesson()">
<input type="button" value="Remove Web Storage Data" onclick="removeWebStorageData()"><br>
<output></output>
</body>
</html>
プログラム1の説明
body部
<body>
<input type="button" value="Lesson!" onclick="pseudoLesson()">
<input type="button" value="Remove Web Storage Data" onclick="removeWebStorageData()">
<output></output>
</body>
プログラム1 の 50行目、「Lesson!」ボタンをクリックすると、pseudoLesson()関数が起動
51行目、「Remove Web Storage Data」ボタンをクリックすると、removeWebStorageData()関数が起動
グローバル変数
const KEY = "lessonData123"; // Web Storage Key
var score; //
var output_element; // <output>
7行目は、Web Storage にデータを保存する際の「Key」の名前です。
疑似レッスン
function pseudoLesson() {
score = Math.floor(Math.random()*101); // 0 <= score <= 100
output_element.innerHTML = score;
writeWebStorageData();
}
pseudoLesson()関数で、疑似的にレッスンし、その得点を計算します。
12行目は、ランダム関数を用いて、0点から100点までの得点を計算し、変数「score」に保存します。
13行目は、<output>要素にscoreを表示しています。
14行目で、Web Storageにscoreを保存します。
Web Storage を操作する各種関数
function createWebStorageData() {
score = 0;
localStorage.setItem(KEY, score); // setItem
}
function readWebStorageData() {
score = localStorage.getItem(KEY); // getItem
if (!score) {
createWebStorageData();
}
output_element.innerHTML = score;
}
function writeWebStorageData() {
localStorage.setItem(KEY, score); // setItem
}
function removeWebStorageData() {
localStorage.removeItem(KEY); // removeItem
output_element.innerHTML = 0;
}
createWebStorageData()関数
まず、変数「score」に「0」を代入します。
次に、KEY とscoreをペアとして、Web Storage(Local Storage)に保存します。
readWebStorageData()関数
まず、Web Storage(Local Storage)に「KEY」があるかを調べます。
そして、
- 「KEY」がなければ、createWebStorageData()関数を起動
- 「KEY」があれば、変数「score」に値を読出し、<output>要素にscoreを表示
writeWebStorageData()関数
Web Storage(Local Storage)に、「KEY」と「score」のペアを上書きします。
removeWebStorageData()関数
Web Storage(Local Storage)から、「KEY」を消去します。
オンロード
window.onload = function() {
output_element = document.getElementsByTagName("output")[0];
if (!localStorage) {
output_element.innerHTML = "Local Storage can't use."
return;
}
readWebStorageData();
}
オンロード後、Web Storage(Local Storage)が使用可能かチェックします。
使用可能であれば、readWebStorageData()関数を起動します。
プロトタイプの動作確認
まず、上の「Lesson Start」ボタンをクリックし、プロトタイプを起動します。
次に、Webブラウザのデバッガーを起動します(Fig.2 参照)。

以下、一連の動作を順次、確認します。
- 「Lesson!」ボタンをクリックし、scoreの値が変化する(Fig.2 では 73 と表示)
- 同時に、Web Storage(Local Storage)の値(Value)が同値に変化する
- 一旦、Lesson画面(Webブラウザ)を閉じる
- 「Lesson Start」ボタンをクリックし、プロトタイプを再起動する
- Web Storage にデータ(Key, Value)が残っている
- 「Remove Web Storage Data」ボタンをクリックし、データ(Key, Value)が消える
