checkly
世界中のロケーションからPlaywrightやAPIチェックを実行できるChecklyというモニタリングプラットフォームについて、CLIを使ったモニタリング設定、アラート設定、CI/CD連携などを開発者がスムーズに行えるように支援するSkill。
📜 元の英語説明(参考)
Expert guidance for Checkly, the synthetic monitoring platform that runs Playwright-based browser checks and API checks from locations worldwide. Helps developers implement monitoring-as-code (MaC) with the Checkly CLI, set up API and browser checks, configure alerting, and integrate monitoring into CI/CD pipelines.
🇯🇵 日本人クリエイター向け解説
世界中のロケーションからPlaywrightやAPIチェックを実行できるChecklyというモニタリングプラットフォームについて、CLIを使ったモニタリング設定、アラート設定、CI/CD連携などを開発者がスムーズに行えるように支援するSkill。
※ jpskill.com 編集部が日本のビジネス現場向けに補足した解説です。Skill本体の挙動とは独立した参考情報です。
下記のコマンドをコピーしてターミナル(Mac/Linux)または PowerShell(Windows)に貼り付けてください。 ダウンロード → 解凍 → 配置まで全自動。
mkdir -p ~/.claude/skills && cd ~/.claude/skills && curl -L -o checkly.zip https://jpskill.com/download/14735.zip && unzip -o checkly.zip && rm checkly.zip
$d = "$env:USERPROFILE\.claude\skills"; ni -Force -ItemType Directory $d | Out-Null; iwr https://jpskill.com/download/14735.zip -OutFile "$d\checkly.zip"; Expand-Archive "$d\checkly.zip" -DestinationPath $d -Force; ri "$d\checkly.zip"
完了後、Claude Code を再起動 → 普通に「動画プロンプト作って」のように話しかけるだけで自動発動します。
💾 手動でダウンロードしたい(コマンドが難しい人向け)
- 1. 下の青いボタンを押して
checkly.zipをダウンロード - 2. ZIPファイルをダブルクリックで解凍 →
checklyフォルダができる - 3. そのフォルダを
C:\Users\あなたの名前\.claude\skills\(Win)または~/.claude/skills/(Mac)へ移動 - 4. Claude Code を再起動
⚠️ ダウンロード・利用は自己責任でお願いします。当サイトは内容・動作・安全性について責任を負いません。
🎯 このSkillでできること
下記の説明文を読むと、このSkillがあなたに何をしてくれるかが分かります。Claudeにこの分野の依頼をすると、自動で発動します。
📦 インストール方法 (3ステップ)
- 1. 上の「ダウンロード」ボタンを押して .skill ファイルを取得
- 2. ファイル名の拡張子を .skill から .zip に変えて展開(macは自動展開可)
- 3. 展開してできたフォルダを、ホームフォルダの
.claude/skills/に置く- · macOS / Linux:
~/.claude/skills/ - · Windows:
%USERPROFILE%\.claude\skills\
- · macOS / Linux:
Claude Code を再起動すれば完了。「このSkillを使って…」と話しかけなくても、関連する依頼で自動的に呼び出されます。
詳しい使い方ガイドを見る →- 最終更新
- 2026-05-18
- 取得日時
- 2026-05-18
- 同梱ファイル
- 1
📖 Skill本文(日本語訳)
※ 原文(英語/中国語)を Gemini で日本語化したものです。Claude 自身は原文を読みます。誤訳がある場合は原文をご確認ください。
Checkly — 合成モニタリングとテスト
概要
Checklyは、世界中のロケーションからPlaywrightベースのブラウザチェックとAPIチェックを実行する合成モニタリングプラットフォームです。開発者がCheckly CLIを使用してmonitoring-as-code (MaC)を実装し、APIチェックとブラウザチェックを設定し、アラートを設定し、モニタリングをCI/CDパイプラインに統合するのを支援します。
手順
Monitoring as Code
# Checkly CLIをインストール
npm install -g checkly
# プロジェクト内で初期化
checkly init
# プロジェクト構造
# checkly.config.ts — グローバル設定
# __checks__/
# api/
# health.check.ts
# orders-api.check.ts
# browser/
# login-flow.check.ts
# checkout.check.ts
// checkly.config.ts — グローバル設定
import { defineConfig } from "checkly";
import { EmailAlertChannel, SlackAlertChannel } from "checkly/constructs";
const slackAlert = new SlackAlertChannel("slack-alerts", {
webhookUrl: process.env.SLACK_WEBHOOK_URL!,
channel: "#alerts",
sendFailure: true,
sendRecovery: true,
sendDegraded: true,
});
const emailAlert = new EmailAlertChannel("email-ops", {
address: "ops@example.com",
sendFailure: true,
sendRecovery: true,
});
export default defineConfig({
projectName: "My SaaS",
logicalId: "my-saas-monitoring",
repoUrl: "https://github.com/myorg/my-saas",
checks: {
locations: ["us-east-1", "eu-west-1", "ap-southeast-1"],
frequency: 5, // 5分ごとにチェック
tags: ["production"],
runtimeId: "2024.02",
alertChannels: [slackAlert, emailAlert],
browserChecks: {
frequency: 10, // ブラウザチェックは10分ごと
testMatch: "**/__checks__/browser/**/*.check.ts",
},
apiChecks: {
frequency: 1, // APIチェックは1分ごと
testMatch: "**/__checks__/api/**/*.check.ts",
},
},
});
API Checks
// __checks__/api/orders-api.check.ts — APIエンドポイントのモニタリング
import { ApiCheck, AssertionBuilder } from "checkly/constructs";
new ApiCheck("orders-api-health", {
name: "Orders API — Health Check",
request: {
method: "GET",
url: "https://api.example.com/v1/health",
headers: [{ key: "Authorization", value: `Bearer {{MONITORING_API_KEY}}` }],
assertions: [
AssertionBuilder.statusCode().equals(200),
AssertionBuilder.jsonBody("$.status").equals("healthy"),
AssertionBuilder.responseTime().lessThan(2000), // 2秒未満
],
},
degradedResponseTime: 1000, // 1秒を超えると劣化としてマーク
maxResponseTime: 3000, // 3秒を超えると失敗としてマーク
});
new ApiCheck("orders-create", {
name: "Orders API — Create Order Flow",
request: {
method: "POST",
url: "https://api.example.com/v1/orders",
headers: [
{ key: "Authorization", value: "Bearer {{MONITORING_API_KEY}}" },
{ key: "Content-Type", value: "application/json" },
],
body: JSON.stringify({
items: [{ productId: "test-product", quantity: 1 }],
test: true, // バックエンドが課金しないようにフラグを設定
}),
assertions: [
AssertionBuilder.statusCode().equals(201),
AssertionBuilder.jsonBody("$.id").isNotEmpty(),
AssertionBuilder.jsonBody("$.status").equals("pending"),
],
},
setupScript: {
// リクエストの前に実行 — 動的なデータを生成
content: `
const crypto = require('crypto');
request.headers['X-Idempotency-Key'] = crypto.randomUUID();
`,
},
teardownScript: {
// リクエストの後に実行 — テストデータをクリーンアップ
content: `
if (response.statusCode === 201) {
const orderId = JSON.parse(response.body).id;
// テスト注文を削除
await fetch(\`https://api.example.com/v1/orders/\${orderId}\`, {
method: 'DELETE',
headers: { 'Authorization': 'Bearer ' + process.env.MONITORING_API_KEY },
});
}
`,
},
});
Browser Checks (Playwright)
// __checks__/browser/checkout-flow.check.ts — E2Eユーザーフローのモニタリング
// Checklyのクラウドで10分ごとに実際のPlaywrightブラウザを実行します。
import { test, expect } from "@playwright/test";
test("Complete checkout flow", async ({ page }) => {
// Step 1: 製品ページに移動
await page.goto("https://example.com/products/starter-plan");
await expect(page.getByRole("heading", { name: "Starter Plan" })).toBeVisible();
// Step 2: カートに追加
await page.getByRole("button", { name: "Start Free Trial" }).click();
await expect(page.getByText("Added to cart")).toBeVisible();
// Step 3: チェックアウトに進む
await page.getByRole("link", { name: "Checkout" }).click();
await expect(page).toHaveURL(/.*checkout/);
// Step 4: 支払いフォームに入力 (テストカード)
await page.getByLabel("Email").fill("monitoring@example.com");
await page.getByLabel("Card number").fill("4242424242424242");
await page.getByLabel("Expiry").fill("12/28");
await page.getByLabel("CVC").fill("123");
// Step 5: 送信
await page.getByRole("button", { name: "Subscribe" }).click();
// Step 6: 成功を確認
await expect(page.getByText("Welcome to Starter Plan")).toBeVisible({ timeout: 10000 });
});
test("Login flow works", async ({ page }) => {
await page.goto("https://example.com/login");
await page.getByLabel("Email").fill(process.env.TEST_USER_EMAIL!);
await page.getByLabel("Password").fill(process.env.TEST_USER_PASSWORD!);
await page.getByRole("button", { name: "Sign in" }).click();
// ダッシュボードのロードを確認
await expect(page.getByRole("heading", { name: "Dashboard" })).toBeVisible();
await expect(page.getByText("Welcome back")).toBeVisible();
});
CI/CD Integration
# .github/workflows/deploy.yml — デプロイ後にチェックを実行
- name: Deploy to production
run: npm run deploy
- name: Run Checkly checks
uses: checkly/checkly-github-action@v1
with:
apiKey: ${{ secrets.CHECKLY_API_KEY }}
accountId: ${{ secrets.CHECKLY_ACCOUNT_ID }} 📜 原文 SKILL.md(Claudeが読む英語/中国語)を展開
Checkly — Synthetic Monitoring and Testing
Overview
Checkly, the synthetic monitoring platform that runs Playwright-based browser checks and API checks from locations worldwide. Helps developers implement monitoring-as-code (MaC) with the Checkly CLI, set up API and browser checks, configure alerting, and integrate monitoring into CI/CD pipelines.
Instructions
Monitoring as Code
# Install Checkly CLI
npm install -g checkly
# Initialize in your project
checkly init
# Project structure
# checkly.config.ts — Global configuration
# __checks__/
# api/
# health.check.ts
# orders-api.check.ts
# browser/
# login-flow.check.ts
# checkout.check.ts
// checkly.config.ts — Global configuration
import { defineConfig } from "checkly";
import { EmailAlertChannel, SlackAlertChannel } from "checkly/constructs";
const slackAlert = new SlackAlertChannel("slack-alerts", {
webhookUrl: process.env.SLACK_WEBHOOK_URL!,
channel: "#alerts",
sendFailure: true,
sendRecovery: true,
sendDegraded: true,
});
const emailAlert = new EmailAlertChannel("email-ops", {
address: "ops@example.com",
sendFailure: true,
sendRecovery: true,
});
export default defineConfig({
projectName: "My SaaS",
logicalId: "my-saas-monitoring",
repoUrl: "https://github.com/myorg/my-saas",
checks: {
locations: ["us-east-1", "eu-west-1", "ap-southeast-1"],
frequency: 5, // Check every 5 minutes
tags: ["production"],
runtimeId: "2024.02",
alertChannels: [slackAlert, emailAlert],
browserChecks: {
frequency: 10, // Browser checks every 10 min
testMatch: "**/__checks__/browser/**/*.check.ts",
},
apiChecks: {
frequency: 1, // API checks every 1 min
testMatch: "**/__checks__/api/**/*.check.ts",
},
},
});
API Checks
// __checks__/api/orders-api.check.ts — API endpoint monitoring
import { ApiCheck, AssertionBuilder } from "checkly/constructs";
new ApiCheck("orders-api-health", {
name: "Orders API — Health Check",
request: {
method: "GET",
url: "https://api.example.com/v1/health",
headers: [{ key: "Authorization", value: `Bearer {{MONITORING_API_KEY}}` }],
assertions: [
AssertionBuilder.statusCode().equals(200),
AssertionBuilder.jsonBody("$.status").equals("healthy"),
AssertionBuilder.responseTime().lessThan(2000), // Under 2 seconds
],
},
degradedResponseTime: 1000, // Mark as degraded if > 1s
maxResponseTime: 3000, // Mark as failed if > 3s
});
new ApiCheck("orders-create", {
name: "Orders API — Create Order Flow",
request: {
method: "POST",
url: "https://api.example.com/v1/orders",
headers: [
{ key: "Authorization", value: "Bearer {{MONITORING_API_KEY}}" },
{ key: "Content-Type", value: "application/json" },
],
body: JSON.stringify({
items: [{ productId: "test-product", quantity: 1 }],
test: true, // Flag so backend doesn't charge
}),
assertions: [
AssertionBuilder.statusCode().equals(201),
AssertionBuilder.jsonBody("$.id").isNotEmpty(),
AssertionBuilder.jsonBody("$.status").equals("pending"),
],
},
setupScript: {
// Run before the request — generate dynamic data
content: `
const crypto = require('crypto');
request.headers['X-Idempotency-Key'] = crypto.randomUUID();
`,
},
teardownScript: {
// Run after the request — clean up test data
content: `
if (response.statusCode === 201) {
const orderId = JSON.parse(response.body).id;
// Delete the test order
await fetch(\`https://api.example.com/v1/orders/\${orderId}\`, {
method: 'DELETE',
headers: { 'Authorization': 'Bearer ' + process.env.MONITORING_API_KEY },
});
}
`,
},
});
Browser Checks (Playwright)
// __checks__/browser/checkout-flow.check.ts — E2E user flow monitoring
// Runs a real Playwright browser in Checkly's cloud every 10 minutes.
import { test, expect } from "@playwright/test";
test("Complete checkout flow", async ({ page }) => {
// Step 1: Navigate to product page
await page.goto("https://example.com/products/starter-plan");
await expect(page.getByRole("heading", { name: "Starter Plan" })).toBeVisible();
// Step 2: Add to cart
await page.getByRole("button", { name: "Start Free Trial" }).click();
await expect(page.getByText("Added to cart")).toBeVisible();
// Step 3: Go to checkout
await page.getByRole("link", { name: "Checkout" }).click();
await expect(page).toHaveURL(/.*checkout/);
// Step 4: Fill payment form (test card)
await page.getByLabel("Email").fill("monitoring@example.com");
await page.getByLabel("Card number").fill("4242424242424242");
await page.getByLabel("Expiry").fill("12/28");
await page.getByLabel("CVC").fill("123");
// Step 5: Submit
await page.getByRole("button", { name: "Subscribe" }).click();
// Step 6: Verify success
await expect(page.getByText("Welcome to Starter Plan")).toBeVisible({ timeout: 10000 });
});
test("Login flow works", async ({ page }) => {
await page.goto("https://example.com/login");
await page.getByLabel("Email").fill(process.env.TEST_USER_EMAIL!);
await page.getByLabel("Password").fill(process.env.TEST_USER_PASSWORD!);
await page.getByRole("button", { name: "Sign in" }).click();
// Verify dashboard loads
await expect(page.getByRole("heading", { name: "Dashboard" })).toBeVisible();
await expect(page.getByText("Welcome back")).toBeVisible();
});
CI/CD Integration
# .github/workflows/deploy.yml — Run checks after deployment
- name: Deploy to production
run: npm run deploy
- name: Run Checkly checks
uses: checkly/checkly-github-action@v1
with:
apiKey: ${{ secrets.CHECKLY_API_KEY }}
accountId: ${{ secrets.CHECKLY_ACCOUNT_ID }}
# Run all checks and fail the pipeline if any fail
command: "checkly test --record"
# Deploy checks to Checkly (like deploying infrastructure)
checkly deploy
# Test locally before deploying
checkly test
# Dry run — show what would change
checkly deploy --preview
Installation
npm install -g checkly
checkly login
checkly init
Examples
Example 1: Setting up Checkly for a microservices project
User request:
I have a Node.js API and a React frontend running in Docker. Set up Checkly for monitoring/deployment.
The agent creates the necessary configuration files based on patterns like # Install Checkly CLI, sets up the integration with the existing Docker setup, configures appropriate defaults for a Node.js + React stack, and provides verification commands to confirm everything is working.
Example 2: Troubleshooting api checks issues
User request:
Checkly is showing errors in our api checks. Here are the logs: [error output]
The agent analyzes the error output, identifies the root cause by cross-referencing with common Checkly issues, applies the fix (updating configuration, adjusting resource limits, or correcting syntax), and verifies the resolution with appropriate health checks.
Guidelines
- Monitoring as code — Define checks in your repo alongside application code; version, review, and deploy together
- API + browser checks — API checks catch backend issues fast (every 1 min); browser checks validate user flows (every 10 min)
- Multi-region — Run checks from 3+ regions; catch regional outages and CDN issues
- Playwright for browser — Checkly uses Playwright natively; reuse your E2E tests as production monitors
- Degraded vs failed — Set degraded thresholds (e.g., > 1s) separate from failure (> 3s); catch slowdowns before they become outages
- Clean up test data — Use teardown scripts to delete test orders/users created by monitoring checks
- CI/CD integration — Run checks after every deployment; automatically catch regressions before users do
- Environment variables — Store API keys and test credentials as Checkly environment variables, not in code