ブラウザでストレージ? Web Storageを使いこなそう連載:人気順に説明する初めてのHTML5開発(1/3 ページ)

容量制限やセキュリティの課題があった、従来のクッキーはもう古い。今すぐ実用できる「Web Storage」を活用しよう。

» 2011年08月12日 00時00分 公開
[ナオキ(監修:山田祥寛)WINGSプロジェクト(http://www.wings.msn.to/)]
連載:人気順に説明する初めてのHTML5開発
業務アプリInsider/Insider.NET

powered by Insider.NET

「連載:人気順に説明する初めてのHTML5開発」のインデックス

連載目次

■Web Storageの概要と活用例

 旧来(=HTML 4.1以前)のWebブラウザでは、eコマース・サイトのカート情報やログイン状態の管理情報などのデータをブラウザに保存する仕組みとして、大半のWebサイトではクッキーを利用していた。しかし、クッキーでは、保存容量が4KBytesまでであることや、すべてのリクエストに対してサーバにデータを自動で送信するため、容量制限やセキュリティ対策に悩まされることも多くあった。

 HTML5では、クッキーに代わるデータ保存の仕組みとして、「Web Storage」と呼ばれる機能を利用できる。Web Storageは、ブラウザ側でKey-Value型でデータを保存する機能のことで、現在のインターネットを取り囲む環境に対応した「クッキーの後継技術」ともいえる。

 Web Storageとクッキーの機能の差異は、以下の表のとおりだ。

特徴または機能 クッキー Web Storage
保存容量 4KBytes 5MBytes
データの有効期限 あり(無期限設定はない) なし
セキュリティ すべてのリクエストに対してサーバにデータを自動送信 データを利用する時のみ送信(自動で送信しない)
Web Storageとクッキーの機能の差異

 表の内容は、「Web Storageを使用することで、開発者が受けられる恩恵」ともいえる。クッキーよりもデータ保存容量が大きくなり、有効期限もないので、クライアントサイドでのデータ管理を行いやすくなる。また、クッキーのようにすべてのリクエストに対してデータを自動で送信しないので、クッキーよりはセキュアに利用できる。なお、ブラウザによっては、データの保存容量が5MBytesより大きいものもあるが、クロスプラットフォームを意識した場合、W3C勧告に従った5MBytesを上限とした利用を推奨する。

 Web Storageは、次の表のとおり、現在、リリースされている主要なブラウザでは実装済みで、デスクトップ端末/スマートフォン/タブレット端末など、多くのデバイス上で役に立つ機能といえるだろう。

ブラウザ 対応バージョン
Internet Explorer 8以降
Firefox 3.6以降
Chrome 8以降
Safari 5以降
Opera 11以降
主要ブラウザにおけるWeb Storageの実装状況

 つまり、これからWebアプリケーションを作成する場合には、Web Storageは十分に実用できる環境にあるといえる。次の項から、Web Storageの詳細について触れていく。

2種類のWeb Storage

 Web Storageは、以下の2種類のストレージのことを指し、目的に応じて用途が分けられている。

(1)sessionStorage

 ウィンドウごとのセッションで有効なストレージ。ウィンドウやタブが開いている間、Webアプリケーション利用に関するデータをそれぞれの単位で保存し、ウィンドウ/タブが閉じられると、データは失われる。ウィンドウ/タブ間では異なるsessionStorageとなり、共有はできない。

(2)localStorage

 Webアプリケーション利用者のブラウザ内に永続的にデータを保存するストレージ。保存は「http://www.atmarkit.co.jp:80/」のように「ドメイン:ポート番号」の組み合わせの「オリジン」単位で実施される。オリジンが同じであれば、ウィンドウやタブ間でデータを共有でき、また、一度、ブラウザを閉じて、再度アクセスしたときでもデータを共有できる。

 次の図は、sessionStorageとlocalStorageの特徴を、図にまとめたものだ。

図1 Web Storageの特徴

 現在、すでにWeb Storageを利用しているWebアプリケーションで有名なサイトは、以下のとおりだ(ブラウザの下部に表示されているツリーや一覧は開発者ツールで、これを使ってストレージの利用状況を確認している)。

 お勧め商品の一覧ページ「この商品を買った人はこんな商品も買っています」のページ番号をsessionStorageで保存している。

図2 Amazon.co.jpによるsessionStorage使用例

 [Write](=書道の文字を書く)の初回実行時に動作するムービーの閲覧情報フラグをsessionStorageで保存している。また、サイト内の音量設定やミュート設定の保存にlocalStorageを使用している。

図3 the ShodoにおけるWeb Storage使用例

 sessionStorageの利用方法として、例えば、「ブラウザ起動後の初回アクセスのみ、アプリケーションのチュートリアル部分をムービーで表示したい」というシナリオもあるだろう。そこで、「ムービーを表示した」という情報をsessionStorageに保存することで簡単なフラグ分岐などができる。

 localStorageの利用方法として、例えば、Webページ閲覧・利用者が選択した背景色や文字色のテーマなどをlocalStorageに保存することで、Webアプリケーションでありながら、エンド・ユーザー環境をレジストリのように維持することもできる。

 このようにsessionStorage/localStorageは、「セッション接続の間だけ利用したいか」「永続的に情報を保持したいか」という用途に応じて使い分けることになるだろう。

【コラム】Web Storageのデータ内容を確認するには?

 主要ブラウザはWeb Storageを実装しているが、ストレージに保存された情報の内容を(開発者が)確認する手順はブラウザにより異なる。なお、現在、Internet Explorerのみ、Web Storageに保存された情報を確認する方法が提供されていない。また、Firefoxはアドオン「Firebug」を入れることなどで確認ができる。それ以外のブラウザは、標準搭載している開発者ツールで確認することが可能だ。

 確認手順は以下のとおりだ。

ブラウザ ストレージの確認ができるバージョン 確認手順
Internet Explorer 現在はできない  
Firefox アドオンが必要 Firebugアドオンなどで確認 Firebugを起動して、上部のツールバーの[DOM]タブを開き、[window]の配下にある[sessionStorage]や[localStorage]を選択する
Chrome 8以降 デベロッパー・ツールで確認 バー上の[Google Chromeの設定]ボタンから[ツール]−[デベロッパー ツール]を実行。表示されたデベロッパー・ツールの[Resources]タブを開き、ツリー表示から[Session Storage]や[Local Storage]の配下の項目を選択する
Safari 5以降 開発メニューで確認 バー上[一般設定のメニュー]ボタンから[設定]を実行。表示されるダイアログで[詳細]タブを開き、[メニューバーに"開発"メニューを表示]チェックボックスにチェックを入れ、ダイアログを閉じる。バー上[現在のページのメニュー]ボタンから[開発]−[Web インスペクタを表示]を実行。表示されるウィンドウで上部の[リソース]タブを開き、ツリー表示から[セッションストレージ]や[ローカルストレージ]の配下の項目を選択する
Opera 11以降 開発者用ツールで確認 [メニュー]ボタンから[ページ]−[開発者用ツール]−[Opera Dragonfly]を実行。表示された開発者用ツールの上部[ストレージ]タブを開き、そのタブの下に表示されるバーで[セッション ストレージ]や[ローカル ストレージ]を開く
主要ブラウザにおけるWeb Storageの確認方法

 ここで紹介した機能は、Web Storage以外にも各要素のチェックやCSSの適用状況、JavaScriptコードのエラー検出機能なども保有しているので、HTML5開発のサポートに活用するといいだろう。


 それでは、次の項から実際のWeb Storageの利用方法について説明する。

       1|2|3 次のページへ

Copyright© Digital Advantage Corp. All Rights Reserved.

スポンサーからのお知らせPR

注目のテーマ

AI for エンジニアリング
「サプライチェーン攻撃」対策
1P情シスのための脆弱性管理/対策の現実解
OSSのサプライチェーン管理、取るべきアクションとは
Microsoft & Windows最前線2024
システム開発ノウハウ 【発注ナビ】PR
あなたにおすすめの記事PR

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。