テスト可能なドキュメントスニペットの書き方
このガイドでは、AdCP ドキュメントに記述したコード例を自動テストで検証する方法を説明します。なぜドキュメントスニペットをテストするのか
ドキュメントの例を自動テストすることで、次のことが保証されます。- 例が最新の API に追随します
- コードスニペットが記載どおりに動作します
- 破壊的変更を即座に検知できます
- ドキュメントへの信頼性が高まる
.md と .mdx)内のコードブロックを そのまま 検証します。フロントマターで testable: true を付けると、そのページ内のすべてのコードブロックが抽出され実行されます。
ページをテスト対象にします
ページ全体をテスト対象にするには、フロントマターにtestable: true を追加します。
コードブロックの例
ページにtestable: true を付けると、すべてのコードブロックが実行されます。
Snippet Metadata
ローカルの前提条件を必要とする例には、スニペットメタデータを使います。requires-env=NAME は、名前付き環境変数が設定されていないときにスニペットをスキップします。integration=true は、デフォルトのローカル実行でスニペットをスキップします。それらの例は node tests/snippet-validation.test.cjs --integration または SNIPPET_INTEGRATION=true で実行します。
テストヘルパーの活用
簡潔な例を示す場合は、クライアントライブラリに含まれるテストヘルパーを使ってください。 JavaScript:ベストプラクティス
1. テストエージェントの認証情報を使います
例には常にパブリックテストエージェントを使用してください。- Test Agent URL:
https://test-agent.adcontextprotocol.org - MCP Token:
1v8tAhASaUYYp4odoQ1PnMpdqNaMiTrCRqYo9OJp6IQ - A2A Token:
L4UCklW_V_40eTdWuQYF6HD5GWeKkgV8U6xxK-jwNO8
2. 例は自己完結させる
テスト対象のスニペットは次を満たしてください。- 必要な依存関係をすべてインポートします
- 接続を初期化します
- 完結した処理を実行します
- 目に見える出力を返す(console.log など)
3. Use sandbox accounts
状態を変更する操作(作成・更新・削除)を示すときは、サンドボックスアカウント参照を使います。4. 非同期処理を扱います
JavaScript/TypeScript の例ではawait または .then() を使用してください。
5. 例は焦点を絞る
各スニペットでは 1 つの概念のみを示してください。テスト可能としてマークしないケース
次のようなドキュメントページにはtestable: true を付けるべきではありません。
1. 疑似コードや概念例を含むページ
実行を想定していない概念的な例が含まれている場合:2. 不完全なコード断片を含むページ
説明のために部分的なコードスニペットを示している場合:3. 設定/スキーマ例を含むページ
JSON スキーマや設定構造を示すドキュメントの場合:4. レスポンス例を含むページ
API レスポンス(リクエストではなく)の例を示すページ:5. テスト可能・非テスト可能なコードが混在するページ
実行可能なコードと概念的なコードが混在する場合はページを分割してください。- 完全に実行可能な例を載せたページに
testable: true - 概念的/部分的な例だけのページにはフラグを付けない
スニペットテストの実行
ローカルで実行
ドキュメントのスニペットをすべてテスト:docs/配下の.mdと.mdxをすべて走査- フロントマターに
testable: trueがあるページを検出 - それらのページから すべての コードブロックを抽出
- 各スニペットを実行して結果を報告
- 失敗した場合はエラー終了
Coverage Reporting
スキーマ裏付けの JSON 例と実行可能スニペットがどこに集中しているかを見るには、ドキュメント例カバレッジレポートを使います。test=false
docs/ をスキャンし、次を表示します。
$schemaを含み、したがってnpm run test:json-schemaでカバーされる JSON ブロック$schemaのない完全な JSON ブロックnpm run test:snippetsでカバーされる実行可能な JavaScript、TypeScript、Python、シェルのスニペット- 未検証の JSON または未テストの実行可能スニペットのギャップが最も大きいトップファイル
test=false
test=false
test=false
scripts/docs-json-field-audit-baseline.json に対して意図的にラチェットするときのみ --check を使います。
test=false
test=false
CI/CD での実行
スニペットテストを含むフルテストスイートは次で実行できます。- スキーマ検証
- 例の検証
- スニペット検証
- TypeScript の型チェック
サポート言語
現在テストでサポートされている言語:- JavaScript (
.js,javascript,js) - TypeScript (
.ts,typescript,ts) - compiled to JS - Bash (
.sh,bash,shell) - onlycurlcommands - Python (
.py,python) - requires Python 3 installed
制約
パッケージ依存: 外部パッケージ(@adcp/client や adcp など)をインポートするスニペットが動作するのは、次のいずれかを満たす場合のみです。
- パッケージがリポジトリの
node_modulesにインストールされています - もしくは
devDependenciesにパッケージが記載されています
- オプション 1: ライブラリを
devDependenciesに追加し、テストでインポートできるようにします - オプション 2: そのスニペットをテスト可能にしない(概念的な例として記載します)
- オプション 3: 依存関係のない curl/HTTP の例をテスト可能なドキュメントとして使います
テスト失敗時のデバッグ
スニペットテストが失敗した場合は次を確認してください。- エラーメッセージを確認 - どのファイルの何行目で失敗したかが表示されます
- 手動で実行 - コードをコピーしローカルで実行します
- テストエージェントへのアクセス確認 - https://test-agent.adcontextprotocol.org を確認
- 依存関係を確認 - すべての import が利用可能か確認
- スニペットを見直す - 自己完結しているか検証
@adcp/client パッケージのインストールが必要であることを示しています。
貢献ガイドライン
新しいドキュメントを追加するときは次を守ってください。- ✅ すべてのコードブロックが実行可能ならページ全体に
testable: trueを付ける - ✅ シンプルな例にはクライアントライブラリのテストヘルパーを使います
- ✅ コミット前にローカルでスニペットをテストする(
npm test) - ✅ 例は自己完結かつ完全な形にします
- ✅ 例ではテストエージェントの認証情報を使います
- ❌ 不完全な断片が 1 つでもあるページをテスト可能にしません
- ❌ 疑似コードを含むページをテスト可能にしません
- ❌ 同じページにテスト可能コードと非テスト可能コードを混在させない
- ❌ 例に本番用の認証情報を使わない
質問がありますか?
docs/quickstart.mdxにある既存のテスト可能な例を確認します- テストスイートを確認します:
tests/snippet-validation.test.js - Slack コミュニティ で質問します