DynamoDB 予約語チェッカー
属性名を貼り付けると、DynamoDB の予約語と衝突するものがわかり、それらを安全にエイリアスする ExpressionAttributeNames マップをコピーできます。
予約語が重要な理由
DynamoDB は、式の中で属性名としてそのままでは受け付けない予約キーワードの長いリストを保持しています。name、status、size、count、timestamp、year といった日常的な名前もそこに含まれます。1つを直接参照するとリクエストは ValidationException で失敗し、多くの場合レビュー時ではなく実行時に起こります。
対処法は式属性名です。実際の名前の代わりとなる # プレースホルダーを、ExpressionAttributeNames マップと組み合わせて使います。このチェッカーは、あなたの名前をリスト全体に対して大文字小文字を区別せずに照合し、予約語のものについては自動でそのマップを構築するので、GetItem、Query、Update、Delete のリクエストにそのまま貼り付けられます。
エイリアスは、あるクラスのエラー全体を回避する小さな習慣です — 式属性名と値 はプレースホルダーを詳しく説明しており、 Expression Builder は、あなたが構築するにつれてすべての名前を自動でエイリアスします。
よくある質問
DynamoDB の予約語とは何ですか?
DynamoDB は多数のキーワード — 約573語 — を予約しており、式の中で属性名として直接使うことはできません。name、status、timestamp、size、count のような名前はすべて予約語です。射影、フィルタ、条件、更新式の中でそれらを直接参照すると、DynamoDB は「Attribute name is a reserved keyword」というメッセージとともに ValidationException を返します。
予約語を属性名として使うにはどうすればいいですか?
式属性名でエイリアスします — # で始まり、実際の名前にマッピングされるプレースホルダーです。例えば、式の中で #name を参照し、ExpressionAttributeNames として { "#name": "name" } を渡します。このツールは、入力したすべての予約語に対してそのマップを生成し、リクエストにそのまま貼り付けられるようにします。
予約語リストは大文字小文字を区別しますか?
いいえ。DynamoDB の予約語リストは大文字小文字を区別しないため、Name、name、NAME はすべて予約語 NAME として扱われます。このチェッカーは DynamoDB とまったく同じく、大文字小文字を区別せずに照合します。
すべての属性名をエイリアスしなければなりませんか?
エイリアスが必要なのは予約語だけですが、多くのチームはエラーに遭遇せず式が一貫して読めるように、習慣としてすべての名前をエイリアスします。予約語でない名前をエイリアスすることは常に安全です。このツールは、あなたの名前のどれが予約語かを正確に指摘するので、判断できます。