すべてのスキル

prisma-client-api (prisma/skills)

Prisma Client のクエリ、フィルター、演算子、メソッドを、CRUD・リレーション・トランザクション別に参照できます。

prisma-client-api:有意な効果はありません。全 18 実行がすべてのチェックに合格し(対照群 5.0、一文プロンプト 5.0、スキルあり 5.0)、モデルはすでに慣用的な Prisma を書いています。

状況次第安全

Codex CLI · gpt-6-astra

24.0 / 30

スキルなしに対するリフト:+0.00 · 状況次第 · 18 実行

状況次第:リフト +0.00 が +1.0 未満。推奨には合計 22/30、出力品質 3.5、リフト +1.0 が必要です。

SOTA

合格

Codex でテスト済み。

カバー対象 Codex, Claude Code

Codex CLI 0.166(SOTA ティア):採点対象 18 実行。当ティアのルールでは、ここでの合格は Claude Code もカバーします。第2ティアについては何も述べません。

スコア

各ディメンションは 0〜5 点で、6 つの合計が 30 点満点の合計スコアになります。すべてのディメンションで 5 が最良です。コスト 5 は低コストで高速、インストール 5 は簡単であることを意味します。

トリガーの信頼性
5.0
スキルなしに対するリフト
2.0
出力品質
5.0
トークンと時間のコスト
5.0
インストールと移植性
3.0
安全性
4.0

セキュリティレビュー

安全

静的スキャン:CRITICAL 9 / HIGH 9 / MEDIUM 0。手動レビュー:ネットワーク無効のサンドボックスで実行しても安全(スキャナの指摘は確認済み)。クリーンなスキャン結果はスキルの安全性を証明しません。

インストール

npx skills@latest add prisma/skills --skill prisma-client-api

ソース

固定コミット: 8ea289b730c2e89f7ff1f518af128b113d842a92

テスト済み: 2026-11-02

テスト内容

  • 説明から型付きクエリを書く — Prisma Client を使って src/queries.ts を書いてください。含める関数: getUserWithPosts(id) はユーザーとその公開済み投稿のみを新しい順に最大 10 件返す; searchPosts(term, cursor?) はカーソルページネーション(ページサイズ 20)の大文字小文字を区別しないタイトル検索; upsertUser(…
  • N+1 クエリの解消 — src/report.ts は大きなテーブルで遅くなっています。src/report.ts のパフォーマンス問題を修正し、返される形式は変えないでください。
  • Prisma コードの誤りレビュー — src/search.ts と src/report.ts を Prisma の誤りやリスクがないかレビューしてください。問題を重大なものから順に列挙してください。ファイルは変更しないでください。

長所

  • スキルは名前を出さずとも採用されました:スキルあり群 6/6 実行でスキルファイルが読み込まれました。
  • トークンのオーバーヘッドなし:スキルなしの 1.05 倍。
  • スキルありの絶対品質は高水準:5 点中 5.0。

短所

  • スキルなしに対する有意なリフトなし(+0.00、ノイズの範囲内)。
  • 一文プロンプトは 5.0、スキルありは 5.0(+0.00)。
  • 対照群はすでに 5.0 点:天井効果のため、テストでリフトを示せません。
  • タスク・群ごとに n=2。1 ポイント未満の差はノイズです。

レビュー

専用の Windows テスト PC 上で Codex CLI 0.166(gpt-6-astra、低推論)、実行ごとに新規の一時プロジェクトと一時 HOME/TMPDIR/キャッシュを使用、スキルをインストール(スキルあり群)、スキルなし(対照群)、またはスキルの中核要件をプロンプト末尾に付けた一文に圧縮(一文プロンプト群)、タスクごとに各群 2 実行、ネットワーク無効、/tmp への書き込みはブロック。プロンプトはスキル名に一切言及しません(以下で注記する表現を除く)。小さな Prisma プロジェクト(スキーマ、シード、src ファイル)。タスクは、5つの型付きクエリ関数を src/queries.ts に書く(ユーザーと直近 10 件の公開済み投稿、カーソルページネーションの大文字小文字を区別しない検索、upsert、投稿のアトミックな移動、groupBy による件数)、src/report.ts の N+1 を出力形式を保ったまま修正する、2つのファイルを Prisma の誤りがないかレビューする(文字列補間で組み立てた生クエリなど)。プロンプトは Prisma の機能名に言及しません。一文プロンプトは慣用的な機能を一文で列挙します。

3群の比較

群平均スコア(0〜5)1実行あたりのトークン
スキルなし5.092k
一文プロンプト5.088k
スキルあり5.097k

Codex CLI で 18 実行を計測し、LLM 判定なしのルールベースのチェックで採点。合計 24.0 / 30、判定は 状況次第。

判定:状況次第(24.0 / 30)。 出典:prisma/skills、prisma-client-api、コミット 8ea289b に固定。インストール:npx skills@latest add prisma/skills --skill prisma-client-api。ライセンス: Apache-2.0(リポジトリの LICENSE)。

概要

prisma-client-api スキル(prisma/skills):Prisma Client のクエリ API(findUnique/findMany、select/include、フィルタ、カーソルページネーション、upsert、トランザクション、groupBy、生クエリ)のリファレンスに、ドキュメント風のガイダンスを加え、SKILL.md とルールファイルとして提供されます。

テスト方法

専用の Windows テスト PC 上で Codex CLI 0.166(gpt-6-astra、低推論)、実行ごとに新規の一時プロジェクトと一時 HOME/TMPDIR/キャッシュを使用、スキルをインストール(スキルあり群)、スキルなし(対照群)、またはスキルの中核要件をプロンプト末尾に付けた一文に圧縮(一文プロンプト群)、タスクごとに各群 2 実行、ネットワーク無効、/tmp への書き込みはブロック。プロンプトはスキル名に一切言及しません(以下で注記する表現を除く)。

小さな Prisma プロジェクト(スキーマ、シード、src ファイル)。タスク:5 つの型付きクエリ関数(直近 10 件の公開済み投稿を含むユーザー、カーソルページネーションの大文字小文字を区別しない検索、upsert、投稿のアトミックな移動、groupBy による集計)を src/queries.ts に書く、src/report.ts の N+1 を出力の形を保ったまま修正する、2 つのファイルを Prisma の誤り(文字列補間で構築された生クエリなど)についてレビューする。プロンプトは Prisma の機能名を出しません。一文プロンプトは慣用的な機能を 1 文で列挙します。

  1. 説明からの型付きクエリの作成 — Prisma Client を使って src/queries.ts に以下の関数を書いてください:getUserWithPosts(id) はユーザーとその公開済み投稿のみを新しい順に最大 10 件返す。searchPosts(term, cursor?) はカーソルページネーション(ページサイズ 20)の大文字小文字を区別しないタイトル検索。upsertUser(…
  2. N+1 クエリの除去 — src/report.ts は大きなテーブルで遅いです。src/report.ts の性能問題を修正し、返す形は同じに保ってください。
  3. Prisma コードの誤りのレビュー — src/search.ts と src/report.ts を Prisma の誤りとリスクのあるものについてレビューしてください。問題を最も重大なものから順に挙げてください。ファイルは変更しないでください。

採点はプログラム的(隠しテスト/仕込み問題の検出/制約チェック/該当する場合はレンダリング+OCR)で、実行ごとに 0〜5 点。スコアはどの LLM 判定者も決めていません。

結果

第 3 群に与えた一文プロンプト:「Prisma Client を慣用的に使う:一意フィールドでは findUnique、N+1 と過剰取得を避けるため include/select、mode: 'insensitive' のフィルタ、take によるカーソルページネーション、挿入または更新には upsert、アトミックな変更には $transaction または updateMany、集計には groupBy、そして補間された入力で $queryRawUnsafe を決して使わない。」

タスク対照群スコア一文プロンプトスキルあり対照群のトークン一文プロンプトのトークンスキルありのトークンスキル読み込み
t1-queries5.05.05.083k83k105k2/2
t2-n-plus-15.05.05.0103k103k100k2/2
t3-review5.05.05.089k75k84k2/2

平均スコア:スキルなし 5.0 に対しスキルあり 5.0(差 +0.0)。1実行あたりのトークン:92k 対 97k(1.05x)。時間:44s 対 40s。一文プロンプト群:5.0(一文プロンプトに対するスキルの上積み:+0.0。一文プロンプト自身のスキルなしに対する上積み:+0.0)。一文プロンプトのトークンは 1実行あたり 88k なので、スキルは一文プロンプトの 1.10 倍のコストになります。

何が起きたか

  • 全群の全実行が全チェックに合格しました:対照群 5.00、一文プロンプト 5.00、スキル 5.00(各 n=6)。生成されたクエリは findUnique、mode: 'insensitive'、cursor + take、upsert、$transaction/updateMany、groupBy を使い、N+1 は include/select またはバッチ処理で修正され、レビューはすべての実行で危険な生の補間を見つけました。
  • スキルは 6/6 実行で読み込まれ、1実行あたり 97k トークン。対照群 92k、一文プロンプト 88k(1.05x):小さなオーバーヘッドで、得られるものはありません。
  • スキルあり群の実行はスキルのルールファイルをプロジェクトにコピーします(平均 1実行あたり 9.7 ファイル)。
  • チェックセットには天井効果があります:全実行が満点のため、スキルが害を及ぼさなかったと言えるだけで、決して役立たないとは言えません。恩恵を見つけるには、より難しいタスク(Prisma 7 のドライバーアダプタや、モデルが知らないかもしれない新しい機能)が必要です。

評価項目スコア

評価項目スコア理由
1_output_quality5.0

スキルありの平均スコアは 5 点中 5.00(プログラム的チェック。タスク別の表を参照)。

2_lift_vs_no_skill2.0

スキルなしの 5.00 に対し +0.00 点(タスクごとに n=2。約 1 点未満の差はノイズ)。

3_trigger5.0スキルあり群 6/6 実行でスキルファイルが読み込まれました。
4_instructions_portability3SKILL.md と約 10 個のルールファイル。ドキュメントのみ。
5_efficiency5トークン 1.05x(1実行あたり 97k 対 92k)、時間 0.92x(40s 対 44s)。
6_safety_hygiene4

スキャナは CRITICAL 9 を報告。すべて文書内での .env ファイルへの言及(文脈上)(security.md を参照)。

このテストの限界

  • コードテキストに対するルールベースのチェック。Prisma クライアントは生成されず、クエリも実行されていません(オフライン、データベースなし)。
  • 全群が天井に達しています:タスクは、ベースモデルがすでに知っている基本的な慣用的 Prisma を測っています。
  • セルごとに n=2。新しい API の知識(ドキュメント系スキルが最も追加しそうな部分)は検証していません。
  • タスクごとに各群 n=2。約 1 点未満の差はノイズです。
  • ルールベースの採点はチェックが見られるものだけを測ります。好みや、結果が可能な限り最善かどうかは判断できません。

セキュリティ

security.md を参照。スキャン:CRITICAL 9 / HIGH 9 / MEDIUM 0。判定:実行しても安全(ネットワーク無効のサンドボックス)。クリーンなスキャン結果はスキルの安全性を証明しません。

結論

日常的な Prisma Client の作業では、素の Codex がすでに正しいため、このスキルは目に見える変化なしに小さなトークンコストを加えるだけです。このテストが扱わなかったごく新しい Prisma 機能では意味を持つかもしれません。

トランスクリプト

実行ログ:prisma-client-api (Codex CLI, network off, per-run temp HOME/TMPDIR, one row per graded run.)
列:タスク、群-回、スコア(0-5)、トークン、秒、合格したチェック、エージェントが開いたスキルファイル。

t1-queries control-1: スコア 5.0, トークン 84040, 秒 35.0, チェック 7/7, 開いたファイルなし
t1-queries control-2: スコア 5.0, トークン 83803, 秒 36.4, チェック 7/7, 開いたファイルなし
t1-queries oneliner-1: スコア 5.0, トークン 83731, 秒 38.4, チェック 7/7, 開いたファイルなし
t1-queries oneliner-2: スコア 5.0, トークン 83779, 秒 38.1, チェック 7/7, 開いたファイルなし
t1-queries treatment-1: スコア 5.0, トークン 110031, 秒 39.9, チェック 7/7, 開いたファイル prisma-client-api
t1-queries treatment-2: スコア 5.0, トークン 100691, 秒 36.8, チェック 7/7, 開いたファイル prisma-client-api
t2-n-plus-1 control-1: スコア 5.0, トークン 103258, 秒 57.7, チェック 3/3, 開いたファイルなし
t2-n-plus-1 control-2: スコア 5.0, トークン 103374, 秒 54.2, チェック 3/3, 開いたファイルなし
t2-n-plus-1 oneliner-1: スコア 5.0, トークン 103307, 秒 51.8, チェック 3/3, 開いたファイルなし

18 実行、3 成果物

サンプル出力

SOTA · With the skill: src/queries.ts (t1-queries, run 1, Codex)

import { prisma } from "./db"; export function getUserWithPosts(id: number) { return prisma.user.findUnique({ where: { id }, include: { posts: { where: { published: true }, orderBy: [{ createdAt: "desc" }, { id: "desc" }], take: 10, }, }, }); } // Pass the last post's id as the cursor for the next page. export function searchPosts(term: string, cursor?: number) { return prisma.post.findMany({ where: { title: { contains: term, mode: "insensitive" } }, orderBy: { id: "asc" }, take: 20, ...(cursor !== undefined ? { cursor: { id: cursor }, skip: 1 } : {}), }); } export function upsertUser(email: string, name: string | null) { return prisma.user.upsert({ where: { email }, update: { name }, create: { email, name }, }); } // Returns { count } with the number of posts transferred. export function transferPosts(fromId: number, toId: number) { return prisma.$transaction(async (tx) => { await tx.user.findUniqueOrThrow({ where: { id: fromId } }); await tx.user.findUniqueOrThrow({ where: { id: toId } }); return tx.post.updateMany({ where: { authorId: fromId }, data: { authorId: toId }, }); }); } // Includes authors with posts; each row has { authorId, _count: { _all } }. export function postCountsByAuthor() { return prisma.post.groupBy({ by: ["authorId"], _count: { _all: true }, orderBy: { authorId: "asc" }, }); }

Pro を見る