JavaScript プログラミング講座

 

ウェブストレージとは?

 
 


■ウェブストレージについて


ストレージは、記憶装置を意味します。
 
ウェブストレージを使用すると、JavaScript からデータをローカル環境に保存することができます。
 
保存できるのは文字列形式です。
 
JSON を利用すると、簡単にデータの保存と復元ができます。
 
ウェブストレージには、以下の種類があります。
 
名称 解説
sessionStorage セッションストレージ
一時的にデータを保存することができます。ウィンドウを閉じるタイミングで消えます。同じページを複数のウィンドウで開いた場合、別々に保存されます。
localStorage ローカルストレージ
永続的にデータをローカル環境に保存することができます。
 

■オリジンについて


ウェブストレージは、オリジン(Origin)と呼ばれる単位ごとに隔離して保存されます。
 
オリジンは、「プロトコルドメインポート番号」の3つからなる識別情報です。
 
「プロトコル、ドメイン、ポート番号」の3つが完全一致していれば、どのページからでも同じウェブストレージデータにアクセスでき、情報を共有することができます。
 
「プロトコル、ドメイン、ポート番号」のうち、1つでも相違があると、ウェブストレージデータは別物として扱われます。
 
「任意のオリジン内で保存したデータ」に別オリジンからアクセスすることはできません。
 
同じオリジンであればアクセスできるので、誤って保存データを上書きしたり消したりしないよう注意します。
 

■ウェブストレージにアクセスする


window オブジェクトのプロパティにストレージ用のインスタンスが格納されています。
 
各ストレージにアクセスする例です。
 
これらのプロパティが真となる場合、ブラウザがウェブストレージに対応しています。
 
セッションストレージにアクセスする

// ウェブストレージに対応している
if(window.sessionStorage){

	// セッションストレージオブジェクトを取得する
	var session_storage = window.sessionStorage;

	// 出力テスト
	console.log(session_storage);
}
 
ローカルストレージにアクセスする

// ウェブストレージに対応している
if(window.localStorage){

	// ローカルストレージオブジェクトを取得する
	var local_storage = window.localStorage;

	// 出力テスト
	console.log(local_storage);
}
 


 

データを保存する

 


■データを保存する


ストレージにデータを保存するには、setItem() メソッドを使用します。
 
第01引数に、「キー」となる好きな名前を指定します。
 
第02引数に、保存したいデータを指定します。文字列を指定します。
 
「キー」を変更することで、「キー」ごとに個別にデータを保存することができます。
 
保存データは、強制的に文字列に変換されます。数値などの状態では保存できないので注意します。
 
JSON を使用すると、オブジェクト型の保存と復元を簡単に実装することができます。
 
このメソッドは、同期実行です。保存が完了するまで制御が返りません。
 
大容量のデータの保存を試みると、その間ブラウザが応答不能になるので注意します。
 
使用例です。
 
セッションストレージの "test_key" に、文字列を保存する

// ウェブストレージに対応している
if(window.sessionStorage){

	// 保存したい適当な文字列
	var str = "保存テスト";

	// 文字列を保存
	sessionStorage.setItem("test_key",str);
}
 
ローカルストレージの "test_key" に、 JSON 形式で保存する

// ウェブストレージに対応している
if(window.localStorage){

	// 保存したい適当なオブジェクト
	var obj = {
		ary:[0,1,2],
		obj:{
			a:0,
			b:1,
			c:2
		}
	};

	// オブジェクトから JSON 文字列に変換
	var str = JSON.stringify(obj);

	// JSON 文字列を保存
	localStorage.setItem("test_key",str);
}
 


 

データを読み込む

 


■データを読み込む


ストレージに保存したデータを取り出すには、getItem() メソッドを使用します。
 
第01引数に、保存時に指定した「キー」の名前を指定します。
 
戻り値から保存したデータが文字列で得られます。存在しない場合、null が得られます。
 
使用例です。
 
セッションストレージの "test_key" に格納した文字列を取得する

// ウェブストレージに対応している
if(window.sessionStorage){

	// ------------------------------------------------------------
	// 書き込みテスト
	// ------------------------------------------------------------
	// 保存したい適当な文字列
	var str = "保存テスト";

	// 文字列を保存
	sessionStorage.setItem("test_key",str);


	// ------------------------------------------------------------
	// 読み込みテスト
	// ------------------------------------------------------------
	// 文字列を読み込み
	var str = sessionStorage.getItem("test_key");
}



 
ローカルストレージの "test_key" に格納したデータを取得して、JSON 文字列からオブジェクトを復元する

// ウェブストレージに対応している
if(window.localStorage){

	// ------------------------------------------------------------
	// 書き込みテスト
	// ------------------------------------------------------------
	// 保存したい適当なオブジェクト
	var obj = {
		ary:[0,1,2],
		obj:{
			a:0,
			b:1,
			c:2
		}
	};

	// オブジェクトから JSON 文字列に変換
	var str = JSON.stringify(obj);

	// JSON 文字列を保存
	localStorage.setItem("test_key",str);


	// ------------------------------------------------------------
	// 読み込みテスト
	// ------------------------------------------------------------
	// JSON 文字列を読み込み
	var str = localStorage.getItem("test_key");

	// JSON 文字列からオブジェクトに変換
	var obj = JSON.parse(str);

}
 


 

データを削除する

 


■データを削除する


ストレージに保存したデータを削除するには、removeItem() メソッドを使用します。
 
第01引数に、保存時に指定した「キー」の名前を指定します。
 
使用例です。
 
セッションストレージの "test_key" に格納されたデータを削除する

// ウェブストレージに対応している
if(window.sessionStorage){

	// 指定したキーに格納したデータを削除する
	sessionStorage.removeItem("test_key");

}
 
ローカルストレージの "test_key" に格納されたデータを削除する

// ウェブストレージに対応している
if(window.localStorage){

	// 指定したキーに格納したデータを削除する
	localStorage.removeItem("test_key");

}
 

■すべてのデータを削除する


ストレージに保存したすべてのデータを削除するには、clear() メソッドを使用します。
 
削除を試みているオリジン内の、すべてのデータが削除されます。
 
使用例です。
 
セッションストレージのすべてのデータを削除する

// ウェブストレージに対応している
if(window.sessionStorage){

	// ストレージ内のデータをすべて削除する
	sessionStorage.clear();

}
 
ローカルストレージのすべてのデータを削除する

// ウェブストレージに対応している
if(window.localStorage){

	// ストレージ内のデータをすべて削除する
	localStorage.clear();

}