ecto-essentials について
ecto-essentialsは、リポジトリの規約に沿ってEctoのスキーマ、クエリ、データベース書き込みを扱うスキルです。ビジネスルールをコンテキストやドメインモジュールに置き、Repo呼び出しを永続化境界に保つ方法を案内します。
主な機能
- 01changesetによる外部入力の検証
- 02パラメーター化された合成可能なクエリ
- 03関連データのプリロード指針
- 04書き込みに適したトランザクション選択
- 05永続化変更のテスト
活用シーン
- 01Ectoスキーマの追加や更新
- 02安全なデータベースクエリの構築
- 03複数段階のデータベース書き込み実装
- 04永続化動作と関連テストの変更
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ igmarin/ elixir-phoenix-skills --skill ecto-essentialsインストール後、Claude Code で/ecto-essentialsを入力して読み込まれたか確認します。
同梱ファイルassets/changeset_snippets.exassets/migration_checklist.md
詳細
Ecto の基本
リポジトリの Ecto およびデータベースの規約に従ってください。ビジネスルールはコンテキストまたは純粋なドメインモジュールに置き、Repo の呼び出しは永続化の境界に置いてください。
スキーマとチェンジセット
- 永続化するデータはスキーマでモデル化し、外部入力はチェンジセットで検証してください。
- 外部マップには、フィールドの許可リストを明示して
cast/3を使用してください。信頼できる内部更新にはchange/2を使用してください。 - データベース制約を
unique_constraint/3、foreign_key_constraint/3、または対応する制約ヘルパーでチェンジセットに関連付け、想定されるデータベースエラーがチェンジセットのエラーとして返されるようにしてください。 - アソシエーションの所有権と削除時の動作は明示してください。ネストされた入力が公開操作の一部である場合にのみ
cast_assoc/3を使用してください。
クエリとアソシエーション
- 名前付きバインディングとパラメーター化された値を使って
Ecto.Queryのフラグメントを組み立ててください。ユーザー入力を SQL に直接埋め込まないでください。 - 再利用可能なフィルターと並べ替えはクエリ関数に置き、ポリシーとオーケストレーションはコンテキストに置いてください。
- 呼び出し元が必要とするものをプリロードしてください。リストの場合はクエリ数を確認し、行ごとの
Repo.get/2呼び出しよりも結合または一括プリロードを優先してください。 - 呼び出し元が想定する不在時の動作とエラー契約に応じて、
Repo.one/1、Repo.all/1、およびバン!バリアントを使い分けてください。
書き込みとトランザクション
- 想定される失敗は
{:ok, value}/{:error, changeset_or_reason}を返してください。 - トランザクションに複数の名前付きステップがある場合、または失敗したステップが呼び出し元にとって重要な場合は
Ecto.Multiを使用してください。小規模なアトミック処理には通常のトランザクションを使用してください。 - データベーストランザクション内でネットワーク呼び出しや、その他の取り消せない副作用を実行しないでください。
- アップサートでは競合対象を明示し、データベース制約がそれと一致していることを確認してください。
検証
永続化の動作を変更した場合は、テストを追加または更新してください。対象を絞ったテストを実行し、その後、Ecto とマイグレーションを対象とするプロジェクトのチェックを実行してください。より限定的な動作が中心となる場合にのみ、ecto-changeset-patterns、ecto-nested-associations、または ecto-migration を使用してください。
コメント
Markdown 対応