“オフラインファースト”を実現する、ストレージ系APIライブラリ10選UXClip(36)(3/3 ページ)

» 2013年09月18日 18時00分 公開
[仲裕介,@IT]
前のページへ 1|2|3       

JQuery-IndexedDB plugin

 jQueryを利用したIndexedDBのラッパーライブラリです。WebブラウザのIndexedDB APIをラッパーするため、先に紹介したLocalStorageのラッパーライブラリとは違い、IndexedDBをサポートするWebブラウザでしか動作しません。記述はjQueryに準拠しているため、jQuery経験者であれば導入は比較的容易だと思います。1つ前に紹介した、IndexedDBshimでも利用可能です。

  1. (function(){
  2. //データベースの作成
  3. $.indexedDB("jquery_DB", {
  4. "schema": {
  5. "4": function(versionTransaction){
  6. versionTransaction.createObjectStore("user")
  7. }
  8. }
  9. }).transaction(["user"]).then(function(){
  10. //done
  11. console.log("データベース処理が完了しました")
  12. }, function(){
  13. //fail
  14. console.log("データベース作成でエラーが発生しました")
  15. }, function(trans){
  16. //progress
  17. })
  18. //オブジェクトストア取得
  19. var objectStore = $.indexedDB("jquery_DB").objectStore("user");
  20. //データ追加
  21. for(var c = 0;c < 10;c++){
  22. objectStore.add({
  23. "name": "user" + c,
  24. "like": "html5"
  25. }, c).then(function(){
  26. //done
  27. console.log("データを追加しました")
  28. }, function(){
  29. //fail
  30. console.log("データの追加でエラーが発生しました")
  31. })
  32. }
  33. })()
コード実行結果

 jquery_DBというデータベースを作成、そのデータベースにuserというオブジェクトストアを作成し、10個のデータを追加しています。IndexedDBは、LocalStorageやSessionStorageに比べて複雑です。利用用途に合わせて選択しましょう。

PouchDB

 PouchDBは、IndexedDBのラッパーライブラリです。オンライン時にPouchDB-ServerCloudantとデータ同期できるのが特徴です。オフラインWebについては、ローカルでのデータ保持とサーバとの同期が重要な機能となるため、開発効率の向上が期待できそうです。また、Backbone.jsに組み込むためのBackBone PouchDBというアダプタがあり、Backbone localStorage Adapterと同様に利用可能です。PouchDBのサンプルソースについては、公式Webサイトにデモアプリ開発のチュートリアルが掲載されているので、そちらを参考にしてくだい。

  1. (function(){
  2. //データベースを作成
  3. var db = new PouchDB('sample')
  4. var remoteCouch = false
  5. addData('テストテスト')
  6. function addData(text) {
  7. var data = {
  8. _id: new Date().toISOString(),
  9. title: text,
  10. completed: false
  11. };
  12. db.put(data, function callback(err, result) {
  13. if (!err) {
  14. console.log('Successfully posted a data!');
  15. }
  16. });
  17. }
  18. })()
コード実行結果

 sampleというデータベースを作成し、その中にドキュメントを作成、データを追加するという公式Webサイトのサンプルそのままです。PouchDBは、CouchDBというドキュメント指向データベースを基に作られているため、オブジェクトストアという概念は出てこないのが特徴です。

DB.JS

 IndexedDBのラッパーライブラリです。シンプルなラッパーライブラリで、前に紹介したPouchDBよりも使いやすいです。こちらもWebサイト上で詳しく利用方法が解説されています。

  1. (function(){
  2. //データベース作成
  3. db.open( {
  4. server: 'sample_DB.js',
  5. version: 1,
  6. schema: {
  7. people: {
  8. key: { keyPath: 'id' , autoIncrement: true },
  9. indexes: {
  10. firstName: { }
  11. }
  12. }
  13. }
  14. } ).done( function ( s ) {
  15. //データを追加
  16. s.people.add( {
  17. firstName: 'Yusuke',
  18. lastName: 'NAKA',
  19. } ).done( function ( item ) {
  20. // 完了
  21. } );
  22. } );
  23. })()
コード実行結果

 データベースを作成し、その中にオブジェクトストレージを作成、データを追加しています。JQuery-IndexedDB pluginと使い方はほとんど同様です。

KageDB

 日本人が開発したIndexedDBのラッパーライブラリです。日本語のAPIリファレンスなどが充実しています。デモプログラムのTODOリストも見やすく、IndexedDBをこれから使い始める方にはお薦めです。

  1. (function(){
  2. if (KageDB.isAvailable()) {
  3. // 利用できる場合
  4. //データベース定義
  5. var test = new KageDB({
  6. name:'KageDB',
  7. migration: {
  8. 1: function (ctx,next) {
  9. //userStoreを作成しnameIndexを作成する
  10. var db = ctx.db
  11. var user = db.createObjectStore('user', { keyPath: 'timestamp', autoIncrement: false});
  12. user.createIndex("name", "name", { unique: false })
  13. next()
  14. }
  15. }
  16. })
  17. addData()
  18. getData()
  19. //userStoreにデータを追加する
  20. function addData(){
  21. test.tx(['user'],'readwrite', function(tx,user) {
  22. user.add({ name:'Yusuke NAKA',like: 'html5',timestamp: new Date().getTime()}, function (key) {
  23. console.log("done, key=" + key)
  24. })
  25. }, function (event) {
  26. console.error(event.kage_message)
  27. })
  28. }
  29. //データの取り出す
  30. function getData(){
  31. test.tx(['user'], function(tx,user) {
  32. user.fetch(function(value) {
  33. console.log('取り出したデータ:' + JSON.stringify(value))
  34. this.key = value
  35. })
  36. }, function (event) {
  37. console.error(event.kage_message)
  38. })
  39. }
  40. } else {
  41. // 利用できない場合
  42. console.log('IndexedDBが利用できません。')
  43. }
  44. })()
コード実行結果

 データベースを作成し、オブジェクトストアを作成、データを追加・取り出ししています。先ほどと同様、JQuery-IndexedDB pluginと使い方はほとんど同じです。

おわりに

 オフラインストレージを利用したWebアプリケーションは、一度公開してしまうとクライアント側に何らかのデータが保持され、バージョンアップの際はデータのマイグレーションなども考慮しなくてはなりません(ネイティブアプリっぽくなります)。そのため、設計段階からどのようなライブラリを使うかは、きちんと吟味する必要があります。本稿がその助けになると幸いです。

著者プロフィール

仲 裕介(なか ゆうすけ)

NTTコミュニケーションズ 先端IPアーキテクチャセンタにて、

最新Web技術の調査研究やスマホ向けサービスの開発などを行っています。

Twitter:@Tukimikage

「UX Clip」バックナンバー
前のページへ 1|2|3       

Copyright © ITmedia, Inc. All Rights Reserved.

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

HTML5�ス�ス陋幢ススX 鬮ォ�ェ陋滂ソス�ス�コ闕オ譁溷クキ�ケ譎「�ス�ウ驛「�ァ�ス�ュ驛「譎「�ス�ウ驛「�ァ�ス�ー

髫エ蟷「�ス�ャ髫エ魃会スス�・髫エ蟶キ�」�ッ闖ォ�」

注目のテーマ

4AI by @IT - AIを作り、動かし、守り、生かす
Microsoft & Windows最前線2025
AI for エンジニアリング
ローコード/ノーコード セントラル by @IT - ITエンジニアがビジネスの中心で活躍する組織へ
Cloud Native Central by @IT - スケーラブルな能力を組織に
システム開発ノウハウ 【発注ナビ】PR
あなたにおすすめの記事PR

RSSについて

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

メールマガジン登録

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