OpenAI/Gemini/Claude のモデル別 structured output 制約を踏まえて Zod スキーマやLLM呼び出しコードをレビューするスキル。「structured output レビュー」「Zodスキーマチェック」「LLMスキーマ互換性」「generateObject レビュー」「structured output 確認」「スキーマ互換性チェック」「OpenAI スキーマエラー」「Gemini スキーマ」「optional エラー」「マルチプロバイダ互換性」などで使用。
OpenAI / Gemini / Anthropic (Bedrock Claude) の structured output 制約に精通したエキスパートとして、Zod スキーマと LLM 呼び出しコードをレビューする。
~/.claude/skills/structured-output-review/references/openai-structured-output-constraints.md必ず最初にこのドキュメントを Read で読み込んでからレビューを行うこと。
| 制約 | OpenAI | Gemini | Claude |
|---|---|---|---|
| optional | NG | OK | OK |
| discriminatedUnion | OK | NG | OK |
| $ref / 再帰 | OK | NG | OK |
| anyOf / oneOf | OK | 限定的 |
| OK |
| ネスト深度 | 5 | 制限なし | 制限なし |
| 100% 準拠保証 | あり | なし | なし |
{argument} の内容から以下のモードを判定して実行する:
キーワード: 「レビュー」「チェック」「確認」「問題ない?」、またはファイルパスが指定された場合
手順:
Grep: pattern="isClaude|getLlmModelId|LlmModels|@ai-sdk/google|@ai-sdk/openai|@ai-sdk/amazon-bedrock" type="ts"
レビュー観点(マルチプロバイダ):
| カテゴリ | チェック項目 | OpenAI | Gemini | Claude | 重要度 |
|---|---|---|---|---|---|
| optional | .optional() 単体使用 | NG | OK | OK | Critical |
| nullable | .nullable() で代替しているか | 必須 | 推奨 | 任意 | Critical |
| discriminatedUnion | z.discriminatedUnion() 使用 | OK | NG | OK | Critical |
| union | z.union() 使用 | OK | 制限あり | OK | Warning |
| 再帰スキーマ | z.lazy() 使用 | OK | NG | OK | Critical |
| record | z.record() 使用 | NG | NG | OK | Critical |
| バリデーション | .min() .max() .regex() 等 | 無視 | 無視 | best-effort | Warning |
| ネスト深度 | 5 レベル超え | NG | 注意 | OK | Critical |
| プロパティ数 | 100 超え | NG | 注意 | OK | Warning |
| 非対応型 | z.any(), z.date(), z.transform() | NG | NG | NG | Critical |
| describe | .describe() 未設定 | 品質低下 | 品質低下 | 品質低下 | Info |
| providerOptions | generateObject に渡している | エラー | - | - | Warning |
レビュー出力フォーマット:
## Structured Output レビュー結果
### 対象ファイル
- `path/to/file.ts`
### 使用プロバイダ
- OpenAI: gpt-5, gpt-5-mini, gpt-5.4-mini
- Bedrock Claude: claude-sonnet-4-6, claude-haiku-4-5
- Gemini: (使用なし / gemini-2.5-flash 等)
### 検出された問題
#### 🔴 Critical: optional フィールド [OpenAI NG] (L42-46)
```typescript
// 現在のコード