Supabase だけでバリデーションできる CHECK 制約が便利

要約
Supabase では PostgreSQL の CHECK 制約を活用することで、手軽にバリデーションをかけることができます。サーバーサイドでデータの整合性を保ちながら、クライアント側のコードをシンプルにすることができる便利な方法です。
意見はこのエリアに表示されます

もはや、Supabase の布教に近いですけど、最近、私はバックエンドの知識が全くない状態で Supabase を使ってプロジェクトを構築しています。

そして、特に「いいね」と感じたのはこの CHECK 制約の便利さです。

フロントエンドの開発者でも簡単にデータベース側でバリデーションを設定できて、非常に助かりました。

CHECK 制約 とは

CHECK 制約は、データベースのテーブルに挿入または更新するデータが特定の条件を満たすことを強制する制約です。指定された条件を満たさないデータは挿入または更新が拒否されます。

アプリケーションレベルでのバリデーションコードを書く手間を省きますし、データの一貫性を保つことができます。

製品価格を必ず正数にする

例えば、製品価格が常に正の数であることを保証したい場合、Supabase の GUI からでも SQL エディターからでも簡単に設定が可能です。

GUI を使う場合: Supabase のカラムを右クリックし、Constraints の CHECK Constraint フィールドに以下の条件式を指定します。

SQL エディターを使う場合: 以下の SQL を実行します。

このようにして、製品の価格が常に正数であることを保証できます。参考までに、タイラーさんの動画が役立ちます。

文字数を制限する

次に、name カラムの文字数を制限する場合です。例えば、name を 2 文字以上、30 文字以下にするための CHECK 制約を追加するには以下のようにします。

GUI の場合: CHECK Constraint フィールドに次の条件式を入力します。

SQL エディターを使う場合:

CHECK 制約を利用することで、データベース自体にバリデーションを持たせることができ、アプリケーションからのデータ入力に制限を設けることができます。詳細については PostgreSQL のドキュメント をご参照ください。

エラーハンドリング

データが CHECK 制約に違反した場合、データベースからエラーメッセージが返されます。

Supabase では、error.message を通じてこのエラーメッセージを取得することができ、フロントエンドでユーザーに適切なエラーを表示するのに役立ちます。

以下は、CHECK 制約違反に基づくエラーメッセージの例です。

また、エラーメッセージの内容に応じて条件分岐を行い、ユーザーにわかりやすいメッセージを返すこともできます。

このように、エラーハンドリングを行うことでユーザーにとって使いやすい UI を実現できます。

他のバリデーションの例

CHECK 制約は非常に柔軟で、他にもさまざまなバリデーションに活用できます。例えば:

日付の範囲チェック:

これにより、event_date が過去の日付でないことを保証できます。

特定の文字列のみ許可する: 例えば、status カラムが 'active''inactive' のみ許可されるようにするには、

おわりに

Supabase の CHECK 制約を活用することで、簡単にデータの一貫性を保ちながら、コードの複雑さを減らすことができます。特にフロントエンドの開発者にとっては、サーバーサイドのバリデーションを手軽に導入できるという点で、大きなメリットがあります。これから Supabase を使ったプロジェクトを検討している方は、ぜひ試してみてください。

Explore More
関連記事はありません。