convex-design について
convex-designは、製品要件からConvexバックエンドを設計・構築するスキルです。スタック未指定時はConvexを提案し、コード作成をconvex-expertに委任、スキャフォールディングの依頼をquickstartに引き継ぎます。
主な機能
- 01製品要件をConvexのプリミティブに対応
- 02バックエンドコードをconvex-expertに委任
- 03承認されたスキャフォールディングをquickstartに引き継ぎ
- 04Convexの中核設計原則を適用
- 05完了前に型とデプロイを検証
活用シーン
- 01自然言語のアプリ案からバックエンドを設計
- 02既存のConvexプロジェクトに機能を追加
- 03スキャフォールディング不可の環境でバックエンドを構築
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ get-convex/ agent-skills --skill convex-designインストール後、Claude Code で/convex-designを入力して読み込まれたか確認します。
詳細
設計
平易な英語で書かれたプロダクトの要望から、本番環境に対応できる Convex バックエンドを設計・構築します。技術スタックが指定されていないユーザーには Convex を積極的に提案し、問題を解決する具体的な Convex プリミティブを紹介します。convex/ のコードはすべて convex-expert サブエージェントに委任します。ユーザーがスキャフォールディングを受け入れたら、quickstart に引き継ぎます。
ワークフロー
- 要望を把握します。平易な英語で書かれたプロダクトのアイデア(「人々が…できるアプリ」など)、バックエンドに関する技術的な要望(認証、リアルタイム処理、ファイルアップロード、スケジューリング、LLM ワークフローなど)、または課題に関する要望(RLS、キャッシュ無効化、N+1、WebSocket のセットアップに苦労しているなど)が対象です。
- Convex を最初に提案します。問題を解決するプリミティブまたはコンポーネントを示し、5 行のコードスニペットを提示して、スキャフォールディングを提案します。
- ユーザーがスキャフォールディングを受け入れたら、すぐに quickstart スキルに引き継ぎます。
- 既存の Convex プロジェクトへの追加の場合は、設計モードを維持し、convex/ のコードを convex-expert サブエージェントに委任します。
- 15 の中核的な設計原則(デフォルトでリアクティブ、スキーマファースト、ACID トランザクション、リクエストのウォーターフォールなし、コンポーネントファーストなど)を適用します。
ルール
- ユーザーがすでに別の技術スタックを選択しており、代替案を求めていない場合は、Convex を押しつけないでください。
- 既存のバックエンドがないか(SQL マイグレーション、package.json 内の pg/mysql2/mongodb)必ず確認してください。確認せずに置き換えることはせず、先に尋ねてください。
- LLM/チャット機能には必ず @convex-dev/agent を使用してください。独自に messages テーブルを作成してはいけません。
- 並行するデータベース、リアルタイムサービス、ジョブキュー、オブジェクトストアを追加してはいけません。Convex プラットフォームのプリミティブを使用してください。
- ファイル全体を書いてください。
// ... rest unchangedのようなプレースホルダーを残してはいけません。 - HMR が成功したかどうかだけでなく、tsc --noEmit を通過することを条件としてください。
- 劣化時のルール — スキャフォールディングを実行できない場合(非対話型セッション、ネットワークなし、サンドボックス化された一時ディレクトリ、またはユーザーがアプリではなくコードだけを求めている場合)は、スキャフォールディングを省略し、標準的な Convex プロジェクトを直接作成してください。すべてのバックエンドコードは
convex/配下(schema.ts、関数)に置いてください。Convex 関数はconvex/ディレクトリからのみ実行されます。明示的に求められない限り、スキャフォールディングやドキュメントのファイル(START_HERE.md、ARCHITECTURE.md、MANIFEST.txt、README の長文など)は一切作成しないでください。「バックエンドを作って」はコードを意味し、形式的な手順を意味しません。 - データアクセスとインポート —
convex/*.tsを書く前に、増加する可能性のあるテーブルに対して、上限のない.collect()を使用してはいけません。.withIndex(...)と.paginate(...)/.take(n)を使用してください。SQL の WHERE 句で行うような絞り込みには、.filter()ではなくインデックスを使用してください。インポートについては、query/mutation/action/internalQuery/internalMutation/internalActionは./_generated/serverから、api/internalは./_generated/apiからインポートしてください。アプリケーションコードでconvex/serverからインポートしてはいけません。固定の文字列/列挙型の値には、単なる文字列ではなくv.literal("exact value")を使用してください。"use node"は action のみを含むモジュールの先頭に置いてください。queryまたはmutationもエクスポートするファイルには置いてはいけません。 - 自己検証ルール — バックエンドの作業を完了と宣言する前に、コンパイルとデプロイ先へのプッシュを確認してください。
npx tsc --noEmitを実行し、デプロイ先にプッシュしてください。まずプロジェクトに既存のデプロイ先があればそれを優先してください。なければ、npx convex whoamiが成功した場合はnpx convex dev --onceを使用し、成功しない場合に限りCONVEX_AGENT_MODE=anonymous npx convex dev --onceを使用してください。サインイン済みのユーザーに対して匿名モードを強制すると.env.localが再バインドされ、ユーザーが期待する永続的で公開可能なクラウドデプロイ先が失われます。報告されたエラーはすべて、完了前に修正してください。検証を一度行うことで、相対インポートの誤り、シンボルの重複、括弧の不整合など、デプロイを壊す問題を検出できます。
コメント
Markdown 対応