HTML5 Web ストレージ
HTML5 Web ストレージは、クッキーよりも優れたローカルストレージ方法です。
HTML5 Web ストレージとは?
HTML5を使用すると、ユーザーのブラウザデータをローカルに保存できます。
以前は、ローカルストレージにはクッキーが使用されていました。しかし、Webストレージはより安全で迅速です。これらのデータはサーバーに保存されず、ユーザーがウェブサイトにアクセスする際にのみ使用されます。また、大量のデータを保存してもウェブサイトの性能に影響を与えません。
データはキー/値のペアとして保存され、ウェブページのデータはそのページのみがアクセスできるようになっています。
ブラウザのサポート
Webストレージをサポートするブラウザは以下の通りです:
- Internet Explorer 8+
- Firefox
- Opera
- Google Chrome
- Safari
注意: Internet Explorer 7 及びそれ以前のバージョンは、webストレージをサポートしていません。
localStorage と sessionStorage
クライアント側のデータを保存するための2つのオブジェクト:
- localStorage - サイト全体のデータを永続的に保存し、データの有効期限はありません。手動で削除するまで残ります。
- sessionStorage - 一時的に同じウィンドウ(またはタブ)のデータを保存し、ウィンドウやタブを閉じるとデータが削除されます。
Webストレージを使用する前に、ブラウザがlocalStorageとsessionStorageをサポートしているか確認する必要があります:
        if(typeof(Storage)!=="undefined") {
            // サポートされている
            // 一部のコード.....
        } else {
            // サポートされていない
        }
        localStorage オブジェクト
localStorage オブジェクトに保存されたデータには時間制限がありません。次の日、次の週、または次の年でもデータを利用できます。
実例
<body>
<div id="result"></div>
<script>
if(typeof(Storage)!=="undefined")
{
        // データの保存
        localStorage.setItem("sitename", "ITチュートリアル");
        // データの取得
        document.getElementById("result").innerHTML = "サイト名:" + localStorage.getItem("sitename");
}
else
{
  document.getElementById("result").innerHTML="申し訳ありませんが、お使いのブラウザは Web ストレージをサポートしていません。";
}
</script>
</body>実例の解説:
- キー="sitename" と値="ITチュートリアル"を使用して、localStorageにキー/値ペアを作成します。
- キー"sitename"の値を取得し、そのデータを id="result" の要素に挿入します。
上記の例は以下のようにも書けます:
        // データの保存
        localStorage.sitename = "ITチュートリアル";
        // データの取得
        document.getElementById("result").innerHTML = localStorage.sitename;
        データの削除
localStorageから"sitename"を削除するには:
        localStorage.removeItem("sitename");
        localStorageとsessionStorageで利用できるAPIは同じです。一般的なメソッドは以下の通りです(localStorageの場合):
- データの保存:localStorage.setItem(key,value);
- データの読み取り:localStorage.getItem(key);
- 単一のデータの削除:localStorage.removeItem(key);
- すべてのデータの削除:localStorage.clear();
- 特定インデックスのキーの取得:localStorage.key(index);
ヒント: キー/値のペアは通常文字列として保存されます。必要に応じてフォーマットを変換できます。
クリック数をカウントする例
        if (localStorage.clickcount) {
            localStorage.clickcount = Number(localStorage.clickcount) + 1;
        } else {
            localStorage.clickcount = 1;
        }
        document.getElementById("result").innerHTML = "ボタンを" + localStorage.clickcount + "回クリックしました。";sessionStorage オブジェクト
sessionStorage メソッドはセッションごとにデータを保存します。ユーザーがブラウザのウィンドウを閉じると、データは削除されます。
実例
        if (sessionStorage.clickcount) {
            sessionStorage.clickcount = Number(sessionStorage.clickcount) + 1;
        } else {
            sessionStorage.clickcount = 1;
        }
        document.getElementById("result").innerHTML = "このセッションでボタンを" + sessionStorage.clickcount + "回クリックしました。";
        Web ストレージを使った簡単なウェブサイトリストプログラムの開発
このウェブサイトリストプログラムでは、以下の機能を実現します:
- ウェブサイト名とURLを入力し、ウェブサイト名をキーとしてlocalStorageに保存する。
- ウェブサイト名を基にURLを検索する。
- 現在保存されているすべてのウェブサイトをリスト表示する。
データの保存と検索のメソッド (save() と find())
        // データの保存  
        function save() {  
            var siteurl = document.getElementById("siteurl").value;  
            var sitename = document.getElementById("sitename").value;  
            localStorage.setItem(sitename, siteurl);
            alert("保存に成功しました");
        }
        // データの検索  
        function find() {  
            var search_site = document.getElementById("search_site").value;  
            var sitename = localStorage.getItem(search_site);  
            var find_result = document.getElementById("find_result");  
            find_result.innerHTML = search_site + "のURLは:" + sitename;  
        }
        完全な実例
<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>データ保存と検索</title>
    <script>
        // データの保存
        function save() {
            var siteurl = document.getElementById("siteurl").value;
            var sitename = document.getElementById("sitename").value;
            localStorage.setItem(sitename, siteurl);
            alert("保存に成功しました");
        }
        // データの検索
        function find() {
            var search_site = document.getElementById("search_site").value;
            var siteurl = localStorage.getItem(search_site);
            var find_result = document.getElementById("find_result");
            if (siteurl) {
                find_result.innerHTML = search_site + "のURLは:" + siteurl;
            } else {
                find_result.innerHTML = search_site + "のURLが見つかりません";
            }
        }
    </script>
</head>
<body>
    <h1>データ保存と検索</h1>
    <h2>保存</h2>
    <p>サイト名:<input type="text" id="sitename"></p>
    <p>サイトURL:<input type="text" id="siteurl"></p>
    <button onclick="save()">保存</button>
    <h2>検索</h2>
    <p>検索するサイト名:<input type="text" id="search_site"></p>
    <button onclick="find()">検索</button>
    <h2>検索結果</h2>
    <p id="find_result"></p>
</body>
</html>

JSON.stringifyを使ったオブジェクトデータの保存
上記の実例は簡単なlocalStorageの保存と検索を示していますが、実際に保存するデータはもっと複雑な場合が多いです。このため、JSON.stringifyを使ってオブジェクトデータを保存します。JSON.stringifyはオブジェクトを文字列に変換します。
        var site = new Object();
        ...
        var str = JSON.stringify(site);  // オブジェクトを文字列に変換
        変換した文字列をJSONオブジェクトに戻すには、JSON.parseメソッドを使います:
        var site = JSON.parse(str);
        JavaScript の実装コード: save() と find() メソッド
        // データの保存  
        function save() {  
            var site = new Object();
            site.keyname = document.getElementById("keyname").value;
            site.sitename = document.getElementById("sitename").value;  
            site.siteurl = document.getElementById("siteurl").value;
            var str = JSON.stringify(site);  // オブジェクトを文字列に変換
            localStorage.setItem(site.keyname, str);  
            alert("保存に成功しました");
        }  
        // データの検索  
        function find() {  
            var search_site = document.getElementById("search_site").value;  
            var str = localStorage.getItem(search_site);  
            var find_result = document.getElementById("find_result");
            var site = JSON.parse(str);  
            find_result.innerHTML = search_site + "のウェブサイト名は:" + site.sitename + "、URLは:" + site.siteurl;  
        }
        完全な実例
<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>データ保存と検索</title>
    <script>
        // データの保存
        function save() {
            var site = new Object();
            site.keyname = document.getElementById("keyname").value;
            site.sitename = document.getElementById("sitename").value;
            site.siteurl = document.getElementById("siteurl").value;
            var str = JSON.stringify(site); // オブジェクトを文字列に変換
            localStorage.setItem(site.keyname, str);
            alert("保存に成功しました");
        }
        // データの検索
        function find() {
            var search_site = document.getElementById("search_site").value;
            var str = localStorage.getItem(search_site);
            var find_result = document.getElementById("find_result");
            if (str) {
                var site = JSON.parse(str); // 文字列をオブジェクトに解析
                find_result.innerHTML = "キー名:" + site.keyname + "<br>サイト名:" + site.sitename + "<br>サイトURL:" + site.siteurl;
            } else {
                find_result.innerHTML = search_site + " のデータが見つかりません";
            }
        }
    </script>
</head>
<body>
    <h1>データ保存と検索</h1>
    <h2>保存</h2>
    <p>キー名:<input type="text" id="keyname"></p>
    <p>サイト名:<input type="text" id="sitename"></p>
    <p>サイトURL:<input type="text" id="siteurl"></p>
    <button onclick="save()">保存</button>
    <h2>検索</h2>
    <p>検索するキー名:<input type="text" id="search_site"></p>
    <button onclick="find()">検索</button>
    <h2>検索結果</h2>
    <p id="find_result"></p>
</body>
</html>
関連するQA
Q1: Webストレージとクッキーの違いは何ですか?
A: Webストレージはクライアント側に大容量のデータを保存し、サーバーとの毎回の通信が不要です。一方、クッキーはサーバーとクライアント間でデータを送受信し、サイズ制限が厳しいです。
Q2: localStorageとsessionStorageの違いは何ですか?
A: localStorageはブラウザのセッションに関係なくデータを永続的に保存します。sessionStorageはブラウザのウィンドウやタブを閉じるとデータが削除されます。
Q3: すべてのブラウザがWebストレージをサポートしているわけではない場合、どうすれば良いですか?
A: JavaScriptでブラウザのサポートを確認し、サポートされていない場合はフォールバック方法を提供する必要があります。