Skip to content

Commit

Permalink
2024/08/05 時点の英語版に基づき更新
Browse files Browse the repository at this point in the history
  • Loading branch information
mfuji09 committed Aug 20, 2024
1 parent 7329021 commit 01d2193
Showing 1 changed file with 8 additions and 8 deletions.
16 changes: 8 additions & 8 deletions files/ja/web/api/indexeddb_api/basic_terminology/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
title: IndexedDB の主な特徴と基本用語
slug: Web/API/IndexedDB_API/Basic_Terminology
l10n:
sourceCommit: 2f87739e5ad2231acad10157f97b45579af511d6
sourceCommit: f2088b8912ef205a737551441d54b73507bd3ac6
---

{{DefaultAPISidebar("IndexedDB")}}
Expand All @@ -13,7 +13,7 @@ l10n:

- API の使用方法に関する詳細なチュートリアルについては、[IndexedDB の使用](/ja/docs/Web/API/IndexedDB_API/Using_IndexedDB)を参照してください。
- IndexedDB API のリファレンス文書については、[IndexedDB API](/ja/docs/Web/API/IndexedDB_API) のメイン記事と、IndexedDB で使用されるオブジェクトの型を記したそのサブページを参照してください。
- ブラウザーがバックグラウンドでデータを保存する方法の詳細については、[ブラウザーのストレージ制限と削除基準](/ja/docs/Web/API/IndexedDB_API/Browser_storage_limits_and_eviction_criteria)を参照してください。
- ブラウザーがバックグラウンドでデータを保存する方法の詳細については、[ブラウザーのストレージ容量と削除基準](/ja/docs/Web/API/Storage_API/Storage_quotas_and_eviction_criteria)を参照してください。

## 主な特徴

Expand All @@ -24,16 +24,16 @@ IndexedDB では、「キー」に基づいてインデックス化されたオ
他の種類のデータベースでの作業を前提としていると、IndexedDB での作業に戸惑うことがあるかもしれません。そのため、以下のような IndexedDB の主な特徴を覚えておくことが重要です。

- **IndexedDB データベースは、キーと値の組を格納します。** 値は複雑な構造のオブジェクトで、キーはそのオブジェクトのプロパティです。オブジェクトの任意のプロパティを使用するインデックスを作成して、迅速な検索や並べ替えされた列挙を行うことができます。キーにはバイナリーオブジェクトを使用することができます。
- **IndexedDB は、トランザクションデータベースモデルに基づいて構築されています。** IndexedDB で行うことは、常に[トランザクション](#トランザクション)のコンテキストで行われます。IndexedDB API には、インデックス、テーブル、カーソルなどを表す多くのオブジェクトが用意されていますが、これらはそれぞれ特定のトランザクションに関連付けられています。そのため、トランザクションの外でコマンドを実行したり、カーソルを開いたりすることはできません。トランザクションには十分に定義された有効期間があるため、トランザクションが完了した後に使用しようとすると、例外が発生します。また、トランザクションは自動コミットされ、手動でコミットすることはできません
- **IndexedDB は、トランザクションデータベースモデルに基づいて構築されています。** IndexedDB で行うことは、常に[トランザクション](#トランザクション)のコンテキストで行われます。IndexedDB API には、インデックス、テーブル、カーソルなどを表す多くのオブジェクトが用意されていますが、これらはそれぞれ特定のトランザクションに関連付けられています。そのため、トランザクションの外でコマンドを実行したり、カーソルを開いたりすることはできません。トランザクションには十分に定義された有効期間があるため、トランザクションが完了した後に使用しようとすると、例外が発生します。また、トランザクションがアクティブなときに新しいリクエストがされない場合、トランザクションは自動的にコミットされます

このトランザクションモデルは、ユーザーがウェブアプリケーションの 2 つのインスタンスを 2 つの異なるタブで同時に開いた場合のことを考えると、とても有用です。トランザクション操作がなければ、 2 つのインスタンスが互いの変更に干渉してしまう可能性があります。データベースのトランザクションに慣れていない方は、[Wikipedia のトランザクションに関する記事](https://ja.wikipedia.org/wiki/%E3%83%88%E3%83%A9%E3%83%B3%E3%82%B6%E3%82%AF%E3%82%B7%E3%83%A7%E3%83%B3)をご覧ください。また、「定義」の章の[トランザクション](#トランザクション)もご覧ください。

- **IndexedDB API は、ほとんどが非同期です。** API は値を返すことでデータを提供するわけではありません。コールバック関数を渡す必要があります。同期的な方法でデータベースに値を「格納」したり、データベースから値を「取り出す」ことはしません。代わりに、データベース操作を「リクエスト」します。操作が終了すると DOM イベントで通知され、そのイベントの種類によって操作が成功したか失敗したかが分かります。最初は少し複雑に聞こえるかもしれませんが、そこには健全性を保つための対策が組み込まれています。これは、[XMLHttpRequest](/ja/docs/Web/API/XMLHttpRequest) が動作する方法と大きな違いはありません。
- **IndexedDB API は、ほとんどが非同期です。** API は値を返すことでデータを提供するわけではありません。コールバック関数を渡す必要があります。同期的な方法でデータベースに値を「格納」したり、データベースから値を「取り出す」ことはしません。代わりに、データベース操作を「リクエスト」します。操作が終了すると DOM イベントで通知され、そのイベントの種類によって操作が成功したか失敗したかが分かります。
- **IndexedDB は多くのリクエストを使用します。** リクエストは、前述の成功または失敗の DOM イベントを受け取るオブジェクトです。このオブジェクトには `onsuccess``onerror` のプロパティがあり、`addEventListener()``removeEventListener()` を呼び出すことができます。また、`readyState``result``errorCode` の各プロパティがあり、リクエストの状態を知ることができます。`result` プロパティは、リクエストの生成方法 (例えば `IDBCursor` インスタンスや、データベースに挿入したばかりの値のキー) に応じて、さまざまなものになるため、特に魔法のようなものです。
- **IndexedDB は DOM イベントを使って、結果が利用可能になったことを通知します。** DOM イベントには、必ず `type` プロパティがあります (IndexedDB では、最も一般的に `"success"` または `"error"` に設定されます)。また、DOM イベントには、イベントの目的地を示す `target` プロパティがあります。ほとんどの場合、イベントの `target` は、何らかのデータベース操作の結果として生成された `IDBRequest` オブジェクトです。成功イベントはバブルアップしませんし、キャンセルもできません。一方、エラーイベントはバブリングします、キャンセルも可能です。これは非常に重要なことで、エラーイベントはキャンセルされない限り、実行中のトランザクションを中断します。
- **IndexedDB はオブジェクト指向です。** IndexedDB は、行と列の集合体であるテーブルを持つリレーショナルデータベースではありません。この重要かつ根本的な違いは、アプリケーションの設計・構築方法に影響します。

従来のリレーショナルデータストアでは、データの行と名前の付いたデータの列の集合体を格納するテーブルがあります。一方、IndexedDB では、データの種類に応じてオブジェクトストアを作成し、そのストアに JavaScript オブジェクトを永続化する必要があります。各オブジェクトストアには、クエリや反復処理を効率的に行うためのインデックスのコレクションを持つことができます。オブジェクト指向データベース管理システムに慣れていない方は、[Wikipedia のオブジェクトデータベースの記事](https://ja.wikipedia.org/wiki/%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9)をお読みください。
従来のリレーショナルデータストアでは、データの行と名前の付いたデータの列の集合体を格納するテーブルがあります。一方、IndexedDB では、データの種類に応じてオブジェクトストアを作成し、そのストアに JavaScript オブジェクトを永続化する必要があります。各オブジェクトストアには、クエリーや反復処理を効率的に行うためのインデックスのコレクションを持つことができます。オブジェクト指向データベース管理システムに慣れていない方は、[Wikipedia のオブジェクトデータベースの記事](https://ja.wikipedia.org/wiki/%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9)をお読みください。

- **IndexedDB は Structured Query Language (SQL) を使用しません。** インデックスに対するクエリーを使用してカーソルを生成し、そのカーソルを使用して結果セットを反復処理します。NoSQL システムについてよく知らない方は、[Wikipedia の NoSQL に関する記事](https://ja.wikipedia.org/wiki/NoSQL)をご覧ください。
- **IndexedDB は、同一オリジンポリシーを採用しています**。オリジンとは、スクリプトを実行している文書の URL のドメイン、アプリケーション層のプロトコル、およびポートのことです。各オリジンには、それぞれ関連するデータベースのセットがあります。すべてのデータベースには、オリジン内で識別するための名前があります。
Expand All @@ -47,7 +47,7 @@ IndexedDB では、「キー」に基づいてインデックス化されたオ

IndexedDB は、クライアントサイドのストレージを必要とするほとんどのケースをカバーするように設計されています。しかし、以下のようないくつかのケースには対応していません。

- 国際化に対応した並べ替え。すべての言語で文字列が同じように並べ替えされるわけではないので、国際化に対応した並べ替えには対応していません。データベースは特定の国際化に対応した順序でデータを保存することはできませんが、データベースから読み取ったデータを自分で並べ替えすることはできます。ただし、Firefox 43 以降、実験的なフラグを有効にすることで、[ロケールを考慮した並べ替え](/ja/docs/Web/API/IndexedDB_API/Using_IndexedDB#locale-aware_sorting)が可能になっています (現在は Firefox のみ)。
- 国際化に対応した並べ替え。すべての言語で文字列が同じように並べ替えされるわけではないので、国際化に対応した並べ替えには対応していません。データベースは特定の国際化に対応した順序でデータを保存することはできませんが、データベースから読み取ったデータを自分で並べ替えすることはできます。
- 同期。この API は、サーバー側のデータベースとの同期を行うようには設計されていません。クライアント側の indexedDB データベースとサーバー側のデータベースを同期させるコードを書く必要があります。
- 全文検索。この API には、 SQL の `LIKE` 演算子に相当するものがありません。

Expand Down Expand Up @@ -165,7 +165,7 @@ Firefox 40 では、IndexedDB トランザクションは、パフォーマン

#### キーレンジ

キーとして使用する、何らかのデータ型の連続的な区間です。キーまたはキーレンジを使用して、オブジェクトストアやインデックスからレコードを取り出すことができます。下限または上限を使用して、レンジを制限またはフィルターリングできます。例えばキーが x から y の間であるすべての値に対して、反復処理を行うことができます。
キーとして使用する、何らかのデータ型の連続的な区間です。キーまたはキーレンジを使用して、オブジェクトストアやインデックスからレコードを取り出すことができます。下限または上限を使用して、レンジを制限またはフィルタリングできます。例えばキーが x から y の間であるすべての値に対して、反復処理を行うことができます。

キーレンジのリファレンス文書として、{{domxref("IDBKeyRange")}} をご覧ください。

Expand All @@ -182,4 +182,4 @@ IndexedDB の主な特徴と主要な用語を理解できたら、より具体
- [Indexed Database API 仕様書](https://www.w3.org/TR/IndexedDB/)
- [IndexedDB API リファレンス](/ja/docs/Web/API/IndexedDB_API)
- [IndexedDB の使用](/ja/docs/Web/API/IndexedDB_API/Using_IndexedDB)
- [IndexedDB — The Store in Your Browser](<https://docs.microsoft.com/previous-versions/msdn10/gg679063(v=msdn.10)>)
- [IndexedDB — The Store in Your Browser](<https://learn.microsoft.com/en-us/previous-versions/msdn10/gg679063(v=msdn.10)>)

0 comments on commit 01d2193

Please sign in to comment.