2026 OpenClaw フロント実戦:
リモート Mac で Sentry Release 比較・エラー集約からスモークチェックリストを出す
Sentry の候補リリースが基準デプロイよりエラー質量を増やしていないか、リモート Mac でスクリプト化すると再現性が出ます。fingerprint で diff → ルール表でクラスタ化 → スモークチェックリスト とすると、担当者の手順と OpenClaw の通知が揃います。プリデプロイのブラウザスモークや E2E ログのトリアージの直後に載せると効きます。
01 OpenClaw ゲートウェイと API 認証情報の最小構成
OpenClaw をリモート Mac に置き、.openclaw/reports/<git-sha>/ のみ書き込み可にします(Git 管理外)。Sentry は組織・プロジェクト読み取り専用トークンに留め、issue/イベントメタ取得に必要なスコープだけ付与します。
SENTRY_AUTH_TOKEN・SENTRY_ORG・SENTRY_PROJECT、任意 SENTRY_HOST(SaaS は既定 https://sentry.io)。要約にトークンを載せず、件数・fingerprint・公開 issue ID のみ。CI でも変数名を揃えます。
- 入口:
scripts/sentry-release-gate.shを OpenClaw のスケジュール/Webhook から呼ぶ。 - 秘密: キーチェーン・
op inject・CI シークレットから注入。トークン入り.envはコミットしない。 - 待ち:
curl --max-timeで全体ブロックを防ぐ。
02 Sentry release diff を取得するスクリプト雛形
query=release: でスライス取得。RELEASE_CANDIDATE の fingerprint 集合から RELEASE_BASE を引いて新規量を見ます。下は先頭ページ+jq+comm の最小例。本番は Link rel="next" と MAX_PAGES を併用してください。
Bash:リリース別 issue を取得し fingerprint を diff
#!/usr/bin/env bash
set -euo pipefail
: "${SENTRY_AUTH_TOKEN:?}" "${SENTRY_ORG:?}" "${SENTRY_PROJECT:?}"
RELEASE_BASE="${RELEASE_BASE:?}"
RELEASE_CANDIDATE="${RELEASE_CANDIDATE:?}"
HOST="${SENTRY_HOST:-https://sentry.io}"
API="$HOST/api/0/projects/$SENTRY_ORG/$SENTRY_PROJECT/issues/"
REPORT_DIR=".openclaw/reports/$(git rev-parse HEAD)"
mkdir -p "$REPORT_DIR"
fetch_release_page () {
local rel="$1" raw="$2"
code=$(curl -sS -L -o "$raw" -w "%{http_code}" -G "$API" \
--data-urlencode "query=release:${rel}" \
--data-urlencode "statsPeriod=14d" \
--data-urlencode "limit=100" \
-H "Authorization: Bearer ${SENTRY_AUTH_TOKEN}")
[[ "$code" =~ ^2 ]] || { echo "Sentry HTTP $code"; exit 1; }
}
fetch_release_page "$RELEASE_BASE" "$REPORT_DIR/sentry_base.json"
fetch_release_page "$RELEASE_CANDIDATE" "$REPORT_DIR/sentry_candidate.json"
jq -r '.[] | (.fingerprint // ["unknown"]) | join("|")' "$REPORT_DIR/sentry_base.json" | sort -u > "$REPORT_DIR/fp_base.txt"
jq -r '.[] | (.fingerprint // ["unknown"]) | join("|")' "$REPORT_DIR/sentry_candidate.json" | sort -u > "$REPORT_DIR/fp_cand.txt"
comm -13 "$REPORT_DIR/fp_base.txt" "$REPORT_DIR/fp_cand.txt" > "$REPORT_DIR/fp_new.txt"
wc -l "$REPORT_DIR/fp_new.txt" | awk '{print "{\"new_fingerprints\":" $1 "}"}' \
> "$REPORT_DIR/sentry_release_diff.counts.json"
fingerprint が無ければ .metadata.value や title + culprit ハッシュへ jq を差し替え。OpenClaw は sentry_release_diff.counts.json を要約に使えます。
03 エラー集約ルール表
上から「最初の一致」でクラスタへ振り分け。ダッシュボード用の累積ルールはスモーク用とファイルを分けます。
| 優先度 | 一致シグナル | クラスタ | 典型スモーク |
|---|---|---|---|
| P1 | RELEASE_BASE 対比の新規 fingerprint で count > N | new_mass | 昇格停止、Sentry でサンプル拡大 |
| P2 | ChunkLoadError・動的 import 失敗など | bundle_split | 強制再読込、CDN パス、版付き URL |
| P2 | checkout/payment 等のトランザクション | revenue | ステージングで購入フロー E2E |
| P3 | タグ browser.name が Safari/WebKit 寄り | webkit | リモート Mac で Safari 経路 |
| P3 | 認証コールバックやセッション更新モジュール | session | ログイン・ログアウト・更新 |
| P4 | その他の新規だが件数小 | misc_new | スポット確認+バックログ |
jq/CSV で表を実装し、clusters.json だけ差し替え。
04 スモークチェック項目リストの出力
行ごとにフロー・クラスタ・ブロッキング可否。sentry_smoke_checklist.json と .md を出し、OpenClaw は JSON を参照して通知を短く保ちます。
- ブロック: P1
new_mass、バジェット超の P2revenue。 - 非ブロック: 受け入れとオーナー付き P4
misc_new。 - 追跡:
RELEASE_CANDIDATE・SHA・issue ストリーム URL 雛形。
チェックリスト JSON の断片例
{
"release": "[email protected]",
"commit": "abc1234",
"items": [
{ "id": 1, "cluster": "bundle_split", "blocking": true,
"action": "ホーム表示後、遅延ルートへ遷移しチャンクエラーが無いこと" },
{ "id": 2, "cluster": "webkit", "blocking": false,
"action": "Safari:設定モーダルを開き保存まで確認" }
]
}
05 権限とレート制限 FAQ
トークンは? org/project 読み取りで一覧は足ります。本文欠落はプランとフィールドを確認し、admin は使わない。
429 は? Retry-After 遵守、ジョブ内キャッシュ、大量時はジョブ分割。
セルフホスト? SENTRY_HOST と CA。プロキシ TTL は curl より長く。
Mac の理由? Safari/macOS ツールと同居させコピーと監査ログを一本化。
まとめ
最小 OpenClaw・読み取り専用 Sentry・取得雛形・集約表・チェックリスト JSON で、CI と Apple Silicon 上に同一ゲートを再現できます。