JOURNAL — 2026-08-02
Zodから始まる、AIアプリのデータ検証とSDKの理解
非エンジニアが「技術名」ではなく「役割」から理解し、AIコーディングツールへ適切な指示を出すためのロードマップ。
開発・技術データ検証
けんさん
案内人個人事業主として、Web・写真・AI活用などに日々向き合っている案内人。現場で試しながら、本質を丁寧に整理する。
まりなさん
受け手けんさんのアシスタント。一般人目線で素朴な疑問や感想を代弁し、読みやすさをサポートする。
AI先生
整理係日々の対話相手であるLLMを擬人化した存在。親しみを込めて「先生」と呼ぶ、構造化の頼れる相棒。
Zodって、AIアプリを作るときによく聞く検証ツールですよね。AIが作ったデータの間違いを見つけてくれるもの、というイメージで合っていますか?
そうだなぁ… そう思っていたんだけど、TypeScriptとの違いやシステム全体の流れを整理していくと、役割の位置が少し違うみたいなんだよね。
ONE PAGE SUMMARY
データの品質管理は、静的な「設計図チェック」と、実物の「受入検品」を組み合わせる。
TypeScript(設計段階)とZod(動作時)の二重の防壁でバグとデータ崩れを防ぎます。
TypeScript
開発時の「コード設計図」を検証。製造部門のルール監視にあたる。
Zod
動作中に届く「実データ」を検品。受入部門の現物検品にあたる。
- 静的と動的の補完
- 外部データを信じない
- AI出力の検品
- 境界ごとのバリデーション
ここからひとつずつ、図で整理していきます。
整理すると、ZodはAI専用の道具ではありません。外部から届いたデータが、あらかじめ決めたルールに合っているかを動作中に検証するライブラリです。
AI出力は信用できない
AIに対してプロンプトで「JSONで出力して」とどれほど細かく指示しても、プログラムは返ってきたデータをそのまま無条件で信用してはいけません。指示(仕様書)と検証(検品)は明確に別工程です。
「AIへプロンプトで出力の仕様を指示したから、プログラム側でのチェックは不要である」
AIは確率で動くため形式が崩れることもあります。プロンプトはあくまで「納品仕様書」、Zodは実際に届いたデータを検品する「検品所」として分離して機能させます。
AIに対して「このJSON形式で返してね」と細かく指示しておけば、わざわざ別のツールでチェックしなくてもいい気がするのですが、それだけでは足りないのですか?
足りません。AIへの生成指示は、あくまでも納品仕様書を渡している状態です。AIがルール通りに出力する確率は高いですが、絶対に間違えない保証はありません。キーの名前が変わったり、入るべき値が空になったりします。
つまり、お願いすることと検品することは、全く別の工程なんだよね。だから、AIから返ってきたデータは必ずプログラムの入り口でZodを使って検品する必要があるんだ。
Zodの基本バリデーション
Zodは自律的に「正しいかどうか」を考える頭脳ではありません。人間が事前に定義したルールに沿って、流れてくるデータを形式的に検査し、合否判定を行います。
ルール定義
人間がデータの条件を先に書く
実データの受信
AIや外部からデータが到着
Zodの検査
定義した形式と合致するか確認
分岐処理
合格はDBへ、不合格はエラー補正
Zodは、データの内容がどれくらい賢いかを判断しているわけではないんだよね。あらかじめ人間が決めたルール、例えば日付の形式が正しいか、必須項目が欠けていないか、といった形式的なチェックを担当しているんだ。
なるほど!正解を知っている物知りな先生というよりは、あらかじめ渡された採点基準の紙に沿って、項目に丸やバツをつける検査係なんですね。
その通りです。ルールは人間が事前に定義します。例えばタスク情報なら、タイトルは1文字以上200文字以内、優先度は「高」「中」「低」のどれか、といった条件をプログラムが解釈できる形で設定します。
TypeScriptとZodの違い
どちらも「プログラムの間違いを見つけて安全にする」目的は同じですが、担当する部署と動くタイミングが異なります。
コードや設計図の品質を担保する
開発者が書いている最中のコード上の矛盾を指摘します。「仕様書と異なる書き方」をコード上に書いてしまった場合、実行する前に開発環境がエラーを出して教えてくれます。
実際に届いたデータの品質を担保する
アプリの動作中に、ユーザーからのフォーム入力やAIの出力など、何が届くか不確実な「外部データ」を検品します。仕様違反のデータはその場で弾いてバグを防ぎます。
TypeScriptとZodって、どちらも間違いを見つける品質管理の仲間だから混乱しやすいんだけど、所属する部署が違うと考えると分かりやすいんだよね。
部署ですか?同じチェックをするのに、どう違うのですか?
整理すると、TypeScriptは「製造部門」です。開発者が書いたコードに矛盾がないか、設計図通りに作られているかをチェックします。一方、Zodは「受入部門」です。アプリが動いている最中に、ユーザーが入力したフォームの内容や、AIから届いたデータなどの外来部品を検査します。
そうなんだ。TypeScriptだけでは、実際にアプリが動いているときにAIが壊れたJSONを返してきたことまでは防げない。だから、受入部門のZodが外で検品して、安全な状態にしてからTypeScriptの型として後ろの製造ラインに流すんだよね。
データが通過する境界と、Zodの配置
データベースの制約に頼るのではなく、データがシステムの中に入ってくるすべての境界で検証を行い、水際で不正なデータを止めることが極めて重要です。
1ユーザー入力フォーム
空欄や文字数超過などを画面入力の直後に検査して弾く(Zod)
2AI生成JSON
崩れたキーや不正な値を返していないか検品する(Zod・最重要)
3保存直前
DB制約による最後の保管規則。不正なデータが絶対に入らない砦
音声からタスクが保存されるまでにいろんな境界がありますね。どこで検品するのが一番いいんですか?
基本的には、データがシステムの中に入ってくるすべての境界で検品するべきなんだよね。特にAIから受け取ったタスクデータは、DBへ保存する直前ではなく、アプリ側の境界で早めに止めて検品するのが安全なんだ。
補足すると、Zodは入り口で不正なデータを止めて、合格したものだけをDBへ流す役割を担います。もしDB側だけの制約(倉庫のルール)に頼ってしまうと、エラーが起きたときにアプリ側で何が原因か特定しにくくなり、復旧や再生成の処理が難しくなります。
AIへの実装指示のコツ
AIにプログラムを作ってもらう際、単に「Zodを使って」とだけ指定する指示は不十分です。データ設計やバリデーションの「目的と構造」を指示文に含める必要があります。
Before(技術名だけの指示) Zodを使ってバリデーションを実装してください。 After(目的と構造の指示) 外部から受け取るデータはそのまま信用せず、 定義したスキーマによる実行時検証を行ってください。 AIが生成したJSONについても、検証に合格したデータだけを 後続処理やDB保存へ渡してください。 ユーザー入力、API、AI出力の各境界で失敗した場合の エラー処理方針を設計してください。
AIコーディングツールを使って開発するとき、つい「Zodを使って書いて」って言いたくなるんだけど、それだと一部のフォームにだけ簡易的に入ったりして、形だけの実装になりがちなんだ。
ええっ、使う技術の名前を直接言ったほうが、AIも分かりやすいんじゃないですか?
実は、技術名だけを指定すると、AIは目的を理解しないまま適当な場所にコードを埋め込んでしまいます。伝えるべきなのは「外部データをそのまま信用しないこと」「どの境界で検証するか」「失敗したときにどう補正するか」という目的と構造です。これが伝われば、AIは自然と適切なZodのコードを全体に書いてくれます。
SDKとVercel AI SDKの理解
SDK(Software Development Kit)は、外部サービスをコードから簡単に扱うための道具です。プロジェクトの目的に応じて「専用工具」と「共通工具」を使い分けます。
Gemini専用の「純正工具」(@google/generative-ai)
Gemini特有の機能(音声マルチモーダル等)に強いが、他のAI(GPTやClaude)の呼び出しは不可。
複数AIを一元管理できる「マルチ変換アタッチメント」(ai / @ai-sdk/google など)
同じ記述ルールでGemini/GPT/Claudeを切り替え。テキスト生成や共通構造化の管理に最適。
途中でSDKという言葉も出てきましたが、これはどういう意味ですか?Vercelに環境変数を登録したこととは違うのでしょうか?
異なります。Vercelはアプリを動かす場所で、環境変数はその鍵をしまう引き出しです。SDKは、プログラムのコードの中から、AIサービスなどの外部機能を簡単に呼び出すための便利道具セットを指します。
今の構成を確認したら、Geminiを呼び出すためにGoogle公式のSDKを使っていたね。これはGemini専用の工具だから、もしタスク分解のAIをGPTやClaudeに切り替えたいとなったら、別々の専用工具をコードに書き足す必要が出てくるんだ。Vercel AI SDKがあればその部分を綺麗に一元管理できるよ。
音声処理とタスク分解の適材適所
単一のSDKですべてをまとめようとするのではなく、特性に応じた「適材適所」のツール選定を行うことがシステム全体の保守性を向上させます。
音声認識
Google公式SDK / Browser API
Geminiの音声性能を最大化
タスク分解
Vercel AI SDKによる共通管理
複数モデルの柔軟な切り替え
受入検品(Zod)
共通スキーマによる動作時検証
どのAIからでも共通検品
すべてを一つのSDKに統一するのが正解ではないんだよね。音声のように、Geminiにしかない強みを使うところはGoogleの専用工具を使い、テキストのタスク分解のように複数のAIを切り替えて試したい部分はVercel AI SDKという共通工具を使うんだ。
専門の道具と、共通の道具を、役割に合わせて適材適所で組み合わせるのがいいんですね!そして最後に届いたデータは、どのAIから来たものであっても共通のZodスキーマで検品して、安全にDBへ保存する、と。
その通りです。この構造を整えることで、AIの進化に合わせてモデルを柔軟に変更しつつ、システムの安定性を保つことができます。
技術の難しいカタカナ名やコードの書き方ばかり追うより、「何を検品したいのか」「どういう流れでデータを安全にするのか」という設計の視点が一番大切なんだと分かりました!
そうだね。その設計の意図が言語化できれば、AIエージェントへの指示もぐっと良くなるし、出来上がったコードが本当に意図通りか判断できるようになるからね。少しずつ実践していこう。
この話、あなたの現場ではどうですか。
記事の話題そのままで構いません。「あの記事の件で聞きたい」——それだけで最初の一言になります。
- ヒアリング無料
- 全国対応(オンライン可)
- しつこい営業はしません