diff --git a/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/current/compatibility.mdx b/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/current/compatibility.mdx
index f779d9c6..80ea54c8 100644
--- a/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/current/compatibility.mdx
+++ b/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/current/compatibility.mdx
@@ -23,14 +23,14 @@ import TranslationBanner from '/src/components/_translation-ja-jp.mdx';
| ScalarDL Ledger/Auditor バージョン | ScalarDL Java Client SDK バージョン |
|:------------------------------|:-------------------------------|
-| 3.11 | 3.8 - 3.11 |
-| 3.10 | 3.8 - 3.10 |
-| 3.9 | 3.8 - 3.9 |
-| 3.8 | 3.8 |
+| 3.12 | 3.9 - 3.12 |
+| 3.11 | 3.9 - 3.11 |
+| 3.10 | 3.9 - 3.10 |
+| 3.9 | 3.9 |
:::note
-- クライアントツール ([ScalarDL Client Command](./scalardl-command-reference.mdx) および [ScalarDL Schema Loader](./schema-loader.mdx)) は、ScalarDL Java Client SDK と同じものとみなすことができます。つまり、クライアントツールには ScalarDL Java Client SDK と同じ互換性ルールを適用できます。
+- クライアントツール ([ScalarDL Client Command](./scalardl-command-reference.mdx) および [ScalarDL Schema Loader](./schema-loader.mdx))、および [ScalarDL HashStore](./getting-started-hashstore.mdx) と [ScalarDL TableStore](./getting-started-tablestore.mdx) 用の Java Client SDK は、ScalarDL Java Client SDK と同等であるため、同じ互換性ルールがそれぞれに適用されます。
- ScalarDL の新しいデプロイメントを作成する場合は、ScalarDL のバージョンと同じバージョンの ScalarDL Schema Loader を使用することをお勧めします。
- ScalarDL のマイナーバージョンまたはパッチバージョンをアップグレードする場合、基本的に既存のスキーマを更新する必要はありません。つまり、基本的に、ScalarDL のマイナーバージョンまたはパッチバージョンをアップグレードするときに、ScalarDL Schema Loader を再実行する必要はありません。
- ScalarDL が新しいマイナーバージョンで提供する新しい機能を使用する場合は、同じバージョンまたはそれ以降のバージョンのクライアントツールの利用、もしくは既存のスキーマの再作成 (または更新) が必要となる場合があります。詳細については、各機能の関連ドキュメントを参照してください。
@@ -41,11 +41,11 @@ import TranslationBanner from '/src/components/_translation-ja-jp.mdx';
- ScalarDL と Client SDK の **メジャー** バージョンが異なる場合、互換性がなく、**サポートされません**。
- ScalarDL と Client SDK の **メジャー** バージョンが同じで、**マイナー** バージョンが異なる場合、ScalarDL のバージョンは Client SDK のバージョン以上である必要があります。例:
- - **サポート対象:** ScalarDL 3.9 と Client SDK 3.8 の組み合わせ
- - **サポート対象外:** ScalarDL 3.8 と Client SDK 3.9 の組み合わせ
+ - **サポート対象:** ScalarDL 3.12 と Client SDK 3.11 の組み合わせ
+ - **サポート対象外:** ScalarDL 3.11 と Client SDK 3.12 の組み合わせ
- **メジャー** バージョンと **マイナー** バージョンが同じ場合は、ScalarDL と Client SDK 間で異なる **パッチ** バージョンを使用できます。例:
- - **サポート対象:** ScalarDL 3.9.2 と Client SDK 3.9.0 の組み合わせ
- - **サポート対象:** ScalarDL 3.9.0 Client SDK 3.9.2 の組み合わせ
+ - **サポート対象:** ScalarDL 3.12.2 と Client SDK 3.12.0 の組み合わせ
+ - **サポート対象:** ScalarDL 3.12.0 と Client SDK 3.12.2 の組み合わせ
## ScalarDL と ScalarDB Cluster の互換性
@@ -53,8 +53,7 @@ ScalarDL と一緒に ScalarDB Cluster を使用する場合は、次のバー
| ScalarDL バージョン | ScalarDB Cluster バージョン |
|:---------------|:---------------------------------------------|
+| 3.12 | 3.16 以降のマイナー (3.X) バージョン (例: 3.16、3.17、3.18) |
| 3.11 | 3.15 以降のマイナー (3.X) バージョン (例: 3.15、3.16、3.17) |
| 3.10 | 3.14 以降のマイナー (3.X) バージョン (例: 3.14、3.15、3.16) |
| 3.9 | 3.12 以降のマイナー (3.X) バージョン (例: 3.12、3.13、3.14) |
-| 3.8.2 | 3.12 以降のマイナー (3.X) バージョン (例: 3.12、3.13、3.14) |
-| 3.8.0 - 3.8.1 | 3.8 以降のマイナー (3.X) バージョン (例: 3.8、3.9、3.10) |
diff --git a/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/current/getting-started-hashstore.mdx b/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/current/getting-started-hashstore.mdx
new file mode 100644
index 00000000..5713dcb5
--- /dev/null
+++ b/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/current/getting-started-hashstore.mdx
@@ -0,0 +1,385 @@
+---
+tags:
+ - Community
+ - Enterprise
+displayed_sidebar: docsJapanese
+---
+
+import Tabs from '@theme/Tabs';
+import TabItem from '@theme/TabItem';
+import JavadocLink from "/src/theme/JavadocLink.js";
+import StartupLedger from '/src/components/ja-jp/_getting-started-startup-ledger.mdx';
+import TranslationBanner from '/src/components/_translation-ja-jp.mdx';
+
+# ScalarDL HashStore をはじめよう
+
+
+
+ScalarDL HashStore は、低レベルの台帳抽象化の上に構築された高レベルの抽象化です。デジタル証拠保全専用に設計されており、オブジェクト真正性管理とコレクション真正性管理の2つの機能を提供します。HashStore を使用することで、[コントラクト](design.mdx#コントラクト)を記述することなく、不変な方法でオブジェクトのハッシュ値とオブジェクトのコレクションを管理し、真正性管理アプリケーションを迅速かつ簡単に開発できます。
+
+このスタートガイドでは、お好みのデータベースで ScalarDL HashStore を設定し、改ざん検知可能な方法でオブジェクトとコレクションを管理する方法について説明します。
+
+## ScalarDL HashStore とは?
+
+HashStore は、オブジェクト真正性管理とコレクション真正性管理の2つの機能を提供します。オブジェクト真正性管理では、ファイル、監査ログ、さらにはファイルまたはオブジェクトストレージ内のディレクトリなど、あらゆる種類のオブジェクトの真正性を管理できます。コレクション真正性管理では、コレクション内に存在するオブジェクトを管理できます。例えば、監査プロセスで検証が必要なオブジェクトのコレクションを作成できます。
+
+HashStore がこれらの機能をどのように実現するかについては、下記の[オブジェクト真正性の管理](#オブジェクト真正性の管理)と[コレクション真正性の管理](#コレクション真正性の管理)の例を参照してください。
+
+
+
+## Client SDK のダウンロード
+
+次に、ScalarDL HashStore クライアントツールを使用します。デプロイされた ScalarDL バージョンと同じバージョンを指定して、ツールをダウンロードするために次のコマンドを実行します:
+
+```console
+VERSION=$(grep SCALARDL_VERSION .env | awk -F= '{print $2}')
+```
+
+次に、以下のコマンドを実行してツールをダウンロードします:
+
+```console
+curl -OL https://github.com/scalar-labs/scalardl/releases/download/v$VERSION/scalardl-hashstore-java-client-sdk-$VERSION.zip
+unzip scalardl-hashstore-java-client-sdk-$VERSION.zip
+mv scalardl-hashstore-java-client-sdk-$VERSION client
+```
+
+## クライアントプロパティの設定
+
+ScalarDL HashStore と対話する前に、クライアントを設定する必要があります。クライアントに必要な最小限のプロパティを含む設定ファイルを作成するには、以下のコマンドを実行します:
+
+```console
+cat << 'EOF' > client.properties
+# A host name for ScalarDL Ledger.
+scalar.dl.client.server.host=localhost
+
+# An ID for the certificate holder. This must be configured for each private key and must be unique in the system.
+scalar.dl.client.cert_holder_id=foo
+
+# A path to the certificate file.
+scalar.dl.client.cert_path=./fixture/client.pem
+
+# A path to the private key file.
+scalar.dl.client.private_key_path=./fixture/client-key.pem
+EOF
+```
+
+このチュートリアルでは、ScalarDL Ledger のホスト名に `localhost` を使用できます。秘密鍵と証明書については、[`scalardl-samples` リポジトリの `fixture` ディレクトリ](https://github.com/scalar-labs/scalardl-samples/tree/master/fixture)で提供されているもの (それぞれ `client-key.pem` と `client.pem`) を使用できます。証明書ホルダーには、任意の一意の ID を指定できます。
+
+:::warning
+
+本番環境では、サンプルの秘密鍵と証明書を使用しないでください。独自の証明書を取得する方法の詳細については、[証明書の取得方法](ca/caclient-getting-started.mdx)を参照してください。
+
+:::
+
+## ブートストラップ
+
+次に、以下のコマンドを実行して HashStore をブートストラップできます:
+
+```console
+client/bin/scalardl-hashstore bootstrap --properties client.properties
+```
+
+ブートストラップコマンドは、内部的にアイデンティティ情報 (証明書またはシークレット) と HashStore を使用するために必要な事前定義されたコントラクトを登録します。
+
+## オブジェクト真正性の管理
+
+HashStore のオブジェクト真正性管理では、`put-object` コマンドを使用してオブジェクトのハッシュ値を格納できます。以下の例のように、対象のオブジェクト ID とオブジェクトのハッシュ値を指定します。オブジェクト ID は、オブジェクトまたはファイルを識別する一意の ID である必要があります。例えば、オブジェクトのキーやファイルパスなどです。`metadata` オプションを使用して、オブジェクトに関連付けられた任意のメタデータを格納することもできます。
+
+まず、ファイルのハッシュ値を取得して、改ざん検知可能な台帳に格納します。
+
+:::note
+
+`sha256sum` コマンドは Linux 環境でのみ利用可能です。macOS 環境と Windows 環境では、それぞれ `shasum` と `certutil` が利用可能です。同じ SHA256 ハッシュ値を取得する方法の詳細については、これらのコマンドの使用方法を参照してください。
+
+:::
+
+```console
+echo "Alice created this file." > a.txt
+sha256sum a.txt
+```
+
+以下のハッシュ値が取得できるはずです:
+
+```console
+5c7440fb2273a247f78aadefbc511c680a84e7d44004abfaedef2b145151dab0 a.txt
+```
+
+以下のコマンドを実行して、ハッシュ値を格納できます:
+
+```console
+client/bin/scalardl-hashstore put-object --properties client.properties \
+--object-id a.txt \
+--hash 5c7440fb2273a247f78aadefbc511c680a84e7d44004abfaedef2b145151dab0 \
+--metadata '{"note": "created"}'
+```
+
+オブジェクトが更新された場合、同じ方法で新しいハッシュ値を格納できます。例えば、以下では下記のコマンドが実行されたと仮定します:
+
+```console
+echo "Alice updated this file." >> a.txt
+sha256sum a.txt
+```
+
+ハッシュ値として以下の結果が取得できるはずです:
+
+```console
+b97a42c87a46ffebe1439f8c1cd2f86e2f9b84dad89c8e9ebb257a19b6fdfe1c a.txt
+```
+
+次に、以下のようにハッシュ値を更新できます:
+
+```console
+client/bin/scalardl-hashstore put-object --properties client.properties \
+--object-id a.txt \
+--hash b97a42c87a46ffebe1439f8c1cd2f86e2f9b84dad89c8e9ebb257a19b6fdfe1c \
+--metadata '{"note": "updated"}'
+```
+
+以下のコマンドを実行して、オブジェクトの最新ステータスを取得することもできます:
+
+```console
+client/bin/scalardl-hashstore get-object --properties client.properties \
+--object-id a.txt
+```
+
+以下のような結果が得られるはずです:
+
+```console
+Result:
+{
+ "object_id" : "a.txt",
+ "hash_value" : "b97a42c87a46ffebe1439f8c1cd2f86e2f9b84dad89c8e9ebb257a19b6fdfe1c",
+ "metadata" : {
+ "note" : "updated"
+ }
+}
+```
+
+オブジェクトの真正性を検証したい場合は、まず検証したいオブジェクトの各バージョンについて、例えば `sha256sum` コマンドを使用して、ハッシュ値を再計算します。
+
+次に、再計算されたハッシュ値とバージョン ID を降順で指定して `compare-object-versions` コマンドを実行します。任意の数のバージョンを指定できます。バージョン ID は、出力で元の値と異なるハッシュ値を表示するためにのみ使用されるため、値が一意に識別できる限り、任意の文字列値を使用できます。
+
+:::note
+
+使用中の環境で `a.txt` ファイルの古いバージョンのハッシュ値を取得できない場合は、代わりに現在のバージョンのみを指定してください。
+
+:::
+
+```console
+client/bin/scalardl-hashstore compare-object-versions --properties client.properties \
+--object-id a.txt \
+--versions '[{"version_id": "v2", "hash_value": "b97a42c87a46ffebe1439f8c1cd2f86e2f9b84dad89c8e9ebb257a19b6fdfe1c"}, {"version_id": "v1", "hash_value": "5c7440fb2273a247f78aadefbc511c680a84e7d44004abfaedef2b145151dab0"}]}'
+```
+
+オブジェクトの再計算されたハッシュ値が台帳にあるものと同じ場合、以下の結果が表示されるはずです。
+
+```console
+Result:
+{
+ "status" : "correct",
+ "details" : "The status is correct.",
+ "faulty_versions" : [ ]
+}
+```
+
+誰かがファイル `a.txt` を以下のように改ざんしたとします:
+
+```txt
+Bob created this file.
+Alice updated this file
+```
+
+最新バージョンのハッシュ値は `1f75d715648a3b4b3a33ecd7428a3e7139d9357da7d38735c23bf38618ecf9c7` になります。以下のコマンドを実行して検証を実行できます:
+
+```console
+client/bin/scalardl-hashstore compare-object-versions --properties client.properties \
+--object-id a.txt \
+--versions '[{"version_id": "v2", "hash_value": "1f75d715648a3b4b3a33ecd7428a3e7139d9357da7d38735c23bf38618ecf9c7"}, {"version_id": "v1", "hash_value": "5c7440fb2273a247f78aadefbc511c680a84e7d44004abfaedef2b145151dab0"}]}'
+```
+
+以下のような結果が得られるはずです:
+
+```console
+Result:
+{
+ "status" : "faulty",
+ "details" : "A faulty version is found.",
+ "faulty_versions" : [ "v2" ]
+}
+```
+
+この検証プロセスは、データのハッシュ値と ScalarDL に保存されている対応するハッシュ値を比較することで、ScalarDL 外部のデータが変更されていないことを確認します。ScalarDL 内のデータ (この場合はハッシュ値) が改ざんされていないかどうかを検証するには、`validate-ledger` コマンドを使用できます。詳細については、[HashStore で管理されるデータの検証](#hashstore-で管理されるデータの検証)を参照してください。
+
+### ScalarDL Ledger と ScalarDB テーブル間でのオブジェクト状態の同期
+
+ScalarDL はデータ (「アセット」と呼ばれる) を改ざん検知可能な追記専用の方式で管理するため、データをその場で更新することはできず、やや柔軟性に欠ける方式でデータをモデル化する必要があります。これらの制限を軽減するために、ScalarDB を ScalarDL と併用できます。具体的には、ScalarDB 管理データベースへの ScalarDB の変更操作と並行して、ScalarDL への操作を実行できます。
+
+例えば、オブジェクト真正性管理では、`put-object` コマンド (および対応する API) は `--put-to-mutable` オプションを提供し、オブジェクトハッシュ値を格納する際に ScalarDB テーブルに任意のレコードを格納できます。このオプションの主要な使用例の1つは、ScalarDB 側でオブジェクトステータス (オブジェクトのハッシュ値が ScalarDL に正しく保存されているかどうか) を管理し、ScalarDB API を使用して対象オブジェクトを柔軟かつ効率的に識別できるようにすることです。このような場合、以下を行います:
+
+1. ScalarDB にテーブル (例: `objects`) を作成して、オブジェクトバージョンのハッシュ値が既に登録されているかどうかを管理します。
+1. `objects` テーブル内のハッシュ値未登録状態の対象オブジェクトをリストアップし、それらのオブジェクトのハッシュ値を格納します。
+1. ハッシュ値が ScalarDL に正常に登録された後、`objects` テーブルの状態を更新します。
+
+上記の3番目の手順は、`--put-to-mutable` オプションを使用して以下のコマンドを実行することで ACID 方式で実行する必要があります:
+
+```console
+client/bin/scalardl-hashstore put-object --properties client.properties \
+--object-id a.txt \
+--hash 5c7440fb2273a247f78aadefbc511c680a84e7d44004abfaedef2b145151dab0 \
+--put-to-mutable '{...}'
+```
+
+`--put-to-mutable` オプションの引数には、ScalarDB テーブルスキーマに応じて、名前空間名、テーブル名、パーティションキー、クラスタリングキー (存在する場合)、およびカラムを指定する必要があります。例は以下の通りです。
+
+```json
+{
+ "namespace": "myns",
+ "table": "objects",
+ "partition_key": [
+ { "column_name": "object_id", "value": "a.txt", "data_type": "TEXT" }
+ ],
+ "clustering_key": [
+ { "column_name": "version", "value": "1234aef", "data_type": "TEXT" }
+ ],
+ "columns": [
+ { "column_name": "status", "value": 3, "data_type": "INT" },
+ { "column_name": "size", "value": 10.000, "data_type": "DOUBLE" },
+ { "column_name": "timestamp", "value": 123456789, "data_type": "BIGINT" },
+ { "column_name": "comment", "value": "hash-registered", "data_type": "TEXT" }
+ ]
+}
+```
+
+## コレクション真正性の管理
+
+コレクション真正性管理では、集合の真正性を管理できます。例えば、ファイルストレージを使用して `compare-object-versions` コマンドを使用してファイルの真正性を管理する場合、監査プロセスで検証が必要なフォルダやオブジェクトの集合 (監査セット) についても真正性管理を行いたい場合があります。コレクション管理はこれらの使用例をカバーし、監査セットを保護します。
+
+システムが監査セットが予期せず変更されていないことを保証できない場合、悪意のあるユーザーがオブジェクトを不正に変更し、不正が発覚することを避けるために監査セットからそれを除去することができる可能性があります。したがって、監査セットの管理は、コレクション真正性管理の重要で主要な使用例です。
+
+以下のコマンドを実行して、監査セット用のコレクションを作成できます:
+
+```console
+client/bin/scalardl-hashstore create-collection --properties client.properties \
+--collection-id audit_set --object-ids a.txt --object-ids b.txt
+```
+
+コレクション ID は、コレクションを識別する一意の ID である必要があります。`--object-ids` オプションを使用して、オブジェクト ID のセットを指定できます。オブジェクト ID は単なる文字列値なので、任意の ID を指定できます。例えば、監査セットを階層的に表現するためにコレクション ID を格納できます。
+
+以下のコマンドを実行して、コレクションにオブジェクトを追加することもできます:
+
+```console
+client/bin/scalardl-hashstore add-to-collection --properties client.properties \
+--collection-id audit_set --object-ids c.txt --object-ids d.txt
+```
+
+また、以下のコマンドを実行して、コレクションからオブジェクトを削除できます:
+
+```console
+client/bin/scalardl-hashstore remove-from-collection --properties client.properties \
+--collection-id audit_set --object-ids a.txt
+```
+
+以下のコマンドを実行して、コレクションの最新ステータスを取得できます:
+
+```console
+client/bin/scalardl-hashstore get-collection --properties client.properties \
+--collection-id audit_set
+```
+
+以下のような結果が得られるはずです:
+
+```console
+Result:
+{"object_ids": ["d.txt", "c.txt", "b.txt"]}
+```
+
+監査セットが予期せず変更されていないことを確認するには、以下のコマンドを実行して監査セットの更新履歴を確認できます:
+
+```console
+client/bin/scalardl-hashstore get-collection-history --properties client.properties \
+--collection-id audit_set
+```
+
+以下のような結果が得られるはずです:
+
+```console
+Result:
+{
+ "collection_id" : "audit_set",
+ "collection_events" : [ {
+ "operation_type" : "remove",
+ "age" : 2,
+ "object_ids" : [ "a.txt" ]
+ }, {
+ "operation_type" : "add",
+ "age" : 1,
+ "object_ids" : [ "c.txt", "d.txt" ]
+ }, {
+ "operation_type" : "create",
+ "age" : 0,
+ "object_ids" : [ "a.txt", "b.txt" ]
+ } ]
+}
+```
+
+## HashStore で管理されるデータの検証
+
+ScalarDL では、すべてのデータが有効な状態にあることを確認するために、時々データを検証する必要があります。HashStore で管理されるデータを検証するには、`validate-ledger` コマンドを使用できます。
+
+以下のコマンドを実行して、オブジェクトを検証できます:
+
+```console
+client/bin/scalardl-hashstore validate-ledger --properties client.properties \
+--object-id a.txt
+```
+
+以下のような結果が得られるはずです:
+
+```console
+{
+ "status_code" : "OK",
+ "Ledger" : {
+ "id" : "o_a.txt",
+ "age" : 2,
+ "nonce" : "8182ce3f-620d-4b8d-8718-19fc2666e060",
+ "hash" : "8wLsztcUHRBSfdu4vCLfmWeAuS4T8UUoz+9QkqDl7Xc=",
+ "signature" : "MEYCIQC83aBqEiBtyGW0UHa7AlJeLWho/wOnL1U5AzTbDMb7ngIhAOkgyVQtEYjtCD4FBZuuqAWuIOIW9Gnbd/djkxnet53a"
+ },
+ "Auditor" : null
+}
+```
+
+以下のコマンドを実行して、コレクションを検証できます:
+
+```console
+client/bin/scalardl-hashstore validate-ledger --properties client.properties \
+--collection-id audit_set
+```
+
+以下のような結果が得られるはずです:
+
+```console
+{
+ "status_code" : "OK",
+ "Ledger" : {
+ "id" : "c_audit_set",
+ "age" : 2,
+ "nonce" : "cd99fb75-1bde-4be3-af03-b43bd05f85eb",
+ "hash" : "9Mw+Z4BQkDeLyd+su3WAi2Pes89AKU9kdZmy5Bgtj6c=",
+ "signature" : "MEUCIAcG5di+Tn+VK35J2ZlzembZXxO4DV9cv/9zS1kMdimHAiEAnR3nqQ5I8UzQ+n99Uew6rZQ1DGZWIJzhcmJ9U3axXBs="
+ },
+ "Auditor" : null
+}
+```
+
+:::note
+
+ScalarDL HashStore は、ScalarDL のプリミティブデータモデルのオブジェクトである[アセットレコード](data-modeling.mdx#アセットレコード)に専用のアセット ID を内部的に割り当てます。アセット ID は、アセットタイプのプレフィックスと識別のためのキーで構成されます。例えば、コレクションのアセット ID には、プレフィックス `c_` とコレクション ID が使用されます。`validate-ledger` の結果では、このような生のアセット ID が表示されます。
+
+:::
+
+## 参照
+
+Java アプリケーションで ScalarDL HashStore と対話するには、以下を参照してください:
+
+* [ScalarDL HashStore Java Client SDK の Javadocs](https://javadoc.io/doc/com.scalar-labs/scalardl-hashstore-java-client-sdk/latest/index.html)
diff --git a/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/current/getting-started-tablestore.mdx b/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/current/getting-started-tablestore.mdx
new file mode 100644
index 00000000..0f2252ac
--- /dev/null
+++ b/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/current/getting-started-tablestore.mdx
@@ -0,0 +1,403 @@
+---
+tags:
+ - Community
+ - Enterprise
+displayed_sidebar: docsJapanese
+---
+
+import Tabs from '@theme/Tabs';
+import TabItem from '@theme/TabItem';
+import JavadocLink from "/src/theme/JavadocLink.js";
+import StartupLedger from '/src/components/ja-jp/_getting-started-startup-ledger.mdx';
+import TranslationBanner from '/src/components/_translation-ja-jp.mdx';
+
+# ScalarDL TableStore をはじめよう
+
+
+
+ScalarDL TableStore は、低レベルの台帳抽象化の上に構築された高レベルの抽象化です。get や put などのプリミティブ CRUD インターフェースではなく [SQL インターフェース](sql-grammar.mdx)を提供し、馴染みのあるデータモデルとコマンドで多用途の改ざん検知可能なアプリケーションを迅速かつ簡単に構築できます。
+
+このスタートガイドでは、お好みのデータベースで TableStore を設定し、改ざん検知可能な方法でテーブルとレコードを管理する方法について説明します。
+
+## ScalarDL TableStore とは?
+
+TableStore は [SQL インターフェース](sql-grammar.mdx)を通じてテーブルベースのデータ管理を提供します。柔軟なスキーマレス方式でテーブルを作成し、SELECT、INSERT、UPDATE などの SQL 操作を実行し、すべてのデータ変更の完全な監査証跡を維持できます。また、インデックス機能も提供し、プライマリキーだけでなくインデックスキーでもレコードを選択できます。
+
+
+
+## Client SDK のダウンロード
+
+次に、TableStore クライアントツールを使用します。デプロイされた ScalarDL バージョンと同じバージョンを指定して、ツールをダウンロードするために次のコマンドを実行します:
+
+```console
+VERSION=$(grep SCALARDL_VERSION .env | awk -F= '{print $2}')
+```
+
+次に、以下のコマンドを実行してツールをダウンロードします:
+
+```console
+curl -OL https://github.com/scalar-labs/scalardl/releases/download/v$VERSION/scalardl-tablestore-java-client-sdk-$VERSION.zip
+unzip scalardl-tablestore-java-client-sdk-$VERSION.zip
+mv scalardl-tablestore-java-client-sdk-$VERSION client
+```
+
+## クライアントプロパティの設定
+
+TableStore と対話する前に、クライアントを設定する必要があります。クライアントに必要な最小限のプロパティを含む設定ファイルを作成するには、以下のコマンドを実行します:
+
+```console
+cat << 'EOF' > client.properties
+# A host name for ScalarDL Ledger.
+scalar.dl.client.server.host=localhost
+
+# An ID for the certificate holder. This must be configured for each private key and must be unique in the system.
+scalar.dl.client.cert_holder_id=foo
+
+# A path to the certificate file.
+scalar.dl.client.cert_path=./fixture/client.pem
+
+# A path to the private key file.
+scalar.dl.client.private_key_path=./fixture/client-key.pem
+EOF
+```
+
+このチュートリアルでは、ScalarDL Ledger のホスト名に `localhost` を使用できます。秘密鍵と証明書については、[`scalardl-samples` リポジトリの `fixture` ディレクトリ](https://github.com/scalar-labs/scalardl-samples/tree/master/fixture)で提供されているもの (それぞれ `client-key.pem` と `client.pem`) を使用できます。証明書ホルダーには、任意の一意の ID を指定できます。
+
+:::warning
+
+本番環境では、サンプルの秘密鍵と証明書を使用しないでください。独自の証明書を取得する方法の詳細については、[証明書の取得方法](ca/caclient-getting-started.mdx)を参照してください。
+
+:::
+
+## ブートストラップ
+
+次に、以下のコマンドを実行して TableStore をブートストラップできます:
+
+```console
+client/bin/scalardl-tablestore bootstrap --properties client.properties
+```
+
+ブートストラップコマンドは、内部的にアイデンティティ情報 (証明書またはシークレット) と TableStore を使用するために必要な事前定義されたコントラクトを登録します。
+
+## TableStore との対話
+
+これで TableStore で SQL ステートメントを実行できます。このセクションでは、従業員の部署 ID を通じて結合できる2つのサンプルテーブル (`employee` と `department`) を使用して、以下の機能を試します:
+
+- [テーブルの作成と表示](#テーブルの作成と表示)
+- [レコードの挿入](#レコードの挿入)
+- [レコードの選択](#レコードの選択)
+- [レコードの更新](#レコードの更新)
+- [レコード履歴の取得](#レコード履歴の取得)
+
+### テーブルの作成と表示
+
+以下のコマンドを実行して、サンプルテーブルを作成できます:
+
+```console
+client/bin/scalardl-tablestore execute-statement --properties client.properties \
+--statement "CREATE TABLE employee (id STRING PRIMARY KEY, department STRING)"
+```
+```console
+client/bin/scalardl-tablestore execute-statement --properties client.properties \
+--statement "CREATE TABLE department (id STRING PRIMARY KEY)"
+```
+
+テーブルを作成する際は、名前とプライマリキーを指定する必要があります。追加のカラムを指定することで、セカンダリインデックスを作成できます。ScalarDL TableStore は JSON オブジェクトをテーブル内のレコードとして扱うため、テーブルを作成する際に厳密なスキーマを指定する必要はありません。
+
+以下のコマンドを実行して、作成されたテーブルを表示できます:
+
+```console
+client/bin/scalardl-tablestore execute-statement --properties client.properties \
+--statement "SELECT * FROM information_schema.tables"
+```
+
+以下のような結果が得られるはずです:
+
+```console
+Result:
+[ {
+ "name" : "employee",
+ "key" : "id",
+ "type" : "string",
+ "indexes" : [ {
+ "key" : "department",
+ "type" : "string"
+ } ]
+}, {
+ "name" : "department",
+ "key" : "id",
+ "type" : "string",
+ "indexes" : [ ]
+} ]
+```
+
+### レコードの挿入
+
+次に、以下のコマンドを実行して、複数の `employee` レコードを挿入します:
+
+```console
+client/bin/scalardl-tablestore execute-statement --properties client.properties \
+--statement "INSERT INTO employee VALUES {'id': '1001', 'name': 'Alice', 'department': 'sales', 'salary': 654.3}"
+```
+```console
+client/bin/scalardl-tablestore execute-statement --properties client.properties \
+--statement "INSERT INTO employee VALUES {'id': '1002', 'name': 'Bob', 'department': 'sales', 'salary': 543.2}"
+```
+```console
+client/bin/scalardl-tablestore execute-statement --properties client.properties \
+--statement "INSERT INTO employee VALUES {'id': '1003', 'name': 'Carol', 'department': 'engineering', 'salary': 654.3}"
+```
+
+また、以下のコマンドを実行して、対応する `department` レコードも挿入します:
+
+```console
+client/bin/scalardl-tablestore execute-statement --properties client.properties \
+--statement "INSERT INTO department VALUES {'id': 'sales', 'location': 'Shinjuku', 'phone': '000-1234'}"
+```
+```console
+client/bin/scalardl-tablestore execute-statement --properties client.properties \
+--statement "INSERT INTO department VALUES {'id': 'engineering', 'location': 'Shibuya', 'phone': '000-4321'}"
+```
+
+### レコードの選択
+
+次に、挿入されたレコードを確認します。レコードを選択するには、少なくともプライマリキーまたはインデックスキーを指定する必要があります。例えば、以下のコマンドを実行して、プライマリキーを指定して `employee` レコードを取得できます:
+
+```console
+client/bin/scalardl-tablestore execute-statement --properties client.properties \
+--statement "SELECT id, name, department FROM employee WHERE id = '1001'"
+```
+
+JSON レコードオブジェクトの最上位フィールドを指定することで、カラムを任意にプロジェクションできます。以下のような結果が得られるはずです:
+
+```console
+Result:
+[ {
+ "id" : "1001",
+ "name" : "Alice",
+ "department" : "sales"
+} ]
+```
+
+以下のコマンドを実行して、インデックスキーを指定してレコードを選択することもできます:
+
+```console
+client/bin/scalardl-tablestore execute-statement --properties client.properties \
+--statement "SELECT id, name, department FROM employee WHERE department = 'sales'"
+```
+
+以下のような結果が得られるはずです:
+
+```console
+Result:
+[ {
+ "id" : "1001",
+ "name" : "Alice",
+ "department" : "sales"
+}, {
+ "id" : "1002",
+ "name" : "Bob",
+ "department" : "sales"
+} ]
+```
+
+レコードをフィルタリングしたい場合は、以下のコマンドを実行して追加の条件を指定します:
+
+```console
+client/bin/scalardl-tablestore execute-statement --properties client.properties \
+--statement "SELECT id, name, department FROM employee WHERE department = 'sales' AND salary < 600"
+```
+
+以下のような結果が得られるはずです:
+
+```console
+Result:
+[ {
+ "id" : "1002",
+ "name" : "Bob",
+ "department" : "sales",
+ "salary" : 543.2
+} ]
+```
+
+以下のコマンドを実行して、2つのテーブルを結合することもできます:
+
+```console
+client/bin/scalardl-tablestore execute-statement --properties client.properties \
+--statement "SELECT * FROM employee JOIN department ON employee.department = department.id WHERE employee.department = 'engineering'"
+```
+
+以下のような結果が得られるはずです:
+
+```console
+Result:
+[ {
+ "employee.id" : "1003",
+ "employee.name" : "Carol",
+ "employee.department" : "engineering",
+ "employee.salary" : 654.3,
+ "department.id" : "engineering",
+ "department.location" : "Shibuya",
+ "department.phone" : "000-4321"
+} ]
+```
+
+### レコードの更新
+
+以下のコマンドを実行して、`employee` レコードを更新できます:
+
+```console
+client/bin/scalardl-tablestore execute-statement --properties client.properties \
+--statement "UPDATE employee SET salary = 754.3 WHERE department = 'engineering'"
+```
+
+`SELECT` ステートメントの使用と同様に、レコードを更新するには少なくともプライマリキーまたはインデックスキーを指定するようにしてください。
+
+### レコード履歴の取得
+
+以下のコマンドを実行して、レコードの更新履歴を取得できます:
+
+```console
+client/bin/scalardl-tablestore execute-statement --properties client.properties \
+--statement "SELECT history() FROM employee WHERE id = '1003'"
+```
+
+以下のような結果が得られるはずです:
+
+```console
+Result:
+[ {
+ "age" : 1,
+ "values" : {
+ "id" : "1003",
+ "name" : "Carol",
+ "department" : "engineering",
+ "salary" : 754.3
+ }
+}, {
+ "age" : 0,
+ "values" : {
+ "id" : "1003",
+ "name" : "Carol",
+ "department" : "engineering",
+ "salary" : 654.3
+ }
+} ]
+```
+
+バージョン数 (age) を制限したい場合は、以下のコマンドを実行して `LIMIT` 句を指定します:
+
+```console
+client/bin/scalardl-tablestore execute-statement --properties client.properties \
+--statement "SELECT history() FROM employee WHERE id = '1003' LIMIT 1"
+```
+
+以下のように、指定された数の**最新**レコードが得られるはずです:
+
+```console
+Result:
+[ {
+ "age" : 1,
+ "values" : {
+ "id" : "1003",
+ "name" : "Carol",
+ "department" : "engineering",
+ "salary" : 754.3
+ }
+} ]
+```
+
+## TableStore で管理されるデータの検証
+
+ScalarDL では、すべてのデータが有効な状態にあることを確認するために、時々データを検証する必要があります。TableStore で管理されるデータを検証するには、`validate-ledger` コマンドを使用できます。
+
+以下のコマンドを実行して、テーブルスキーマを検証できます:
+
+```console
+client/bin/scalardl-tablestore validate-ledger --properties client.properties \
+--table-name employee
+```
+
+以下のような結果が得られるはずです:
+
+```console
+{
+ "status_code" : "OK",
+ "Ledger" : {
+ "id" : "tbl_employee",
+ "age" : 0,
+ "nonce" : "26af1229-1c1f-4b89-86e2-ec011da3b313",
+ "hash" : "ZA9yFzjIg1qeHAd7Sub8uFvt2JrTb6XSzGUktPEITr0=",
+ "signature" : "MEUCIAh4Xj93J/jldqbQor7AVM4ii9+suxQrZlCFnKWWDIo0AiEAiM6Yi6GO4bQ2VZg2GnqKmOFPEANrTU4g7pjBMcaX6TQ="
+ },
+ "Auditor" : null
+}
+```
+
+以下のコマンドを実行して、レコードを検証できます:
+
+```console
+client/bin/scalardl-tablestore validate-ledger --properties client.properties \
+--table-name employee --primary-key-column-name id --column-value '"1001"'
+```
+
+:::note
+
+`--column-value` オプションは JSON 値を期待するため、文字列値には二重引用符を付ける必要があります。
+
+:::
+
+以下のような結果が得られるはずです:
+
+```console
+{
+ "status_code" : "OK",
+ "Ledger" : {
+ "id" : "rec_employee_id_1001",
+ "age" : 0,
+ "nonce" : "41a18e7f-314f-4aec-8984-62bf6cd355d0",
+ "hash" : "n7KJLuC/KOzFZLnGKEs6pOQvCbl4WSF+xplOUd9MrSo=",
+ "signature" : "MEUCIEHafCsSXWWtZnDbSpAwFQk4qjW1B7cXjEgdwVF8uKQeAiEAsvzEMKyuNFozAbLC/E8FEviCMLCqo9DPRQe4tVBFwIk="
+ },
+ "Auditor" : null
+}
+```
+
+以下のコマンドを実行して、インデックスレコードを検証できます:
+
+```console
+client/bin/scalardl-tablestore validate-ledger --properties client.properties \
+--table-name employee --index-key-column-name department --column-value '"sales"'
+```
+
+以下のような結果が得られるはずです:
+
+```console
+{
+ "status_code" : "OK",
+ "Ledger" : {
+ "id" : "idx_employee_department_sales",
+ "age" : 0,
+ "nonce" : "41a18e7f-314f-4aec-8984-62bf6cd355d0",
+ "hash" : "n7KJLuC/KOzFZLnGKEs6pOQvCbl4WSF+xplOUd9MrSo=",
+ "signature" : "MEUCIEHafCsSXWWtZnDbSpAwFQk4qjW1B7cXjEgdwVF8uKQeAiEAsvzEMKyuNFozAbLC/E8FEviCMLCqo9DPRQe4tVBFwIk="
+ },
+ "Auditor" : null
+}
+```
+
+:::note
+
+ScalarDL TableStore は、ScalarDL のプリミティブデータモデルのオブジェクトである[アセットレコード](data-modeling.mdx#アセットレコード)に専用のアセット ID を内部的に割り当てます。アセット ID は、アセットタイプのプレフィックスと識別のためのキーで構成されます。例えば、レコードのアセット ID には、プレフィックス `rec_`、テーブル名、プライマリキーカラム名、およびカラム値が使用されます。`validate-ledger` の結果では、このような生のアセット ID が表示されます。
+
+:::
+
+## 参照
+
+Java アプリケーションで ScalarDL TableStore と対話するには、以下を参照してください:
+
+* [ScalarDL TableStore Java Client SDK の Javadocs](https://javadoc.io/doc/com.scalar-labs/scalardl-tablestore-java-client-sdk/latest/index.html)
+
+## リファレンス
+
+* [ScalarDL TableStore SQL 文法](sql-grammar.mdx)
diff --git a/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/current/getting-started.mdx b/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/current/getting-started.mdx
index 65b776c2..968ab77b 100644
--- a/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/current/getting-started.mdx
+++ b/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/current/getting-started.mdx
@@ -8,7 +8,7 @@ displayed_sidebar: docsJapanese
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
import JavadocLink from "/src/theme/JavadocLink.js";
-import DbSpecificSteps from '/src/components/ja-jp/_getting-started-db-specific-steps.mdx';
+import StartupLedger from '/src/components/ja-jp/_getting-started-startup-ledger.mdx';
import TranslationBanner from '/src/components/_translation-ja-jp.mdx';
# ScalarDL Ledger をはじめよう
@@ -17,168 +17,7 @@ import TranslationBanner from '/src/components/_translation-ja-jp.mdx';
この入門チュートリアルでは、お好みのデータベースで ScalarDL を設定する方法を説明し、データの履歴状態を追跡するシンプルなアプリケーションを作成するプロセスを示します。
-## 前提条件
-
-- 以下のいずれかの Java Development Kit (JDK):
- - **[Oracle JDK](https://www.oracle.com/java/):** 8、11、17、または 21 (LTS バージョン)
- - **[OpenJDK](https://openjdk.org/) ([Eclipse Temurin](https://adoptium.net/temurin/)、[Amazon Corretto](https://aws.amazon.com/corretto/)、または [Microsoft Build の OpenJDK](https://learn.microsoft.com/en-us/java/openjdk/)):** 8、11、17、または 21 (LTS バージョン)
-- [Docker](https://www.docker.com/get-started/) 20.10 以降 ([Docker Compose](https://docs.docker.com/compose/install/) v2.20.0 以降)
-
-:::warning
-
-ScalarDL は JDK 8 でビルドされているため、コントラクトは JDK 8 互換バイナリである必要があります。JDK 8 以外のバージョンを使用する場合は、ビルドツールを設定して JDK 8 互換バイナリをビルドする必要があります。バイナリ互換性を指定するには、javac の `--release 8` オプションを使用するか、Gradle または Maven 設定を設定して JDK 8 ツールチェーンを使用するなど、いくつかの方法があります。次に、Gradle の設定を示します。
-
-```gradle
-java {
- toolchain {
- languageVersion.set(JavaLanguageVersion.of(8))
- }
-}
-```
-
-Gradle および Maven の設定の詳細については、[Gradle の JVM プロジェクトのツールチェーン](https://docs.gradle.org/current/userguide/toolchains.html)および [Maven のツールチェーンの使用ガイド](https://maven.apache.org/guides/mini/guide-using-toolchains.html)を参照してください。
-
-:::
-
-## ScalarDL サンプルリポジトリのクローンを作成する
-
-**ターミナル** を開き、次のコマンドを実行して ScalarDL サンプルリポジトリのクローンを作成します。
-
-```console
-git clone https://github.com/scalar-labs/scalardl-samples
-```
-
-次に、以下のコマンドを実行して、サンプル設定が含まれているディレクトリに移動します。
-
-```console
-cd scalardl-samples
-```
-
-## データベースを選択して ScalarDL を起動します
-
-データベースを選択し、指示に従って ScalarDL Ledger をデプロイします。ScalarDL がサポートするデータベースの一覧については、[データベース](requirements.mdx#データベース)を参照してください。
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- ライセンスを設定する (Enterprise Edition のみ)
-
- ScalarDL Enterprise Edition を使用している場合は、次のようにライセンスを設定します。Community Edition を使用している場合は、次のセクションに進んで ScalarDL を起動してください。
-
-
- ライセンスの設定についてはこちらをご覧ください
-
- 1. 次のようにして、`cosmosdb/docker-compose-ledger.yml` ファイルで Enterprise Edition の Docker イメージを有効にします。
-
- - イメージを変更する前 (デフォルト設定):
-
- ```yaml
- services:
- scalardl-ledger:
- image: ghcr.io/scalar-labs/scalardl-ledger:${SCALARDL_VERSION}
- # image: ghcr.io/scalar-labs/scalardl-ledger-byol:${SCALARDL_VERSION}
- ```
-
- - イメージを変更した後:
-
- ```yaml
- services:
- scalardl-ledger:
- # image: ghcr.io/scalar-labs/scalardl-ledger:${SCALARDL_VERSION}
- image: ghcr.io/scalar-labs/scalardl-ledger-byol:${SCALARDL_VERSION}
- ```
-
- 2. ScalarDL Ledger のライセンスキーを設定します。`cosmosdb/ledger.properties` ファイルで、`` をライセンスキーに置き換えます。例:
-
- ```properties
- ##### PLEASE REPLACE THIS VALUE WITH YOUR LICENSE KEY (ENTERPRISE EDITION ONLY) #####
- scalar.dl.licensing.license_key={"organization_name":"XXXXXXXX","expiration_date_time":"YYYY-MM-DDTHH:mm:SS+TIMEZONE","product_name":"ScalarDL Ledger","product_version":N,"license_type":"trial","signature":"XXXXXXXX"}
- ##### PLEASE REPLACE THIS VALUE WITH YOUR LICENSE KEY (ENTERPRISE EDITION ONLY) #####
- ```
-
- 3. ライセンスを確認するには、`cosmosdb/docker-compose-ledger.yml` ファイルを次のように更新します。試用版ライセンスを使用している場合は、この手順をスキップしてください。
-
- - 証明書ファイルのパスを変更する前に (デフォルト設定):
-
- ```yaml
- services:
- scalardl-ledger:
- volumes:
- - ./ledger.properties:/scalar/ledger/ledger.properties.tmpl
- - ../fixture/ledger-key.pem:/scalar/ledger-key.pem
- - ../fixture/trial-license-cert.pem:/scalar/license-cert.pem
- # If you have a commercial license key, you must use `commercial-license-cert.pem` instead of `trial-license-cert.pem`.
- # - ../fixture/commercial-license-cert.pem:/scalar/license-cert.pem
- ```
-
- - 証明書ファイルのパスを変更した後:
-
- ```yaml
- services:
- scalardl-ledger:
- volumes:
- - ./ledger.properties:/scalar/ledger/ledger.properties.tmpl
- - ../fixture/ledger-key.pem:/scalar/ledger-key.pem
- # - ../fixture/trial-license-cert.pem:/scalar/license-cert.pem
- # If you have a commercial license key, you must use `commercial-license-cert.pem` instead of `trial-license-cert.pem`.
- - ../fixture/commercial-license-cert.pem:/scalar/license-cert.pem
- ```
-
-
-
- ScalarDL を起動する
-
- 以下の手順に従って、ScalarDL Ledger の使用を開始できます。
-
- 1. Cosmos DB for NoSQL を設定します。
-
- Azure Cosmos DB for NoSQL を使用するには、Azure アカウントが必要です。Azure アカウントがない場合は、[Azure Cosmos DB アカウントを作成する](https://learn.microsoft.com/ja-jp/azure/cosmos-db/nosql/quickstart-portal#create-account)にアクセスしてください。
-
- Cosmos DB for NoSQL をセットアップしたら、Cosmos DB for NoSQL の設定に基づいて、`cosmodb/ledger.properties` の次の項目を変更します。
-
- ```properties
- scalar.db.contact_points=
- scalar.db.password=
- ```
-
- 2. 次のコマンドを実行して、ScalarDL Ledger のデータベーススキーマをロードします。
-
- ```console
- docker compose -f cosmodb/docker-compose-ledger.yml up -d scalardl-ledger-schema-loader
- ```
-
- 3. 次のコマンドを実行して ScalarDL Ledger を実行します。
-
- ```console
- docker compose -f cosmodb/docker-compose-ledger.yml up -d
- ```
-
-
-
-
-
-
-
+
## Client SDK をダウンロードする
diff --git a/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/current/glossary.mdx b/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/current/glossary.mdx
index fe015227..ab378be6 100644
--- a/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/current/glossary.mdx
+++ b/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/current/glossary.mdx
@@ -31,7 +31,7 @@ displayed_sidebar: docsJapanese
### 台帳データベース
-台帳データベースは、改ざん防止機能があり、検証可能なデータベースで、データを順次記録し、トレーサビリティと検証をサポートし、多くの場合、整合性の暗号証明を備えています。
+台帳データベースは、改ざんの検証が可能なデータベースです。データを順次記録し、トレーサビリティと検証をサポートし、多くの場合、整合性の暗号証明を備えています。
### 電子署名
diff --git a/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/current/quickstart-overview.mdx b/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/current/quickstart-overview.mdx
index 749a49f4..9ed23fc1 100644
--- a/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/current/quickstart-overview.mdx
+++ b/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/current/quickstart-overview.mdx
@@ -11,6 +11,16 @@ import TranslationBanner from '/src/components/_translation-ja-jp.mdx';
-このカテゴリでは、Java Client SDK を使用して ScalarDL Ledger を通じて基本的なコントラクトを実行する方法についてのクイックスタートチュートリアルに従うことができます。
+このカテゴリでは、ScalarDL の使い始め方に関するクイックスタートチュートリアルに従うことができます。
-開始するには、[ScalarDL Ledger を通じてコントラクトを実行する](getting-started.mdx)を参照してください。
+ScalarDL は、台帳との簡単でシームレスな対話のための2つの抽象化されたデータストアを提供します: HashStore と TableStore です。
+
+* HashStore は、オブジェクトとコレクションの真正性を保証するためのインターフェースを提供し、証拠保全などのアプリケーションに最適です。
+* TableStore は、テーブルの真正性を検証するための SQL 互換インターフェースを提供し、開発者が馴染みのあるデータモデルとインターフェースで多用途な改ざん防止アプリケーションを構築できます。
+
+開始するには、以下のガイドを参照してください:
+
+* [ScalarDL HashStore をはじめよう](getting-started-hashstore.mdx)
+* [ScalarDL TableStore をはじめよう](getting-started-tablestore.mdx)
+
+ScalarDL には、台帳とのよりカスタマイズされた対話のためのプリミティブインターフェースも含まれています。このアプローチを調べるには、[ScalarDL Ledger をはじめよう](getting-started.mdx)を参照してください。
diff --git a/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/current/requirements.mdx b/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/current/requirements.mdx
index 65500377..42d2fa23 100644
--- a/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/current/requirements.mdx
+++ b/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/current/requirements.mdx
@@ -57,91 +57,100 @@ ScalarDL は、次のデータベースとそのバージョン上で実行さ
| バージョン | Oracle Database 23ai | Oracle Database 21c | Oracle Database 19c |
|:------------------|:---------------------|:--------------------|:--------------------|
+ | **ScalarDL 3.12** | ✅ | ✅ | ✅ |
| **ScalarDL 3.11** | ✅ | ✅ | ✅ |
| **ScalarDL 3.10** | ✅ | ✅ | ✅ |
| **ScalarDL 3.9** | ✅ | ✅ | ✅ |
- | **ScalarDL 3.8** | ✅ | ✅ | ✅ |
+
+
+
+
+ | バージョン | Db2 12.1 | Db2 11.5 |
+ |:------------------|:---------|:---------|
+ | **ScalarDL 3.12** | ✅ | ✅ |
+ | **ScalarDL 3.11** | ❌ | ❌ |
+ | **ScalarDL 3.10** | ❌ | ❌ |
+ | **ScalarDL 3.9** | ❌ | ❌ |
- | バージョン | MySQL 8.1 | MySQL 8.0 |
+ | バージョン | MySQL 8.4 | MySQL 8.0 |
|:------------------|:----------|:----------|
+ | **ScalarDL 3.12** | ✅ | ✅ |
| **ScalarDL 3.11** | ✅ | ✅ |
| **ScalarDL 3.10** | ✅ | ✅ |
| **ScalarDL 3.9** | ✅ | ✅ |
- | **ScalarDL 3.8** | ✅ | ✅ |
| バージョン | PostgreSQL 17 | PostgreSQL 16 | PostgreSQL 15 | PostgreSQL 14 | PostgreSQL 13 |
- |:------------------|:--------------|:--------------|:--------------|:--------------|---------------|
- | **ScalarDL 3.11** | ✅ | ✅ | ✅ | ✅ | ✅ |
- | **ScalarDL 3.10** | ✅ | ✅ | ✅ | ✅ | ✅ |
- | **ScalarDL 3.9** | ✅ | ✅ | ✅ | ✅ | ✅ |
- | **ScalarDL 3.8** | ✅ | ✅ | ✅ | ✅ | ✅ |
+ |:------------------|:--------------|:--------------|:--------------|:--------------|:---------------|
+ | **ScalarDL 3.12** | ✅ | ✅ | ✅ | ✅ | ✅ |
+ | **ScalarDL 3.11** | ✅ | ✅ | ✅ | ✅ | ✅ |
+ | **ScalarDL 3.10** | ✅ | ✅ | ✅ | ✅ | ✅ |
+ | **ScalarDL 3.9** | ✅ | ✅ | ✅ | ✅ | ✅ |
| バージョン | Aurora MySQL 3 | Aurora MySQL 2 |
|:------------------|:----------------|:----------------|
+ | **ScalarDL 3.12** | ✅ | ✅ |
| **ScalarDL 3.11** | ✅ | ✅ |
| **ScalarDL 3.10** | ✅ | ✅ |
| **ScalarDL 3.9** | ✅ | ✅ |
- | **ScalarDL 3.8** | ✅ | ✅ |
- | バージョン | Aurora PostgreSQL 17 | Aurora PostgreSQL 16 | Aurora PostgreSQL 15 | Aurora PostgreSQL 14 | Aurora PostgreSQL 13 |
- |:------------------|:----------------------|:----------------------|:----------------------|:----------------------|:----------------------|
- | **ScalarDL 3.11** | ✅ | ✅ | ✅ | ✅ | ✅ |
- | **ScalarDL 3.10** | ✅ | ✅ | ✅ | ✅ | ✅ |
- | **ScalarDL 3.9** | ✅ | ✅ | ✅ | ✅ | ✅ |
- | **ScalarDL 3.8** | ✅ | ✅ | ✅ | ✅ | ✅ |
+ | バージョン | Aurora PostgreSQL 16 | Aurora PostgreSQL 15 | Aurora PostgreSQL 14 | Aurora PostgreSQL 13 |
+ |:------------------|:---------------------|:---------------------|:---------------------|:---------------------|
+ | **ScalarDL 3.12** | ✅ | ✅ | ✅ | ✅ |
+ | **ScalarDL 3.11** | ✅ | ✅ | ✅ | ✅ |
+ | **ScalarDL 3.10** | ✅ | ✅ | ✅ | ✅ |
+ | **ScalarDL 3.9** | ✅ | ✅ | ✅ | ✅ |
| バージョン | MariaDB 11.4 | MariaDB 10.11 |
|:------------------|:--------------|:--------------|
+ | **ScalarDL 3.12** | ✅ | ✅ |
| **ScalarDL 3.11** | ✅ | ✅ |
| **ScalarDL 3.10** | ✅ | ✅ |
| **ScalarDL 3.9** | ✅ | ✅ |
- | **ScalarDL 3.8** | ✅ | ✅ |
| バージョン | SQL Server 2022 | SQL Server 2019 | SQL Server 2017 |
|:------------------|:-----------------|:-----------------|:-----------------|
+ | **ScalarDL 3.12** | ✅ | ✅ | ✅ |
| **ScalarDL 3.11** | ✅ | ✅ | ✅ |
| **ScalarDL 3.10** | ✅ | ✅ | ✅ |
| **ScalarDL 3.9** | ✅ | ✅ | ✅ |
- | **ScalarDL 3.8** | ✅ | ✅ | ✅ |
- | バージョン | SQLite 3 |
- |:---------------------------------------|:----------|
- | **ScalarDL 3.11** | ✅ |
- | **ScalarDL 3.10** | ✅ |
- | **ScalarDL 3.9** | ✅ |
- | **ScalarDL 3.8.2 以降のパッチバージョン** | ✅ |
- | **ScalarDL 3.8.0 - 3.8.1** | ❌ |
+ | バージョン | SQLite 3 |
+ |:------------------|:----------|
+ | **ScalarDL 3.12** | ✅ |
+ | **ScalarDL 3.11** | ✅ |
+ | **ScalarDL 3.10** | ✅ |
+ | **ScalarDL 3.9** | ✅ |
| バージョン | YugabyteDB 2 |
|:------------------|:-------------|
+ | **ScalarDL 3.12** | ✅ |
| **ScalarDL 3.11** | ✅ |
| **ScalarDL 3.10** | ✅ |
| **ScalarDL 3.9** | ❌ |
- | **ScalarDL 3.8** | ❌ |
@@ -153,30 +162,30 @@ ScalarDL は、次のデータベースとそのバージョン上で実行さ
| バージョン | DynamoDB |
|:------------------|:----------|
+ | **ScalarDL 3.12** | ✅ |
| **ScalarDL 3.11** | ✅ |
| **ScalarDL 3.10** | ✅ |
| **ScalarDL 3.9** | ✅ |
- | **ScalarDL 3.8** | ✅ |
| バージョン | Cassandra 4.1 | Cassandra 4.0 | Cassandra 3.11 | Cassandra 3.0 |
|:------------------|:---------------|:---------------|:----------------|:---------------|
+ | **ScalarDL 3.12** | ❌ | ❌ | ✅ | ✅ |
| **ScalarDL 3.11** | ❌ | ❌ | ✅ | ✅ |
| **ScalarDL 3.10** | ❌ | ❌ | ✅ | ✅ |
| **ScalarDL 3.9** | ❌ | ❌ | ✅ | ✅ |
- | **ScalarDL 3.8** | ❌ | ❌ | ✅ | ✅ |
| バージョン | Cosmos DB for NoSQL |
|:------------------|:---------------------|
+ | **ScalarDL 3.12** | ✅ |
| **ScalarDL 3.11** | ✅ |
| **ScalarDL 3.10** | ✅ |
| **ScalarDL 3.9** | ✅ |
- | **ScalarDL 3.8** | ✅ |
@@ -190,13 +199,12 @@ ScalarDL は、基盤となるデータベースを抽象化するために Scal
- ScalarDL で使用できる利用可能なバックエンドデータベースを知りたい場合。ScalarDL で使用できるバックエンドデータベースは ScalarDB のバージョンによって異なります。詳細については、[ScalarDB がサポートするデータベースのリスト](https://scalardb.scalar-labs.com/ja-jp/docs/latest/requirements#データベース)を参照してください。
- ScalarDL の `Function` 機能で使用できる ScalarDB API を知りたい場合。
-| ScalarDL バージョン | ScalarDB バージョン |
-|:-------------------------|:------------------|
-| 3.11 | 3.15 |
-| 3.10 | 3.14 |
-| 3.9 | 3.12 |
-| 3.8.2 以降のパッチバージョン | 3.12 |
-| 3.8.0 - 3.8.1 | 3.8 |
+| ScalarDL バージョン | ScalarDB バージョン |
+|:------------------|:------------------|
+| 3.12 | 3.16 |
+| 3.11 | 3.15 |
+| 3.10 | 3.14 |
+| 3.9 | 3.12 |
:::
diff --git a/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/current/sql-grammar.mdx b/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/current/sql-grammar.mdx
new file mode 100644
index 00000000..ef2dc3da
--- /dev/null
+++ b/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/current/sql-grammar.mdx
@@ -0,0 +1,293 @@
+---
+tags:
+ - Community
+ - Enterprise
+displayed_sidebar: docsJapanese
+---
+
+import TranslationBanner from '/src/components/_translation-ja-jp.mdx';
+
+# ScalarDL TableStore SQL の文法
+
+
+
+このページでは、ScalarDL TableStore SQL でサポートされているコマンドのリストを提供します。
+
+:::note
+
+ScalarDL TableStore SQL は [PartiQL ベース](https://partiql.org/)の言語であり、標準 SQL と完全に互換性があるわけではありません。
+
+:::
+
+- DDL
+ - [CREATE TABLE](#create-table)
+- DML
+ - [SELECT](#select)
+ - [INSERT](#insert)
+ - [UPDATE](#update)
+- その他
+ - [テーブルの表示](#テーブルの表示)
+ - [レコード履歴の表示](#レコード履歴の表示)
+- リテラル
+ - [文字列](#文字列)
+ - [数値](#数値)
+ - [真偽値](#真偽値)
+
+## DDL
+
+データ定義言語 (DDL) コマンドは、テーブルなどのデータベースオブジェクトの構造を定義および変更するために使用されます。
+
+### CREATE TABLE
+
+`CREATE TABLE` コマンドはテーブルを作成します。
+
+#### 文法
+
+```sql
+CREATE TABLE
(
+ data_type PRIMARY KEY [, data_type,] ...
+)
+
+data_type: BOOLEAN | INT | BIGINT | FLOAT | DOUBLE PRECISION | STRING
+```
+
+#### 注意事項
+
+- テーブルを作成する際に厳密なスキーマを指定する必要はありませんが、少なくともプライマリキーカラムを指定する必要があります。
+- インデックスキーカラムを指定することで、セカンダリインデックスを作成できます。
+- ScalarDL TableStore は、すべての数値データ型 (`INT`、`BIGINT`、`FLOAT`、および `DOUBLE PRECISION`) を JSON 形式で `NUMBER` データ型として扱い、それらを区別しません。
+
+#### 例
+
+`CREATE TABLE` の例は以下の通りです:
+
+```sql
+-- プライマリキー ("c1") とインデックスキー ("c2"、"c3"、および "c4") を持つテーブルを作成する。
+CREATE TABLE tbl (
+ c1 INT PRIMARY KEY,
+ c2 STRING,
+ c3 FLOAT,
+ c4 BIGINT
+);
+```
+
+## DML
+
+データ操作言語 (DML) コマンドは、テーブル内のデータのクエリと変更に使用されます。
+
+### SELECT
+
+`SELECT` コマンドは、TableStore で管理されているテーブル内のレコードを取得します。
+
+#### 文法
+
+```sql
+SELECT projection [, projection] ...
+ FROM [AS ] [join_specification [join_specification] ...]
+ WHERE predicate [AND predicate ...]
+
+projection: * | identifier
+join_specification: JOIN [AS ] ON join_predicate
+join_predicate: identifier = identifier
+predicate: identifier operator | identifier IS [NOT] NULL
+identifier: [.] | [alias.]
+operator: = | <> | != | > | >= | < | <=
+```
+
+##### 注意事項
+
+- `SELECT` 句では、JSON レコードオブジェクトのトップレベルフィールドをプロジェクションカラムとして指定できます。
+- `JOIN` 句では、`join_predicate` は右側のテーブルからプライマリキーカラムまたはインデックスキーカラムのいずれかを含む必要があります。
+- `WHERE` 句では、任意のカラムに対する述語を指定できますが、等価条件または `IS NULL` 条件でプライマリキーカラムまたはインデックスキーカラムに対する述語を少なくとも 1 つ含める必要があります。
+
+#### 例
+
+例えば、以下のようなプライマリキーとインデックスキーを持つテーブルがある場合:
+
+```sql
+CREATE TABLE tbl (
+ c1 INT PRIMARY KEY,
+ c2 STRING,
+ c3 FLOAT,
+ c4 BIGINT
+);
+```
+
+`SELECT` の例は以下の通りです:
+
+```sql
+-- プライマリキーを使用
+SELECT * FROM tbl WHERE c1 = 10;
+
+-- プライマリキーと非プライマリキーカラムの述語を使用
+SELECT * FROM tbl WHERE c1 = 10 AND c2 = 'aaa' AND c3 = 1.23 AND c4 < 100;
+
+-- プロジェクションとプライマリキーを使用
+SELECT c1, c2, c3, c5 FROM tbl WHERE c1 = 10;
+
+-- インデックス化されたカラムの等価述語を使用
+SELECT * FROM tbl WHERE c4 = 100;
+
+-- インデックス化されたカラムの等価述語と非キーカラムの述語を使用
+SELECT * FROM tbl WHERE c4 = 100 AND c5 = false;
+
+-- IS NULL 述語を使用
+SELECT * FROM tbl WHERE c2 IS NULL AND c3 IS NOT NULL;
+
+-- JOIN 句を使用
+SELECT * FROM tbl1 as t1 JOIN tbl2 as t2 on t1.c2=t2.id WHERE t1.c1=1;
+```
+
+### INSERT
+
+`INSERT` コマンドは、指定されたテーブルに新しいレコードを挿入します。対象のレコードが既に存在する場合、例外がスローされます。ScalarDL TableStore では、レコードは JSON オブジェクトとして表現されます。PartiQL 構造体形式を使用して JSON オブジェクトを指定することもできます。
+
+#### 文法
+
+```sql
+INSERT INTO VALUES record_specification
+
+record_specification: `` |
+```
+
+##### 注意事項
+
+挿入するレコードにプライマリキーカラムを含める必要があります。
+
+#### 例
+
+`INSERT` の例は以下の通りです:
+
+```sql
+-- JSON 形式を使用してレコードを挿入
+INSERT INTO tbl VALUES `{"c1": 10, "c2": "aaa", "c3": 1.23, "c4": 100, "c5": true}`;
+
+-- PartiQL 構造体形式を使用してレコードを挿入
+INSERT INTO tbl VALUES {'c1': 10, 'c2': 'aaa', 'c3': 1.23, 'c4': 100, 'c5': true};
+```
+
+### UPDATE
+
+`UPDATE` コマンドは、指定されたテーブル内の既存のレコードを更新します。`SELECT` コマンドと同様に、`WHERE` 句で条件を指定してレコードをフィルタリングできますが、等価条件または `IS NULL` 条件でプライマリキーカラムまたはインデックスキーカラムに対する述語を少なくとも1つ含める必要があります。
+
+#### 文法
+
+```sql
+UPDATE
+ SET = [, = ] ...
+ WHERE predicate [AND predicate ...]
+
+predicate: operator | IS [NOT] NULL
+operator: = | <> | != | > | >= | < | <=
+```
+
+##### 注意事項
+
+- `SET` 句では、指定されたカラムがレコードに存在しない場合、レコードの JSON オブジェクトに新しく追加されます。
+- `WHERE` 句では、任意のカラムに対する述語を指定できますが、等価条件または `IS NULL` 条件でプライマリキーカラムまたはインデックスキーカラムに対する述語を少なくとも 1 つ含める必要があります。
+
+#### 例
+
+例えば、以下のようなテーブルがある場合:
+
+```sql
+CREATE TABLE tbl (
+ c1 INT PRIMARY KEY,
+ c2 STRING,
+ c3 FLOAT,
+ c4 BIGINT
+);
+```
+
+完全なプライマリキーが指定された `UPDATE` の例は以下の通りです:
+
+```sql
+-- プライマリキー述語でレコードを更新
+UPDATE tbl SET c4 = 200, c5 = false WHERE c1 = 10;
+
+-- インデックスキー述語でレコードを更新
+UPDATE tbl SET c4 = 200, c5 = false WHERE c2 = 'aaa';
+
+-- プライマリキーと非キー述語でレコードを更新
+UPDATE tbl SET c4 = 200, c5 = false WHERE c1 = 10 AND c5 = true;
+```
+
+## その他
+
+このセクションでは、標準の DDL および DML カテゴリを超えた追加のコマンドと関数について説明します。
+
+### テーブルの表示
+
+`information_schema.tables` テーブルをクエリすることで、TableStore で管理されているテーブルを表示できます。
+
+#### 文法
+
+```sql
+SELECT *
+ FROM information_schema.tables
+ [WHERE table_name = ]
+```
+
+#### 例
+
+`information_schema.tables` テーブルのクエリ例は以下の通りです:
+
+```sql
+-- TableStore で管理されているすべてのテーブルを表示
+SELECT * FROM information_schema.tables;
+
+-- 指定されたテーブルのみを表示
+SELECT * FROM information_schema.tables WHERE table_name = 'tbl';
+```
+
+### レコード履歴の表示
+
+`history()` 関数を使用して、指定されたレコードの履歴を表示できます。
+
+#### 文法
+
+```sql
+SELECT history()
+ FROM
+ WHERE predicate
+ [LIMIT ]
+
+predicate: =
+```
+
+#### 注意事項
+
+- `WHERE` 句でプライマリキーを指定する必要があります。
+- コマンドは、最新から最古にソートされたレコードを返します。
+- `LIMIT` 句を使用すると、コマンドは最新から最古にソートされた最新の `` 行を返します。
+
+#### 例
+
+指定されたレコードの履歴を表示する例は以下の通りです:
+
+```sql
+-- 指定されたレコードの履歴を表示
+SELECT history() FROM tbl WHERE c1 = 10;
+
+-- 制限付きで指定されたレコードの履歴を表示
+SELECT history() FROM tbl WHERE c1 = 10 LIMIT 10;
+```
+
+## リテラル
+
+リテラルは、SQL ステートメントを記述するときに使用される固定データ値を指します。例えば、`1`、`'abc'`、`1.23`、および `true` はリテラルです。
+
+### 文字列
+
+文字列リテラルは、`'abc'` や `'abc def'` のように、単一引用符 `'` で囲まれた文字列です。
+
+### 数値
+
+数値リテラルには、正確値 (`INTEGER` および `BIGINT`) と近似値 (`FLOAT` および `DOUBLE PRECISION`) のリテラルが含まれます:
+
+- 正確値リテラルは、`123` や `-5` のような数字の列です。
+- 近似値リテラルは、`4.754` や `-1.2` のように小数点を含む数字の列です。
+
+### 真偽値
+
+真偽値リテラルは、真偽値を表現するために `true` または `false` のいずれかです。
diff --git a/sidebars.js b/sidebars.js
index 522d541e..7c71f652 100644
--- a/sidebars.js
+++ b/sidebars.js
@@ -685,6 +685,16 @@ const sidebars = {
id: 'quickstart-overview',
},
items: [
+ {
+ type: 'doc',
+ id: 'getting-started-hashstore',
+ label: 'HashStore を使用',
+ },
+ {
+ type: 'doc',
+ id: 'getting-started-tablestore',
+ label: 'TableStore を使用',
+ },
{
type: 'doc',
id: 'getting-started',
@@ -831,6 +841,11 @@ const sidebars = {
id: 'ca/caclient-getting-started',
label: '証明書を取得',
},
+ {
+ type: 'doc',
+ id: 'sql-grammar',
+ label: 'ScalarDL TableStore SQL の文法',
+ },
],
},
],