DynoTable for VS Code

DynoTable 拡張機能を使うと、VS Code で SQL、PartiQL、OpenSearch のクエリを書き、DynoTable プロファイルのテーブルとインデックスに対して実行できます。1 つの SQL ファイルで DynamoDB のテーブルと OpenSearch のインデックスをクエリでき、1 つのステートメントでテーブルとインデックスを結合できます。

同じコンピューター上の DynoTable デスクトップアプリが、実際のスキーマに基づく言語機能を提供し、クエリを実行します。拡張機能は VSCodium、Cursor、Windsurf でも動作します。

必要なもの

  • 同じコンピューターにインストールされた DynoTable 1.19.0 以降。アプリが古すぎる場合は、拡張機能がアップデートを促します。
  • アプリでエディタ連携がオンになっていること。デフォルトはオフです。
  • VS Code 1.91 以降と、信頼済みのワークスペース。

リモートワークスペース(SSH、WSL、Dev Containers)には対応していません。DynoTable が扱うのは、このコンピューター上のファイルと新しい無題のクエリだけです。

エディタ連携をオンにする

  1. DynoTable を開きます。
  2. 設定 → エディタ連携 に移動します。
  3. エディタ連携 をオンにします。

この操作は一度だけです。接続できるのは、このコンピューター上のアプリだけです。ペインのステータス セクションには、連携が動作中かどうかと、接続しているエディタの数が表示されます。エディタを設定 を押すとこのページが開きます。

拡張機能をインストールする

拡張機能ビューで DynoTable を検索してインストールします。VS Code は Visual Studio Marketplace から、VSCodium、Cursor、Windsurf は Open VSX からインストールします。ターミナルからは次のとおりです:

code --install-extension dynotable.vscode-dynotable

インストール後は、アプリが必要になると拡張機能が DynoTable を起動します。 DynoTable はバックグラウンドで動作するを参照してください。

クエリファイル

ファイル言語
*.dynotable.sqlDynoTable SQL(テーブルとインデックスが対象)
*.partiqlDynamoDB PartiQL
*.opensearch1 つの OpenSearch クエリ: JSON クエリ DSL か Lucene

DynoTable: New Query は SQL、PartiQL、OpenSearch のどれにするかを尋ね、その言語の新しい無題のクエリを開きます。

エクスプローラーでテーブルかインデックスをクリックすると、その新しいクエリが開きます。テーブルは SELECT * のクエリを開きます。インデックスは、インデックス行の入った OpenSearch ファイルを開きます。クエリは実行されません。行の New Query ボタンも同じ動作をします。

DynoTable エクスプローラーで orders テーブルをクリックして開いた新しい SQL クエリ。レンズ行にクエリのプランが表示される。クエリは実行されていない。
DynoTable エクスプローラーで orders テーブルをクリックして開いた新しい SQL クエリ。レンズ行にクエリのプランが表示される。クエリは実行されていない。

SQL ファイル

DynoTable はすべての .sql ファイルに接続するわけではありません。接続するのは、New Query が開いた無題のクエリと、dynotable.sqlFiles 設定(デフォルトは **/*.dynotable.sql)に一致するファイルです。

ほかの .sql ファイルを接続するには、そのファイルを開いて DynoTable: Attach SQL File を実行します。このコマンドは、ファイルをそのワークスペースフォルダーの dynotable.sqlFiles 設定に追加します。

フォルダーを開いたウィンドウでは、各フォルダー自身の dynotable.sqlFiles がそのフォルダーで接続するファイルを決めます。[] にすると、そのフォルダーでは接続しません。

どのフォルダーにも入っていない .sql ファイルは、名前が .dynotable.sql で終わっていても接続しません。フォルダーのないウィンドウでは、ファイル名を *.dynotable.sql にします。

接続した SQL ファイルでは、補完がプロファイルのテーブルとインデックスを一覧します。

VS Code の SQL ファイル。FROM の後の補完一覧に、DynamoDB のテーブル、opensearch. プレフィックス付きの OpenSearch インデックス、dynamodb. と opensearch. のプレフィックスが表示される。
VS Code の SQL ファイル。FROM の後の補完一覧に、DynamoDB のテーブル、opensearch. プレフィックス付きの OpenSearch インデックス、dynamodb. と opensearch. のプレフィックスが表示される。

1 つの SQL ファイルで 2 つのエンジン

DynoTable SQL は DynamoDB のテーブルと OpenSearch のインデックスを読みます。1 つの SQL ファイルに、テーブルのステートメントとインデックスのステートメントを書けます。FROM と JOIN の後の補完には両方が表示されます。

テーブルとインデックスが同じ名前の場合は、名前の前に dynamodb. か opensearch. を付けます。 OpenSearch SQL を参照してください。

JOIN で DynamoDB のテーブルと OpenSearch のインデックスを結合できます。インデックス側は、ドキュメントの _id、またはキーワード、数値、日付、ブール値、IP のフィールドで結合します。 DynoTable が結合を実行し、結合した行を結果パネルに表示します。

このステートメントは、orders テーブルと products インデックスを結合します:

SELECT o.orderId, o.amount, p.name, p.category
FROM dynamodb.orders o
JOIN opensearch.products p ON o.productId = p.productId
WHERE o.customerId = 'CUST010'

各行には、テーブルの列とインデックスの列があります。

SQL を実行するには、トライアルか有料のライセンスが必要です。プランごとに動くものを参照してください。

DynamoDB の orders テーブルと OpenSearch の products インデックスを結合する SQL ステートメント。結果パネルに、テーブルと OpenSearch インデックスの列を持つ 2 行が表示される。レンズ行にプランは表示されない。
DynamoDB の orders テーブルと OpenSearch の products インデックスを結合する SQL ステートメント。結果パネルに、テーブルと OpenSearch インデックスの列を持つ 2 行が表示される。レンズ行にプランは表示されない。

DynoTable が実行する結合については OpenSearch SQL を参照してください。

OpenSearch ファイル

OpenSearch クエリは、1 行目でインデックスを指定します:

// dynotable: index=orders
{"query": {"match": {"status": "shipped"}}}

DynoTable: Pick Index を実行すると、一覧からインデックスを選べます。この行は自動で書き込まれます。

2 つの OpenSearch ターゲットに同じ名前のインデックスがある場合は、この行に target=<target name> も必要です。DynoTable がすべてのターゲットのインデックスを一覧できなかった場合も必要です。

Pick Index とエクスプローラーの New Query は、これも自動で追加します。スペースを含むターゲット名はこの行に書けません。

OpenSearch ファイルにはレンズ行がありません。クエリを実行するには、⌘↩(Windows と Linux では Ctrl+Enter)を押すか、DynoTable: Run を実行します。

products インデックスのインデックス行と、price の範囲クエリが入った OpenSearch ファイル。結果パネルに 4 件のドキュメントが表示される。
products インデックスのインデックス行と、price の範囲クエリが入った OpenSearch ファイル。結果パネルに 4 件のドキュメントが表示される。

プロファイルを選ぶ

1 つの接続は 1 つの DynoTable プロファイルを使います。

  • DynoTable にプロファイルが 1 つだけなら、拡張機能はそれを使います。
  • 複数ある場合は、DynoTable: Select Profile を実行して 1 つ選びます。選ぶまでは、ステータスバーに警告が表示され、クリックすると Select Profile が表示されます。実行するとプロファイルを選ぶよう促されます。選んだプロファイルは、VS Code がこのワークスペースに保存します。

ステータスバーには選んだプロファイルが表示されます。エクスプローラーとすべての実行は、そのプロファイルを使います。

Select Profile は、DynoTable のプロファイルと、各プロファイルのサービスを一覧します。

VS Code の Select a DynoTable profile 一覧。2 つのプロファイルがあり、それぞれのサービスが表示される。
VS Code の Select a DynoTable profile 一覧。2 つのプロファイルがあり、それぞれのサービスが表示される。

拡張機能でできること

  • 補完: 実際のテーブルスキーマとインデックスマッピングに基づきます。
  • 診断とクイックフィックス: たとえば PartiQL の IN ('a') では Use brackets が表示され、 IN ['a'] に直します。
  • ホバー。
  • SQL と PartiQL の各ステートメントの上のレンズ行: Run、Open in DynoTable、ステートメントのクエリプラン。
  • Format Document による SQL と OpenSearch クエリのフォーマット。
  • SQL のテーブルエイリアスのリネーム。
  • Validate against the index: OpenSearch の JSON クエリで、このコードアクションはクエリが有効かどうかをインデックスに確認します。何も実行しません。
  • エクスプローラー: アクティビティバーの DynoTable アイコンで開きます。プロファイルの DynamoDB テーブルと、OpenSearch ターゲットごとのインデックスを一覧します。テーブルかインデックスをクリックすると、その新しいクエリが開きます。Refresh で一覧を読み直します。

エクスプローラーは、プロファイルのテーブルとインデックスをサイドバーに表示します。

VS Code のサイドバーにある DynoTable エクスプローラー。プロファイルの DynamoDB テーブルと、OpenSearch ターゲットのインデックスが表示される。
VS Code のサイドバーにある DynoTable エクスプローラー。プロファイルの DynamoDB テーブルと、OpenSearch ターゲットのインデックスが表示される。

クエリプランは、ステートメントの上のレンズ行で Run と Open in DynoTable の後に表示されます。プランは、DynoTable がテーブルをどう読むかを示します。キー条件のあるステートメントは Query で読みます。キー条件のないステートメントは Scan で読みます。Scan では、推定の項目数と読み込みキャパシティーユニット(RCU)がプランに表示されます。例: Run | Open in DynoTable | Scan orders · ~150 items · ~3 RCU · confidence: estimated。

レンズ行にプランが表示されるのは、ステートメントのテーブルがすべて DynamoDB のテーブルの場合だけです。 OpenSearch のインデックスを読むステートメントには、プランは表示されません。

キー条件のある SQL ステートメントの上のレンズ行。プランに orders テーブルへの Query が表示される。
キー条件のある SQL ステートメントの上のレンズ行。プランに orders テーブルへの Query が表示される。
キー条件のない SQL ステートメントの上のレンズ行。プランに orders テーブルの Scan と、推定の項目数と RCU が表示される。
キー条件のない SQL ステートメントの上のレンズ行。プランに orders テーブルの Scan と、推定の項目数と RCU が表示される。

クエリを実行する

ステートメントの上の Run をクリックするか、⌘↩(Windows と Linux では Ctrl+Enter)を押すか、DynoTable: Run を実行します。Run は選択範囲を使います。選択がなければカーソル位置のステートメントを、それもなければファイル全体を実行します。 OpenSearch クエリは、選択範囲かファイル全体を実行します。

行は 1 つの結果パネルに表示されます。1 回の実行で返るのは最大 500 行で、合計は DynoTable が件数を把握している場合にだけ表示されます。

Copy CSV と Copy JSON で行をコピーできます。Cancel で実行を止められ、パネルを閉じても止まります。一度に実行できるステートメントは 1 つです。

パネルの概要行には、行数、DynoTable がスキャンした項目数、実行時間が表示されます。

SQL ファイルの横にある DynoTable Results パネル。概要行に行数、スキャンした項目数、実行時間が表示され、Copy CSV と Copy JSON がある。
SQL ファイルの横にある DynoTable Results パネル。概要行に行数、スキャンした項目数、実行時間が表示され、Copy CSV と Copy JSON がある。

書き込みはアプリを通す

DynoTable SQL は、SQL Workbench と同じく読み取り専用です。

PartiQL の書き込みはエディタからは実行されません。代わりに Run が Stage in DynoTable を表示します。これはアプリでステートメントのテーブルを開きます。そこではステージングが変更をレビュー用に保持します。ステートメントはエディタに残ります。

Open in DynoTable は、ステートメントのテーブルかインデックスでアプリを開きます。レンズをクリックするか、SQL か PartiQL のステートメントにカーソルを置いて ⌘⇧↩ (Ctrl+Shift+Enter)を押します。どちらのショートカットも、VS Code のキーボードショートカットで変更できます。

Open in DynoTable には、そのプロファイルで開いた DynoTable ウィンドウが必要です。ウィンドウがない場合、メッセージに Open DynoTable が表示されます。

プランごとに動くもの

拡張機能は無料です。何が動くかは、アプリと同じく DynoTable のライセンスで決まります:

  • 無料または読み取り専用(サインイン済み): 補完、診断、ホバー、レンズ行、フォーマット、リネーム。PartiQL の SELECT ステートメント、OpenSearch クエリ(.opensearch ファイル)、 Validate against the index を実行できます。
  • トライアルまたは有料: SQL ステートメントの実行(SQL Workbench と同じ)。OpenSearch インデックスに対する SQL と、DynamoDB テーブルと OpenSearch インデックスの JOIN も含みます。
  • サインアウト: 何も動きません。DynoTable にサインインしてください。

ライセンス状態についてはアクティベーションを参照してください。

DynoTable はバックグラウンドで動作する

DynoTable が動いていないとき、拡張機能はウィンドウなしでアプリを起動します。アプリは VS Code を終了しても動き続け、次の VS Code ウィンドウはそれを再び使います。

ウィンドウを戻すには、いつもどおり DynoTable を開くか(Dock、スタートメニュー、アプリランチャー)、 VS Code に表示される DynoTable のメッセージで Open DynoTable をクリックします。

次の操作にはアプリのウィンドウが必要です:

  • DynoTable へのサインイン。
  • 期限切れの AWS サインイン。
  • Open in DynoTable と Stage in DynoTable。

macOS では、DynoTable の許可プロンプトに Visual Studio Code の名前が表示されることがあります。アプリを起動したのが VS Code だからです。

設定

設定デフォルト内容
dynotable.sqlFiles["**/*.dynotable.sql"]DynoTable が扱う .sql ファイルの glob パターン。ワークスペースフォルダーごとに設定します。
dynotable.appPath空DynoTable アプリのパス。アプリが標準のインストール場所にない場合に設定します。
dynotable.userDataDir空アプリのユーザーデータディレクトリ。設定すると、拡張機能はアプリを起動しません。

dynotable.userDataDir を設定すると、Open DynoTable もアプリを起動しません。そのディレクトリで DynoTable を自分で起動してください。

トラブルシューティング

接続していないとき、拡張機能は考えられる対処と Reconnect を含むメッセージを表示します。ステータスバーの DynoTable 項目をクリックすると、メッセージをもう一度確認できます。 DynoTable: Reconnect で再接続します。

メッセージ対処
The Editor integration is off in DynoTable.DynoTable の 設定 → エディタ連携 でオンにし、Reconnect をクリックします。
DynoTable is not installed.Download DynoTable をクリックしてインストールします。別の場所にインストールしている場合は Set App Path をクリックします。
DynoTable is signed out.Open DynoTable をクリックしてサインインし、Reconnect をクリックします。
This version of DynoTable is too old for the extension.DynoTable をアップデートして再起動し、Reconnect をクリックします。
The connection to DynoTable ended.DynoTable が終了した、エディタ連携がオフになった、または DynoTable がサインアウトしました。原因を直してから Reconnect をクリックします。
DynoTable refused the connection.DynoTable を再起動し、Reconnect をクリックします。
DynoTable is running, but the Editor integration is not serving.DynoTable を開き、設定 → エディタ連携 を確認します。
The extension could not start DynoTable.Set App Path をクリックし、dynotable.appPath にアプリを指定します。
Select a DynoTable profile to run queries and list tables.DynoTable: Select Profile を実行します。プロファイルを選ぶを参照してください。

アプリが終了した後は、Reconnect をクリックするまで何もアプリを起動しません。DynoTable が再起動した場合は、拡張機能が自動で再接続します。

DynoTable をアップデートしても再起動していない場合、古いアプリが一度だけウィンドウを開くことがあります。DynoTable を再起動してください。

プラットフォーム

拡張機能は macOS でテストしています。Windows と Linux はまだ検証していません。

Linux では、拡張機能はアプリを起動する前にアプリのバージョンを読めないため、古すぎるアプリは一度だけウィンドウを開きます。AppImage でインストールした場合は dynotable.appPath が必要です。Flatpak 版の VS Code には対応していません。

拡張機能が接続するのは、このコンピューター上の DynoTable アプリだけです。ソースは MIT ライセンスで GitHub にあります。

更新日