スキップしてメイン コンテンツに移動

JavaScriptのローカルストレージ

以前にもローカルストレージを使って実装した事もありましたが、クッキーでは収まらないサイズのデータを扱うオフラインウェブアプリを作った際に色々調べたことをまとめてみます。




セッションストレージというのもある

セッションストレージは1セッションの間だけデータを保持するストレージ領域で、ウィンドウやタブを閉じれば消える(らしい)です。らしいというのは、今回利用していないからですが、キャッシュ的な使い方をするんでしょうか。


本題のローカルストレージ

ローカルストレージはほっとくといつまでもデータを保存しておいてくれるストレージで、今回あるゲームのマップエディタを作りまして、そのマップデータをローカルストレージに放り込んでおくという使い方をしています。
クッキーだと1つのキーに保存できるデータ量は知れているし、データの有効期限が存在するのも使いにくい理由でした。
ローカルストレージも保存量は無限ではないですが、5MBというそれなりに大きな容量が確保できるのが今回採用した理由です。
エディタで作ったマップを使用するゲームですが、これも公開できる日が来るといいなと思います(まだまだ先の話)。


クッキーより簡単

現実問題、ブラウザの対応次第なので、手堅くクッキーを使うという選択もありなのですが、ローカルストレージを利用するのは非常に簡単。専用のメソッドもありますし、プロパティ方式で直接データにアクセスすることもできるし、連想配列方式でアクセスする事も可能です。ローカルストレージオブジェクトのチェックを済ませば、オブジェクトや連想配列と同じように扱っていい。
if (window.localStorage){
    window.localStorage.setItem("foo", "bar");    // 1
    window.localStorage.foo = "bar";               // 2
    window.localStorage["foo"] = "bar";            // 3
}

取り出す時も、同じように扱えます。
if (window.localStorage){
    var a = window.localStorage.getItem("foo");    // 1
    var b = window.localStorage.foo;               // 2
    var c = window.localStorage["foo"];            // 3
}

上の1、2、3は同じデータにアクセスできます。


データを削除する場合には、選択肢が2つあります。
一つは1つの値だけを削除する方法。
もう一つは保存してある全てのデータを削除する方法。

1つの値だけを削除する方法にはさらに二通りありまして、一つはローカルストレージ用のメソッドremoveItem()を利用する方法。
これは、キーを引数に指定することで削除できるお手軽な方法。
もう一つは、delete演算子を使用する方法。配列っぽくアクセスできるなら、削除もそれっぽくできるということのようです。

ローカルストレージのすべてのデータを削除する方法は、clear()メソッドを利用します。for inで回して、無理やりdeleteを使えなくもないですが、無駄なコードが多すぎます。
全削除と書きましたが、削除できる範囲は、アクセスしているドメインのローカルストレージだけ。example.comドメインのローカルストレージはexample.comからしかアクセスできません。この辺りはクッキーを同じです。


値にJSONをぶち込む

何が超絶便利かというと、JSONを利用してオブジェクトデータをごっそり保存できるのがいいです。クッキーでもできるのですが、こうなるとクッキーでは容量が足りなくなってくる可能性も高いので、クッキーの1000倍以上の容量を擁するローカルストレージを利用するメリットも出てきます。
最近のブラウザにはオブジェクトからJSON、JSONからオブジェクトの相互変換するためのメソッドが用意されていますので、それを利用します。
var obj = {
    foo : 1,
    bar : "text",
};
console.log(JSON.stringify(obj));              // {"foo":1,"bar":"text"}
console.log(JSON.parse(JSON.stringify(obj)));  // Object {foo: 1, bar: "text"}

ローカルストレージ同様、ブラウザの実装によりますので利用前にチェックするか、諦めてjqueryを利用するかで調整します。
コード上必ずJSONを利用するなら曖昧なブラウザの実装を頼るのはダメですね。自分しか使わない、とか実行条件がある程度限られていて使える状況ならば、ブラウザの実装を利用するほうが高速で簡単なので積極的に使っていきたいですね。


コメント

このブログの人気の投稿

[VB.NET]オレオレ証明書でSSL通信するための短絡的な解決法

VB.NETソフトウェアでサーバーと通信することはよくある事だと思いますが、最近はHTTPを使って明けっ広げに刺しに行くよりHTTPSを使って暗号化してこそこそやった方が時代の流れに即した感じですよね(違うか)。 いちいちテスト環境でSSL証明書を用意するのも面倒だということで、セキュリティ的には全くよろしくない方法で迂回できるので紹介します。

[JS]Canvasでよく使う描画テクまとめ

HTMLで画像をいじくりたい時は、canvasを利用して編集するのは一般的ですが、WindowsストアアプリではHTML+CSS+JSでのアプリ開発ができる事もあって、簡単な画像編集であれば、C#やVBを使うより分かりやすいし資料が多く、C++でDirectXをガリガリ書くよりお手軽。入出力もファイルピッカーを使えば簡単に実装できます。今回は、Windowsのコードではなく、Canvasを利用する時のJavaScriptを使いどきに合わせてまとめていきます。

curl の基本的な使い方 -設定編-

今回のcurl TIPSは、curlをより日常的に使っていくためのHow toです。curlには、数多くのオプションが用意されていて、それらを組み合わせる事で様々な事が楽になるでしょう。サービス監視の自動化などにはまさにcurlの得意分野です。 今回は、curlを更に自分のものにしていくために大事なカスタマイズの部分を解説します。