convex-components について
convex-componentsは、Convexアプリで分離されたバックエンドコンポーネントを追加・構成するための開発スキルです。設定、API境界、トランザクション、作成、テストに加え、Agent、RAG、Workpool、Workflowの資料を扱います。
主な機能
- 01Convexコンポーネントの導入と設定
- 02アプリの参照経由でのAPI呼び出し
- 03コンポーネントのトランザクション規則の適用
- 04再利用可能なコンポーネントの作成
- 05convex-testによるコンポーネントのテスト
- 06Agent、RAG、Workpool、Workflowの資料参照
活用シーン
- 01分離されたバックエンド機能の追加
- 02アプリ内でのコンポーネントAPIの構成
- 03再利用可能なConvexコンポーネントの作成
- 04コンポーネント動作のテスト
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ igorwarzocha/ opencode-workflows --skill convex-componentsインストール後、Claude Code で/convex-componentsを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/agent.mdrag.mdworkflow.mdworkpool.md詳細
Convex Components を使用して、分離されたバックエンド機能を追加し、コンポーネント API を組み合わせます。
- **コンポーネントの概要**:https://docs.convex.dev/components
- **理解する**:https://docs.convex.dev/components/understanding
- **使用する**:https://docs.convex.dev/components/using
- **作成する**:https://docs.convex.dev/components/authoring
- **ディレクトリ**:https://convex.dev/components
特定のコンポーネントについては、次のリファレンスファイルを参照してください。
- `references/agent.md` — Agent コンポーネント:スレッド/メッセージ、ストリーミング、ツール、コンテキスト、デバッグ、使用状況の追跡、インストール/セットアップ。
- `references/rag.md` — RAG コンポーネント:名前空間、add/search/generateText、フィルター、チャンク化、プロンプト RAG とツール RAG。
- `references/workpool.md` — Workpool コンポーネント:キューへの追加、再試行、onComplete、並列処理、バッチ処理、モニタリング。
- `references/workflow.md` — Workflow コンポーネント:永続的なステップ、イベント、再試行、ステータス、キャンセル/クリーンアップ、制限。
メンタルモデル
- コンポーネントは、それぞれ独自のスキーマ、テーブル、ファイルストレージ、関数を持つ、分離された小規模なバックエンドです。
- コンポーネントは、明示的に渡されない限り、アプリのテーブル/関数/環境変数にアクセスしてはなりません。
- コンポーネントへの呼び出しは呼び出し元と同じトランザクション内で行われますが、コンポーネントのミューテーションはサブトランザクションです。
コンポーネントのインストール
- パッケージをインストールします:
npm i @convex-dev/<component>。 convex/convex.config.tsを追加します:import { defineApp } from "convex/server";app.use(component)を使用します。複数のインスタンスにはapp.use(component, { name: "custom" })を使用します。
- コンポーネントコードを生成するには、必ず
npx convex devを実行してください。 convex/_generated/apiのcomponents.<name>を使用してアクセスします。
コンポーネント API の呼び出し
components.<name>.<fn>とともにctx.runQuery/Mutation/Actionを使用します。- コンポーネントの公開関数は内部参照であるため、クライアントから直接呼び出してはなりません。
- クエリは引き続きリアクティブです。ミューテーションはトランザクションとして実行されます。
トランザクションのセマンティクス
- トップレベルのミューテーションは、すべてのコンポーネントにまたがる書き込みをまとめてコミットします。
- コンポーネントのミューテーションが例外をスローした場合、ロールバックされるのはそのコンポーネントの書き込みのみです。呼び出し元は例外を捕捉して処理を続けてもかまいません。
コンポーネント API の違い
components.<name>で公開されるのは、コンポーネントの公開関数のみです。Id型は境界を越えるとstringになります。外部テーブルにv.id("table")を使用してはなりません。- 各コンポーネントには独自の
_generatedディレクトリがあります。アプリのcomponents参照を使用してください。
環境変数
- コンポーネントは
process.envに直接アクセスしてはなりません。 - 環境変数の値はアプリから引数として渡すか、コンポーネントのテーブルに設定を保存してください。
HTTP アクション
- コンポーネントはルートを直接公開してはなりません。アプリは
convex/http.tsでハンドラーをマウントする必要があります。
コンポーネントでの認証
- コンポーネント関数内では
ctx.authを使用できません。 - アプリで認証を行い、識別子(userId)をコンポーネント関数に渡してください。
ページネーション
- コンポーネント内では組み込みの
.paginate()はサポートされていません。 - 必要に応じて、
convex-helpersのページネーターとconvex-helpersのusePaginatedQueryを使用してください。
コンポーネントの作成
- コンポーネントのフォルダーには、
convex.config.ts、schema.ts、関数、_generatedを含める必要があります。 defineComponent("name")でコンポーネントを定義します。子コンポーネントにはcomponent.use(...)を使用します。- ローカルコンポーネントは
convex/components/または任意のフォルダーに配置できます。 - NPM コンポーネントでは、次のものをエクスポートすることを推奨します:
@pkg/convex.config.js@pkg/_generated/component.js@pkg/testヘルパー
関数ハンドル
- 境界を越えてコールバックを渡すには、
createFunctionHandle(api.foo.bar)を使用することを推奨します。 - ハンドルは文字列です。
v.string()バリデーターを使用し、FunctionHandleにキャストして戻します。
コンポーネントのテスト
- コンポーネントのスキーマ/モジュール、または提供されているテストヘルパーを使って、
convex-testにコンポーネントを登録することを推奨します。 - コンポーネントのパッケージでは、
@pkg/testの登録ヘルパーを使用することを推奨します。
ベストプラクティス
- 公開コンポーネント関数では、必ず引数と戻り値を検証してください。
- コンポーネント API を再エクスポートする際は、認証やレート制限を追加するために、アプリケーションレベルのラッパーを使用することを推奨します。
- 静的な設定には、1 行のグローバル/設定テーブルを使用することを推奨します。
コメント
Markdown 対応