2026 OpenClaw フロント実戦:
リモート Mac で REST/OpenAPI 契約 diff とスモーク curl 一括を連係(失敗要約)
契約ドリフトと手作業 curlは再現性を壊しがちです。リモート Macで OpenAPIをdiffしcurl 一括を固定パスへ、OpenClawが失敗要約にすればCIが安定します。プリフライトとWeb スモークと併用してください。
01 痛みと成果物の約束
典型は三つです。契約の発見が遅い、スモークが断片化してトークンや URL が人依存、失敗が散らばると判断が遅れる、です。
artifacts/api/<buildId>/ に基線・現行・diff・集計・meta.json を置き、終了コード 0/1/2 を固定します。OpenClaw はエクスポート→diff→curl→要約の順、通知は buildId で冪等にします。
02 OpenClaw インストールとツール呼び出し
node -v とロックを CI に揃え、diff CLI は devDependencies へ。実行ユーザーは .env.ci と内網へ届く非対話シェルにし、証明書はキーチェーンか SSL_CERT_FILE。初回はクリーンで手動し、artifacts/.../logs/ を確認してから自動化します。
cd /path/to/repo && npm ci && npm install -D @pb33f/openapi-changes
# チーム合意の oasdiff / openapi-diff 等に差し替え可
openclaw run --workspace /path/to/repo --env-file .env.ci \
--steps export-openapi,openapi-diff,smoke-curl,notify-summary
03 契約 diff とコマンド雛形
基線はマージ済み、現行はゲートウェイ等から。同一フォーマッタ後に比較し、破壊的件数でゲート、報告は build 配下へ。
mkdir -p artifacts/api/$BUILD_ID
curl -sS -o artifacts/api/$BUILD_ID/openapi.current.json "$OPENAPI_URL"
cp contracts/openapi.baseline.yaml artifacts/api/$BUILD_ID/
npx oasdiff breaking contracts/openapi.baseline.yaml \
artifacts/api/$BUILD_ID/openapi.current.json > artifacts/api/$BUILD_ID/diff.txt
04 スモーク curl 一括
一覧でケース名・パスを読み curl -w '%{http_code}' でコードだけ溜め、本文は短く切って JSON 化。トークンは env、プロキシは HTTPS_PROXY/NO_PROXY をタスクに渡します。
BASE_URL="${BASE_URL}"
while read -r name ep; do
code=$(curl -sS -o /dev/null -w "%{http_code}" -H "Authorization: Bearer $API_TOKEN" \
--max-time 15 "$BASE_URL$ep" || echo err)
echo "{\"case\":\"$name\",\"code\":\"$code\"}" >> artifacts/api/$BUILD_ID/curl.ndjson
done < scripts/smoke-endpoints.tsv
05 方針対照表
| 案 | 気づきの位置 | コストと運用 | 向く場面 |
|---|---|---|---|
| diff のみ | マージ前に破壊を止める | 基線レビューが要る | 契約駆動 |
| curl のみ | 死活の確認 | 一覧とトークン | 速い回帰 |
| diff+curl | 二系統の信号 | スクリプト化しやすい | プリリリース・固定機 |
06 失敗要約の生成と CI 直列
diff.txt と curl 集計から summary.md を生成し通知へ。プリフライトの後・Playwrightより前が定石。監査と artifacts を揃えると閲覧が楽です。
07 よくある失敗 FAQ
フォーマット差だけで diff が赤い:先に同一整形を通してから比較してください。
curl が一斉にタイムアウト:DNS・証明書・NO_PROXY を順に切り分けます。
通知が二重:キーに buildId と段階名を含めます。
E2E との役割分担:curl は軽い生存確認に留め、深い挙動は E2E へ渡します。
引用メモ:基線 contracts/openapi.baseline.yaml、meta.json に版と SHA。工件は artifacts/api/<buildId>+logs。入口は scripts/ci-api-smoke.sh、終了コード表を README に。