diff options
author | MDN <actions@users.noreply.github.com> | 2021-06-15 00:35:40 +0000 |
---|---|---|
committer | MDN <actions@users.noreply.github.com> | 2021-06-15 00:35:40 +0000 |
commit | 522984283b56b68582d606c76e4ca98c0baf9451 (patch) | |
tree | 0bf1a6328efd2bf74b118ff823b5208de78dec0b /files/ja/orphaned/web | |
parent | ee3bbc7c983772815b6168c0c146fabbf1536105 (diff) | |
download | translated-content-522984283b56b68582d606c76e4ca98c0baf9451.tar.gz translated-content-522984283b56b68582d606c76e4ca98c0baf9451.tar.bz2 translated-content-522984283b56b68582d606c76e4ca98c0baf9451.zip |
[CRON] sync translated content
Diffstat (limited to 'files/ja/orphaned/web')
-rw-r--r-- | files/ja/orphaned/web/api/indexeddb_api/basic_concepts_behind_indexeddb/index.html | 218 | ||||
-rw-r--r-- | files/ja/orphaned/web/javascript/reference/errors/typed_array_invalid_arguments/index.html | 78 |
2 files changed, 296 insertions, 0 deletions
diff --git a/files/ja/orphaned/web/api/indexeddb_api/basic_concepts_behind_indexeddb/index.html b/files/ja/orphaned/web/api/indexeddb_api/basic_concepts_behind_indexeddb/index.html new file mode 100644 index 0000000000..7b89c66b60 --- /dev/null +++ b/files/ja/orphaned/web/api/indexeddb_api/basic_concepts_behind_indexeddb/index.html @@ -0,0 +1,218 @@ +--- +title: 基本的な概念 +slug: orphaned/Web/API/IndexedDB_API/Basic_Concepts_Behind_IndexedDB +tags: + - Advanced + - IndexedDB + - concepts +translation_of: Web/API/IndexedDB_API/Basic_Concepts_Behind_IndexedDB +original_slug: Web/API/IndexedDB_API/Basic_Concepts_Behind_IndexedDB +--- +<p>{{DefaultAPISidebar("IndexedDB")}}</p> + +<div class="summary"> +<p><strong>IndexedDB</strong> は、ユーザーのブラウザー内にデータを永続的に保存する手段です。ネットワークの状態にかかわらず高度な問い合わせ機能を持つ ウェブアプリケーションを作成できますので、オンラインとオフラインの両方で動作するアプリケーションになります。IndexedDB は大量のデータを保存するアプリケーション (例えばレンタル店の DVD カタログ) や、動作するために持続的なインターネット接続が不要なアプリケーション (例えばメールクライアント、To-Do リスト、メモ帳) で役に立ちます。</p> +</div> + +<h2 id="About_this_document" name="About_this_document">このドキュメントについて</h2> + +<p>この概論では、IndexedDB の本質的な概念や用語について論じます。これにより全体像を示すとともに、重要な概念を説明します。</p> + +<p>以下の役に立つ項目があります:</p> + +<ul> + <li>IndexedDB の設計と構造の概観については、<a href="#concepts">重要な概念</a>を見てください。</li> + <li>IndexedDB の用語について詳しく学ぶには、<a href="#definitions">定義</a>の章をご覧ください。</li> + <li>API の使用方法に関する詳しいチュートリアルについては、<a href="/ja/docs/Web/API/IndexedDB_API/Using_IndexedDB" title="IndexedDB/IndexedDB primer">IndexedDB を使用する</a>をご覧ください。</li> + <li>IndexedDB API のリファレンスドキュメントについては、メインページ <a href="/ja/docs/Web/API/IndexedDB_API">IndexedDB API</a> のサブページをご覧ください。IndexedDB で使用するオブジェクト型について記載しています。</li> + <li>ブラウザーがバックグラウンドでデータの保存を扱う方法について詳しくは、<a href="/ja/docs/Web/API/IndexedDB_API/Browser_storage_limits_and_eviction_criteria">ブラウザーのストレージ制限と削除基準</a>をご覧ください。</li> +</ul> + +<h2 id="Overview_of_IndexedDB" name="Overview_of_IndexedDB">IndexedDB の概要</h2> + +<p>IndexedDB では、"キー" でインデックス付けされたオブジェクトを保存および取り出すことができます。データベースに対して施したすべての変更は、トランザクションで発生します。たいていの Web ストレージ技術と同様に、IndexedDB も<a href="http://www.w3.org/Security/wiki/Same_Origin_Policy" title="http://www.w3.org/Security/wiki/Same_Origin_Policy">同一生成元ポリシー</a>に従います。よって、保存済みデータは同一ドメイン内からアクセスできますが、異なるドメインにまたがってデータへアクセスすることはできません。</p> + +<p>IndexedDB は、<a href="/ja/docs/Web/API/Web_Workers_API/Using_web_workers" title="https://developer.mozilla.org/En/Using_web_workers">Web Workers</a> を含むほとんどの状況で使用できる<a href="/ja/docs/Web/API/IndexedDB_API#Asynchronous_API" title="IndexedDB#Asynchronous_API">非同期</a> API です。以前は Web Workers で使用するための<a href="/ja/docs/Web/API/IndexedDB_API#Synchronous_API" title="IndexedDB#Synchronous_API">同期</a> API も含まれていましたが、Web コミュニティが無関心であったために仕様から削除されました。</p> + +<p>IndexedDB と競合する仕様である WebSQL データベースがありましたが、W3C は 2010 年 11 月 18 日に非推奨にしました。IndexedDB も WebSQL もデータ保存の技術ですが、提供する機能が異なります。WebSQL データベースはリレーショナルデータベースシステムであるのに対して、IndexedDB はインデックス付きのテーブルシステムです。</p> + +<h2 id="concepts" name="concepts">重要な概念</h2> + +<p>ほかのタイプのデータベースを扱った経験から想定していることがあるなら、IndexedDB を扱うときにはそれを捨てましょう。そして、以下の重要な概念を覚えておいてください:</p> + +<ul> + <li> + <p><strong>IndexedDB データベースはキーと値のペアを保存します。</strong>値は複雑な構造のオブジェクトにすることができます。また、キーはそれらのオブジェクトのプロパティにすることができます。分類された一覧表だけでなく、高速検索のためにオブジェクトの任意のプロパティを使用するインデックスを作成することができます。</p> + </li> + <li> + <p><strong>IndexedDB はトランザクショナルデータベースモデルに基づいて構築されます。</strong>IndexedDB で行うことはすべて、<a href="#gloss_transaction">トランザクション</a>環境で発生します。IndexedDB API はインデックス、テーブル、カーソルなどを表す多くのオブジェクトを提供していますが、それらは個々のトランザクションに結びつけられています。よって、トランザクションの外部でコマンドを実行したりカーソルを開くことはできません。トランザクションには明確な存続期間がありますので、完了後にトランザクションを使おうとすると例外が発生します。また、トランザクションは自動コミットであり、手動コミットはできません。</p> + + <p>このトランザクションモデルは、ユーザーが同時に 2 つの異なるタブを使用して ウェブ アプリのインスタンスを 2 つ開いた場合に何が起きるかを考慮すると、とても役に立ちます。トランザクショナルな操作がなければ、2 つのインスタンスでお互いの変更点が干渉するでしょう。データベースのトランザクションについて詳しくない場合は、<a class="link-https" href="https://en.wikipedia.org/wiki/Database_transaction" title="https://secure.wikimedia.org/wikipedia/en/wiki/Database_transaction">Wikipedia の Database transaction の記事</a> (<a class="link-https" href="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" title="トランザクション">日本語版</a>) をご覧ください。また、定義の章の<a href="#gloss_transaction">トランザクション</a>もご覧ください。</p> + </li> + <li> + <p><strong>IndexedDB API はほぼ非同期です。</strong>API はデータを戻り値として返しません。代わりに、コールバック関数を渡さなければなりません。同期的な方法でデータベースに値を "保存" したり、データベースから値を "取り出す" ことはありません。代わりに、データベースで実行する操作を "要求" します。操作が完了すると DOM イベントによって通知され、イベントの種類によって操作が成功したか失敗したかを知ることができます。これは、始めは若干複雑に聞こえますが、健全化対策が組み込まれています。また、<a href="/ja/docs/DOM/XMLHttpRequest" title="https://developer.mozilla.org/en/xmlhttprequest">XMLHttpRequest</a> が動作する方法と同様です。</p> + </li> + <li> + <p><strong>IndexedDB は多くのリクエストを使用します。</strong>リクエストは前述のとおり、成功または失敗の DOM イベントを受け取るオブジェクトです。これらは <code>onsuccess</code> および <code>onerror</code> プロパティを持っています。また、<code>addEventListener()</code> および <code>removeEventListener()</code> を呼び出すことができます。さらに、リクエストの状態を示すプロパティである <code>readyState</code>、<code>result</code>、<code>errorCode</code> を持っています。<code>result</code> プロパティはとりわけ魔法のようであり、リクエストを生成した方法に応じてさまざまなもの (例えば <code>IDBCursor</code> インスタンス、あるいはデータベースに挿入した値に対するキー) になります。</p> + </li> + <li> + <p><strong>IndexedDB は結果が使用可能であることを通知するために、DOM イベントを使用します。</strong>DOM イベントは必ず <code>type</code> プロパティを持っています (IndexedDB では、一般的に <code>"success"</code> または <code>"error"</code> が設定されます)。また、DOM イベントは <code>target</code> プロパティも持っており、イベントがどこで生じたかを示します。ほとんどの場合、イベントの <code>target</code> は、何らかのデータベース操作の実行結果として生成された <code>IDBRequest</code> オブジェクトです。成功イベントは伝播せず、またキャンセルできません。一方、エラーイベントは伝播しますし、キャンセルも可能です。エラーイベントはキャンセルしない限り、実行中のあらゆるトランザクションを中止させますので、とても重要です。</p> + </li> + <li> + <p><strong>IndexedDB はオブジェクト指向です。</strong>IndexedDB は、行と列の集合で表されるテーブルによるリレーショナルデータベースではありません。この重要かつ根本的な違いが、アプリケーションの設計や構築の方法に影響を与えます。</p> + + <p>伝統的なリレーショナルデータストアでは、データを示す行と、名前付きでデータの型を示す列の集合を保存するテーブルを持ちます。一方、IndexedDB はデータの型と、単に持続的な JavaScript オブジェクトを保存するためのオブジェクトストアを作成しなければなりません。それぞれのオブジェクトストアは問い合わせや反復処理を効率的に行うためのインデックスの集合を持つことができます。オブジェクト指向データベース管理システムについて詳しくない場合は、<a href="https://en.wikipedia.org/wiki/Object_database" title="http://en.wikipedia.org/wiki/Object_database">Wikipedia の Object database の記事</a> (<a href="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" title="オブジェクトデータベース">日本語版</a>) をご覧ください。</p> + </li> + <li> + <p><strong>IndexedDB は Structured Query Language (<abbr>SQL</abbr>) を使用しません。</strong>IndexedDB はカーソルを生成するインデックスでクエリーを使用しており、結果セットで反復処理を行うために使用します。NoSQL システムについて詳しくない場合は、<a href="https://en.wikipedia.org/wiki/NoSQL" title="http://en.wikipedia.org/wiki/NoSQL">Wikipedia の NoSQL の記事</a> (<a href="https://ja.wikipedia.org/wiki/NoSQL" title="NoSQL">日本語版</a>) をご覧ください。</p> + </li> + <li> + <p><a name="origin"><strong>IndexedDB は同一生成元ポリシーに従います。</strong></a>生成元は、スクリプトを実行したドメイン、アプリケーション層プロトコル、ドキュメントの URL のポートです。それぞれの生成元が、自身に関連付けられたデータベースセットを持ちます。すべてのデータベースが、どの生成元に所属するかを識別する名称を持ちます。</p> + + <p>IndexedDB に与えられたセキュリティ境界は、アプリケーションが別の生成元のデータにアクセスできないようにします。例えば <a href="http://www.example.com/app/" rel="freelink">http://www.example.com/app/</a> のアプリやページは、同一生成元である <a href="http://www.example.com/dir/" rel="freelink">http://www.example.com/dir/</a> からデータを取り出すことができます。しかし、生成元が異なる <a href="http://www.example.com:8080/dir/" rel="freelink">http://www.example.com:8080/dir/</a> (ポートが異なる) や <a class="link-https" href="https://www.example.com/dir/" rel="freelink">https://www.example.com/dir/</a> (プロトコルが異なる) からデータを取り出すことはできません。</p> + + <div class="note"><strong>注記</strong>: サードパーティの window コンテンツ (例えば {{htmlelement("iframe")}} コンテンツ) は、ブラウザーで<a href="https://support.mozilla.org/kb/disable-third-party-cookies">サードパーティ Cookie を常に拒否する</a>ように設定していない限り、自身が組み込まれた生成元の IndexedDB ストアにアクセスできます ({{bug("1147821")}} をご覧ください)。</div> + </li> +</ul> + +<h2 id="definitions" name="definitions">定義</h2> + +<p>この章では、IndexedDB API で使用する用語について定義および説明します。</p> + +<h3 id="database" name="database">データベース</h3> + +<dl> + <dt><a name="gloss_database">データベース (database)</a></dt> + <dd>主に 1 個以上の<a href="#gloss_object_store" title="#gloss_object_store"><em>オブジェクトストア</em></a>で構成される、情報のリポジトリです。それぞれのデータベースが以下のものを持ちます: + <ul> + <li>名称。これは特定の生成元に所属するデータベースを識別しており、データベースの存続期間を通じて不変です。名称は任意の文字列値です (空文字列を含む)。</li> + <li> + <p>現在の<a href="#gloss_version"><em>バージョン</em></a>。始めにデータベースを生成したとき、バージョンは特に指定しない限り整数の 1 になります。それぞれのデータベースは、任意の時点でバージョンを 1 つだけ持ちます。</p> + </li> + </ul> + </dd> + <dt><a name="durable">永続性 (durable)</a></dt> + <dd> + <p>以前の Firefox では、IndexedDB に<strong>永続性</strong>がありました。つまり、読み書きトランザクションにおいて、{{domxref("IDBTransaction.oncomplete")}} が発生するのは、すべてのデータがディスク上に実際に書き込まれている(フラッシュされている)ことが保証されたときに限ります。</p> + + <p>Firefox 40 以降、IndexedDB トランザクションはパフォーマンスを向上させるために、永続性の保証を緩和しました ({{Bug("1112702")}} を参照)。これは IndexedDB をサポートする他のブラウザーと同じ動作です。この場合、{{Event("complete")}} イベントは OS がデータの書き込みを指示した時点で発生しますが、実際にはデータがディスク上に反映されていない可能性があります。これによりイベントをより早く発生させられますが、データをディスク上に反映する前に OS のクラッシュや電源断が発生するとトランザクション全体を失う危険性が若干あります。このような破壊的な事象はまれですので、ほとんどの利用者は心配する必要がないでしょう。</p> + + <div class="note"> + <p><strong>注記</strong>: Firefox では、何らかの理由 (例えば、後で再計算できない重要なデータを保存する) で永続性を保証したい場合は、実験的 (非標準) な <code>readwriteflush</code> モード ({{domxref("IDBDatabase.transaction")}} を参照) を使用してトランザクションを生成すると、<code>complete</code> イベントを発生させる前にディスクへの反映を強制させることができます。これは現在実験的な扱いであり、<code>about:config</code> で <code>dom.indexedDB.experimental</code> を <code>true</code> に設定した場合に限り使用できます。</p> + </div> + </dd> + <dt><a name="gloss_object_store">オブジェクトストア (object store)</a></dt> + <dd> + <p>データベースにデータを保存する仕組みです。オブジェクトストアはレコードを持続的に保持しており、これはキーと値のペアです。オブジェクトストア内のレコードは、<em><a href="#gloss_key">キー</a></em>によって昇順に整列して保存されています。</p> + + <p>すべてのオブジェクトストアは、データベース内で一意な名称を持たなければなりません。オブジェクトストアは、任意で<em><a href="#gloss_keygenerator">キージェネレーター</a></em>や<em><a href="#gloss_keypath">キーパス</a></em>を持つことができます。オブジェクトストアがキーパスを持つ場合は、<em><a href="#gloss_inline_key">インラインキー</a></em>を使用します。それ以外の場合は、<em><a href="#gloss_outofline_key">アウトオブラインキー</a></em>を使用します。</p> + + <p>オブジェクトストアのリファレンスドキュメントとして、{{domxref("IDBObjectStore")}} をご覧ください。</p> + </dd> + <dt><a name="gloss_version">バージョン (version)</a></dt> + <dd>始めにデータベースを生成したとき、バージョンは整数の 1 になります。それぞれのデータベースは、一度に 1 つのバージョンを持ちます。一度に複数のバージョンを持つことはできません。バージョンを変更する唯一の方法は、現在のバージョンより大きなバージョンでデータベースを開くことです。これは <a href="/ja/docs/Web/API/IDBVersionChangeRequest"><code>versionchange</code></a> <em>トランザクション</em>を開始して、<a href="/ja/docs/Web/Reference/Events/upgradeneeded_indexedDB"><code>upgradeneeded</code></a> イベントが発生します。データベースのスキーマを更新できる唯一の場所が、このイベントのハンドラ内です。</dd> + <dd>注記: この定義は<a href="http://dvcs.w3.org/hg/IndexedDB/raw-file/tip/Overview.html">直近の仕様書</a>で説明されており、最新のブラウザーのみ実装しています。古いブラウザーは非推奨かつ削除済みの <a href="/ja/docs/Web/API/IDBDatabase#setVersion()" title="IndexedDB/IDBDatabase#setVersion()"><code>IDBDatabase.setVersion()</code></a> メソッドを実装しています。</dd> + <dt><a name="gloss_database_connection">データベース接続 (database connection)</a></dt> + <dd><em><a href="#gloss_database">データベース</a></em>を開くことで生成される操作です。データベースは同時に複数の接続を持つことができます。</dd> + <dt><a name="gloss_transaction">トランザクション (transaction)</a></dt> + <dd> + <p>特定のデータベースで行う、原子性を持つデータアクセスやデータ変更の操作のセットです。これは、データベース内のデータと対話する手段です。実際は、データベース内のデータの読み取りや変更はトランザクション内で実施しなければなりません。</p> + + <p>書き込みトランザクションの<a href="#scope"><em>スコープ</em></a>が重ならない限り、ひとつのデータベース接続で同時に複数のアクティブなトランザクションが存在できます。トランザクションのスコープは生成時に定義され、トランザクションがどのオブジェクトストアと対話できるかや、トランザクションの持続期間にわたって保持し続けるかを示します。よって例えば、データベース接続で <code>flyingMonkey</code> オブジェクトストアのみ対象とするスコープを持つ書き込みトランザクションがすでに存在するとき、<code>unicornCentaur</code> オブジェクトストアや <code>unicornPegasus</code> オブジェクトストアをスコープで持つ別のトランザクションを開始できます。読み取りトランザクションは、スコープが重なっていても複数実行できます。</p> + + <p>トランザクションは持続期間が短いものを除き、長時間のトランザクションがストレージ資源をロックする状況から解放するために、ブラウザーが終了させることができます。トランザクションは中止させることができ、トランザクションによるデータベースの変更箇所はロールバックされます。また、開始するトランザクションや中止するトランザクションを待つ必要はありません。</p> + + <p>トランザクションには <code>readwrite</code>、<code>readonly</code>、<code>versionchange</code> の 3 つのモードがあります。オブジェクトストアやインデックスの生成および削除は、<a href="/ja/docs/Web/Reference/Events/versionchange_indexedDB"><code>versionchange</code></a> トランザクションを使用する場合に限り実行できます。トランザクションのタイプについて詳しくは、<a href="/ja/docs/Web/API/IndexedDB_API" title="https://developer.mozilla.org/en/IndexedDB">IndexedDB</a> のリファレンスをご覧ください。</p> + + <p>すべての操作はトランザクション内で発生しますので、トランザクションは IndexedDB の重要な概念です。トランザクションについて、特にバージョニングとの関係については、{{domxref("IDBTransaction")}} および関連ドキュメントをご覧ください。ここにリファレンスドキュメントもあります。</p> + </dd> + <dt><a name="gloss_request">リクエスト (request)</a></dt> + <dd>データベースの読み書きを実施する操作です。すべてのリクエストは、ひとつの読み取りまたは書き込みの操作を表します。</dd> + <dt><a name="gloss_index">インデックス (index)</a></dt> + <dd> + <p>インデックスは<em>参照先オブジェクトストア (referenced object store)</em>から呼び出されて、別のオブジェクトストアのレコードを検索するための特別なオブジェクトストアです。インデックスは持続的なキーと値のストレージであり、インデックスのレコードの値は、参照先オブジェクトストアのレコードのキーです。インデックス内のレコードは、参照先オブジェクトストアでレコードが挿入、更新、削除されるたびに、自動的に収集されます。インデックス内の各レコードは参照先オブジェクトストア内のレコードをひとつだけ示すことができますが、複数のインデックスが同一のオブジェクトストアを参照することもできます。オブジェクトストアが変更されると、そのオブジェクトストアを参照するすべてのインデックスが自動的に更新されます。</p> + + <p>代わりに、<a href="#gloss_key">キー</a>を使用してオブジェクトストア内のレコードを検索することもできます。</p> + + <p>インデックスの使用法について詳しくは、<a href="/ja/docs/Web/API/IndexedDB_API/Using_IndexedDB#Using_an_index" title="IndexedDB/Using_IndexedDB#Using_an_index">IndexedDB を使用する</a>をご覧ください。インデックスのリファレンスドキュメントとして、<a href="https://wiki.developer.mozilla.org/ja/docs/Web/API/IDBKeyRange" rel="internal">IDBKeyRange</a> をご覧ください。</p> + </dd> +</dl> + +<h3 id="key" name="key">キーと</h3> + +<dl> + <dt><a name="gloss_key">キー (key)</a></dt> + <dd> + <p>オブジェクトストアに保存された値は、このデータ値によって編成および取り出しされます。オブジェクトストアは<em><a href="#gloss_keygenerator">キージェネレーター</a></em>、<em><a href="#gloss_keypath">キーパス</a></em>、明示的に指定した値の、3 種類の生成源のいずれかからキーを得られます。キーは、自身の前にあるものより大きな数値を持つデータ型であることが必要です。オブジェクトストア内の各レコードはオブジェクトストア内で一意のキーを持たなければならず、オブジェクトストア内で複数のレコードが同じキーを持つことはできません。</p> + + <p>キーは <a href="/ja/docs/JavaScript/Reference/Global_Objects/String" title="JavaScript/Reference/Global_Objects/String">文字列</a>、<a href="/ja/docs/JavaScript/Reference/Global_Objects/Date" title="JavaScript/Reference/Global Objects/Date">date</a>、浮動小数点数値、<a href="/ja/docs/JavaScript/Reference/Global_Objects/Array" title="JavaScript/Reference/Global Objects/Array">配列</a>のいずれかの型を使用できます。配列では、キーは空の値から無限大までの範囲を使用できます。また、配列の中に配列を含めることができます。文字列または整数値のキーしか使用できないという条件はありません。</p> + + <p>代わりに、<em><a href="#gloss_index">インデックス</a>を使用してオブジェクトストア内のレコードを検索することもできます。</em></p> + </dd> + <dt><a name="gloss_keygenerator">キージェネレーター (key generator)</a></dt> + <dd>指定した順序で新たなキーを生成する仕組みです。オブジェクトストアがキージェネレーターを持たない場合は、保存するレコードのキーをアプリケーションが提供しなければなりません。ジェネレーターはストア間で共有しません。これはむしろブラウザーの実装の細部であり、Web 開発において実際にはキージェネレーターの生成やアクセスは行いません。</dd> + <dt><a name="gloss_inline_key">インラインキー (in-line key)</a></dt> + <dd>保存される値の一部として保存されるキーです。これは<em>キーパス</em>を使用して見つけます。インラインキーは、ジェネレーターを使用して生成できます。キーが生成されると、キーパスを使用してキーを値の中に保存したり、キーとして使用したりすることができます。</dd> + <dt><a name="gloss_outofline_key">アウトオブラインキー (out-of-line key)</a></dt> + <dd>保存する値とは別に保存されるキーです。</dd> + <dt><a name="gloss_keypath">キーパス (key path)</a></dt> + <dd>オブジェクトストアやインデックスのどこからブラウザーがキーを取り出すべきかを定義します。有効なキーパスは空文字列、JavaScript の識別子、ピリオドで区切られた複数の JavaScript の識別子、あるいはそれらを収めた配列のいずれかを含むことができます。空白を含むことはできません。</dd> + <dt><a name="gloss_value">値 (value)</a></dt> + <dd> + <p>それぞれのレコードは値を持っており、<a href="/ja/docs/JavaScript/Reference/Global_Objects/Boolean" rel="internal" title="JavaScript/Reference/Global_Objects/Boolean">論理値</a>、<a href="/ja/docs/JavaScript/Reference/Global_Objects/Number" rel="internal" title="JavaScript/Reference/Global_Objects/Number">数値</a>、<a href="/ja/docs/JavaScript/Reference/Global_Objects/String" title="https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/String">文字列</a>、<a href="/ja/docs/JavaScript/Reference/Global_Objects/Date" title="JavaScript/Reference/Global Objects/Date">date</a>、<a href="/ja/docs/JavaScript/Reference/Global_Objects/Object" title="JavaScript/Reference/Global Objects/Object">オブジェクト</a>、<a href="/ja/docs/JavaScript/Reference/Global_Objects/Array" rel="internal" title="JavaScript/Reference/Global_Objects/Array">配列</a>、<a href="/ja/docs/JavaScript/Reference/Global_Objects/RegExp" rel="internal" title="JavaScript/Reference/Global_Objects/RegExp">正規表現</a>、<a href="/ja/docs/JavaScript/Reference/Global_Objects/undefined" title="JavaScript/Reference/Global_Objects/undefined">undefined</a>、null を含む、JavaScript で表現可能なものをどれでも含むことができます。</p> + + <p>オブジェクトまたは配列を保存する場合は、それらのプロパティや値もまた、有効な値をどれでも持つことができます。</p> + + <p>また、<a href="/ja/docs/DOM/Blob" title="DOM/Blob">Blob</a> やファイルも保存可能です。<a href="http://dvcs.w3.org/hg/IndexedDB/raw-file/tip/Overview.html">仕様書</a> をご覧ください。</p> + </dd> +</dl> + +<h3 id="range" name="range">レンジとスコープ</h3> + +<dl> + <dt id="scope"><a id="gloss_scope" name="gloss_scope">スコープ (scope)</a></dt> + <dd>トランザクションの適用先であるオブジェクトストアやインデックスのセットです。読み取りのみのトランザクションのスコープは、同時に重ね合ったり実行することができます。一方、書き込みトランザクションのスコープは重ね合うことができません。同時に同一のスコープで複数のトランザクションを開始することはできますが、それらはキューに収められ、順番に実行されます。</dd> + <dt id="cursor"><a id="gloss_cursor" name="gloss_cursor">カーソル (cursor)</a></dt> + <dd><em>キーレンジ</em>に属する複数のレコードにわたって反復処理を行うための仕組みです。カーソルは、反復処理を行うインデックスやオブジェクトストアがどれかを示す source を持ちます。またレンジ内の位置や、レコードキーの順序について増加方向に移動しているか減少方向に移動しているかの情報も持ちます。カーソルのリファレンスドキュメントとして、<a href="/ja/docs/Web/API/IDBCursor">IDBCursor</a> や <a href="/ja/docs/Web/API/IDBCursorSync">IDBCursorSync</a> をご覧ください。</dd> + <dt id="key_range"><a id="gloss_keyrange" name="gloss_keyrange">キーレンジ (key range)</a></dt> + <dd> + <p>キーとして使用する、何らかのデータ型の連続的な区間です。キーまたはキーレンジを使用して、オブジェクトストアやインデックスからレコードを取り出すことができます。下限または上限を使用して、レンジを制限またはフィルターリングできます。例えばキーが x から y の間であるすべての値に対して、反復処理を行うことができます。</p> + + <p>キーレンジのリファレンスドキュメントとして、{{domxref("IDBKeyRange")}} をご覧ください。</p> + </dd> +</dl> + +<h2 id="limitations" name="limitations">制限</h2> + +<p>IndexedDB は、クライアントサイドのストレージが必要なほとんどのケースに対応します。しかし、以下のような一部のケースに対して設計されてはいません:</p> + +<ul> + <li>国際化対応の整列。あらゆる言語について、同じ方法で文字列を整列することはできないため、国際化対応の整列はサポートされていません。特定の国際化順序でデータをデータベースに保存することはできませんが、データベースから読み出したデータを自身で整列することはできます。ただし Firefox 43 より、実験的なフラグをを有効化することで<a href="/ja/docs/Web/API/IndexedDB_API/Using_IndexedDB#Locale-aware_sorting">ロケール対応のソート</a>が可能になりました (現在は Firefox 限定)。</li> + <li>同期処理。API は、サーバーサイドのデータベースとの同期を考慮して設計されていません。クライアントサイドの IndexedDB とサーバーサードのデータベースで同期するように、コードを記述しなければなりません。</li> + <li>全文検索。API に、SQL の <code>LIKE</code> に相当するものは存在しません。</li> +</ul> + +<p>加えて、以下のような状況でブラウザーがデータベースを削除する場合があることを意識してください:</p> + +<ul> + <li>ユーザーが削除を要求した場合。Cookie、ブックマーク、保存されたパスワード、IndexedDB のデータを含む、Web サイト用に保存されたすべてのデータをユーザーが削除できる設定が多くのブラウザーに存在します。</li> + <li>ブラウザーがプライベートブラウジングモードである場合。"プライベートブラウジング" (Firefox) や "シークレット" (Chrome) といったモードを持つブラウザーがあります。セッションの終了時に、ブラウザーはすべてのデータベースを削除します。</li> + <li>ディスクまたはクォータの容量制限に達した場合。</li> + <li>データが破損した場合。</li> + <li>機能に対して互換性のない変更が施された場合。</li> +</ul> + +<p>正確な状況やブラウザーの機能は時間とともに変化しますが、ブラウザーベンダーの一般的な考え方は、可能な限りデータを維持するよう最大限に努力することです。</p> + +<h2 id="next" name="next">次のステップ</h2> + +<p>主要な概念を習得したら、より具体的なことを学べるようになります。API の使用方法に関するチュートリアルである、<a href="/ja/docs/Web/API/IndexedDB_API/Using_IndexedDB" title="IndexedDB/IndexedDB primer">IndexedDB を使用する</a>をご覧ください。</p> + +<h2 id="See_also" name="See_also">関連情報</h2> + +<ul> + <li><a href="http://www.w3.org/TR/IndexedDB/" title="http://www.w3.org/TR/IndexedDB/"><span style="direction: ltr;">Indexed Database API 仕様</span></a></li> + <li><a href="/ja/docs/Web/API/IndexedDB_API" title="IndexedDB">IndexedDB API リファレンス</a></li> + <li><a href="/ja/docs/Web/API/IndexedDB_API/Using_IndexedDB" title="IndexedDB/Using IndexedDB">IndexedDB を使用する</a></li> + <li><a href="http://msdn.microsoft.com/scriptjunkie/gg679063.aspx" title="http://msdn.microsoft.com/scriptjunkie/gg679063.aspx">IndexedDB — The Store in Your Browser</a></li> +</ul> diff --git a/files/ja/orphaned/web/javascript/reference/errors/typed_array_invalid_arguments/index.html b/files/ja/orphaned/web/javascript/reference/errors/typed_array_invalid_arguments/index.html new file mode 100644 index 0000000000..b02af7aa13 --- /dev/null +++ b/files/ja/orphaned/web/javascript/reference/errors/typed_array_invalid_arguments/index.html @@ -0,0 +1,78 @@ +--- +title: 'TypeError: invalid arguments' +slug: orphaned/Web/JavaScript/Reference/Errors/Typed_array_invalid_arguments +tags: + - Error + - Errors + - JavaScript + - TypeError +translation_of: Web/JavaScript/Reference/Errors/Typed_array_invalid_arguments +original_slug: Web/JavaScript/Reference/Errors/Typed_array_invalid_arguments +--- +<div>{{jsSidebar("Errors")}}</div> + +<h2 id="メッセージ">メッセージ</h2> + +<pre class="syntaxbox">TypeError: invalid arguments (Firefox)</pre> + +<h2 id="エラータイプ">エラータイプ</h2> + +<p>{{jsxref("TypeError")}}</p> + +<h2 id="何がうまくいかなかったのか?">何がうまくいかなかったのか?</h2> + +<p>新しい typed array を生成するために、<a href="/ja/docs/Web/JavaScript/Typed_arrays">Typed array</a> コンストラクターに以下のいずれかの値を渡す必要があります。</p> + +<ul> + <li>長さ</li> + <li>ほかの typed array</li> + <li>配列状オブジェクト</li> + <li>反復可能オブジェクト</li> + <li>{{jsxref("ArrayBuffer")}} オブジェクト</li> +</ul> + +<p>そのほかのコンストラクター引数では、有効な typed array を生成できません。</p> + +<h2 id="例">例</h2> + +<p>Typed array、たとえば {{jsxref("Uint8Array")}} は文字列から構成できません。事実、文字列はまったく typed array にすることはできません。</p> + +<pre class="brush: js example-bad">var ta = new Uint8Array("nope"); +// TypeError: invalid arguments +</pre> + +<p>有効な {{jsxref("Uint8Array")}} を生成するほかの方法:</p> + +<pre class="brush: js example-good">// From a length +var uint8 = new Uint8Array(2); +uint8[0] = 42; +console.log(uint8[0]); // 42 +console.log(uint8.length); // 2 +console.log(uint8.BYTES_PER_ELEMENT); // 1 + +// From an array +var arr = new Uint8Array([21,31]); +console.log(arr[1]); // 31 + +// From another TypedArray +var x = new Uint8Array([21, 31]); +var y = new Uint8Array(x); +console.log(y[0]); // 21 + +// From an ArrayBuffer +var buffer = new ArrayBuffer(8); +var z = new Uint8Array(buffer, 1, 4); + +// From an iterable +var iterable = function*(){ yield* [1,2,3]; }(); +var uint8 = new Uint8Array(iterable); +// Uint8Array[1, 2, 3] +</pre> + +<h2 id="関連項目">関連項目</h2> + +<ul> + <li><a href="/ja/docs/Web/JavaScript/Typed_arrays">Typed array</a></li> + <li>{{jsxref("ArrayBuffer")}}</li> + <li>{{jsxref("Uint8Array")}}</li> +</ul> |