クライアントが増えていくにつれ、管理するすべてのサイトで高パフォーマンスを維持することは大きな課題になります。品質の低いコードで作られたプラグイン、最適化できていない画像、サードパーティ製スクリプトなどが原因で、クライアントサイトの表示速度が低下し、PageSpeed Insights(PSI)のスコアも徐々に下がっていきます。
各WordPressサイトを手動でチェックするのではなく、すべてのサイトのパフォーマンス監視を自動化すれば、異常が発生した時のみ調査に集中できるようになります。シンプルかつ効率的な自動チェックを導入することで、チームの作業時間を毎月何時間も削減可能です。
この記事では、Kinsta APIとGoogle PageSpeed Insights APIを組み合わせて使用し、KinstaでホストしているWordPressサイトすべてのパフォーマンス監視を自動化する方法をご紹介します。最後に、SlackのWebhookを使ってデータをリアルタイムでチームに共有し、cronジョブで一連の処理を自動実行する方法も紹介します。
ワークフロー概要─Kinsta・PageSpeed Insights・Slackの連携
このスクリプトは、Kinsta、Google PageSpeed Insights、Slackの3つのAPIを連携させて、サイトパフォーマンスの監視を自動化するものです。
まず、Kinsta APIを呼び出してサイトのドメインと環境情報を取得します。これにより、クライアントサイトを追加してもドメイン一覧を常に最新の状態に保つことができます。
次に、Kinsta APIから取得した各サイトに対して、Google PSI APIを使用し、主要な指標であるPerformance Score(0〜100)、First Contentful Paint(FCP)、Largest Contentful Paint(LCP)を取得します。
最後に、サイト名、3つのスコア、およびPageSpeed Insightsへのリンクを指定したSlackチャンネルに投稿します。
ツールのセットアップ
コーディングの前に2つのAPIキーを生成して、簡単な設定を行います。
Kinsta APIの利用:権限の確認とAPIキーの発行
Kinsta APIを利用するには、必要な権限を持つアカウントで発行されたAPIキーが必要です。本記事の例では、会社のオーナーまたは会社管理者(Company Administrator)アカウントを使用します。
Kinsta APIキーを作成するには、MyKinstaにログインし、以下の手順を実行してください。
- 画面右上からユーザー名をクリックし、「企業の設定」>「APIキー」画面に移動する
- 「APIキーを作成」をクリックする
- 有効期限を設定し、APIキーに一意の名前を付ける
- 「生成」をクリックする

なお、APIキーはこのタイミングでしか表示されません。必ずコピーして、安全な場所に保管してください。
次に必要なのは、MyKinstaの企業IDです。これはMyKinstaのURLのクエリ文字列内(idCompanyパラメータ)で簡単に確認できます。
これらの情報が揃えば、Kinsta APIにアクセスし、cURLを使って自社のサイト一覧を取得できます。お使いのコマンドラインツールを開き、以下のコマンドを入力してください。<YOUR_COMPANY_ID>と<YOUR_API_KEY>はご自身の情報に置き換えてください。
curl -X GET "https://api.kinsta.com/v2/sites?company=<YOUR_COMPANY_ID>"
-H "Authorization: Bearer <YOUR_API_KEY>"
企業IDとAPIキーが正しければ、以下のような構造のJSONレスポンスが返されます。
{
"company": {
"sites": [
{
"id": "YOUR_SITE_ID",
"name": "my-wordpress-website",
"display_name": "My WordPress website",
"status": "live",
"site_labels": []
}
]
}
}
ご覧のとおり、このレスポンスには重要な情報であるサイトのURLが含まれていません。各環境のプライマリドメインを取得するには、クエリ文字列にinclude_environments=trueパラメータを追加します。このパラメータを指定すると、APIは各環境(本番環境およびステージング環境)の詳細情報も返すようになり、そこにプライマリドメインが含まれます。以下は一般的なレスポンス例です。
{
"company": {
"sites": [
{
"id": "54fb80af-576c-4fdc-ba4f-b596c83f15a1",
"name": "firstsite",
"display_name": "First site",
"status": "live",
"siteLabels": [
{
"id": "54fb80af-576c-4fdc-ba4f-b596c83f15a1",
"name": "Do not remove"
}
],
"environments": [
{
"id": "54fb80af-576c-4fdc-ba4f-b596c83f15a1",
"name": "live",
"display_name": "Live",
"is_blocked": false,
"id_edge_cache": "54fb80af-576c-4fdc-ba4f-b596c83f15a1",
"cdn_cache_id": "54fb80af-576c-4fdc-ba4f-b596c83f15a1",
"is_opt_out_from_automatic_php_update": false,
"web_root": "/release_v1",
"image_optimization_type": "lossy",
"is_additional_sftp_accounts_enabled": false,
"is_premium": false,
"wordpress_version": "6.3.1",
"domains": [ ... ],
"primaryDomain": {
"id": "54fb80af-576c-4fdc-ba4f-b596c83f15a1",
"name": "example.com",
"site_id": "54fb80af-576c-4fdc-ba4f-b596c83f15a1",
"is_active": true,
"type": "live"
},
"ssh_connection": { ... }
},
"container_info": { ... }
}
]
}
]
}
}
次に、Google PageSpeed InsightsのアプリケーションとAPIキーを生成します。
Google PageSpeed Insights用のAPIキーを発行する
次のステップは、Google PageSpeed InsightsサービスにアクセスするためのAPIキーを作成することです。Google Cloud コンソールにログインし、以下の手順を実行してください。
ステップ1. 新規プロジェクトを作成するか、既存のプロジェクトを開きます。本記事では「Performance Monitoring」(パフォーマンス監視)という新規プロジェクトを作成しました。

ステップ2. 「APIとサービス」>「ライブラリ」に移動し、ページの一番下で「PageSpeed Insights API」を検索してボタンをクリックします。

ステップ3. 次のページで、「有効にする」をクリックします。

ステップ4. 「認証情報」タブで「認証情報を作成」をクリックします。

ステップ5. セキュリティを強化するため、「PageSpeed Insights API」のみを選択して、新規作成したキーの制限を設定することをおすすめします。

以上で、PageSpeed Insights APIキーを使用する準備が整いました。最後に新規Slack アプリを作成します。
Slackアプリを作成して、Incoming Webhookを設定
特定のSlackチャンネルにメッセージを送信するには、以下の手順でSlackアプリを作成する必要があります。
ステップ1. チーム内のコミュニケーションにSlackを日常的に使用している場合は、すでにワークスペースが存在しているはずです。まだ作成していない場合は、Slackの公式ドキュメントを参照してワークスペースを作成してください。本記事では「My Company」という既存のワークスペースがある前提で進めていきます。
ステップ2. Slack APIダッシュボードにアクセスし、「Create an App(アプリを作成)」(初めてでない場合は「Create New App(新規アプリを作成)」をクリックします。

ステップ3. 以下のようにアプリのスコープと設定を求められます。「From Scratch(最初から設定)」を選択してください。

ステップ4. アプリケーションに名前を付け(例:Performance Bot)、ワークスペースを選択します。

ステップ5. 左のサイドバーから「Incoming Webhooks」のトグルをクリックして、「On」にします。続いて、ページ下部の「Add New Webhook(新規Webhookを追加)」をクリックします。

ステップ6. 「Webhook URL」をコピーし、今後のために保存します。

これで、サイトのパフォーマンス指標をチームとSlackで自動的に共有するスクリプトを作成するのに必要なものがすべて揃いました。ここからは、いよいよコーディングに入ります。
パフォーマンス監視を自動化するPHPスクリプト
次のステップは、Kinstaでホストしているすべてのクライアントサイトのパフォーマンスを自動的に監視するため、前述の3つのサービスと通信するスクリプトを作成します。
ステップ1. スクリプトの設定
任意のコードエディターで新規.phpファイルを作成し、以下のコードを追加します。
<?php
$kinsta_api_key = 'YOUR_KINSTA_API_KEY';
$kinsta_company_id = 'YOUR_COMPANY_UUID';
$google_api_key = 'YOUR_GOOGLE_API_KEY';
$slack_webhook_url = 'YOUR_SLACK_WEBHOOK_URL';
echo "--- STARTING PERFORMANCE MONITORING ---n";
プレースホルダーを、先ほど取得した実際のデータに置き換えてください。
ステップ2. Kinsta APIを使用して企業サイトのリストを取得
MyKinstaアカウント内のサイトのリストを取得するには、Kinsta API v2と/sitesエンドポイントを使用します。
ここでは、cURL経由でAPIにアクセスする方法を説明します。
// 1. Kinstaからサイト一覧を取得する
$url_kinsta = "https://api.kinsta.com/v2/sites?company=" . $kinsta_company_id . "&include_environments=true";
$ch = curl_init($url_kinsta);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Authorization: Bearer ' . $kinsta_api_key]);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$res_kinsta = curl_exec($ch);
$data_kinsta = json_decode($res_kinsta, true);
curl_close($ch);
$sites = $data_kinsta['company']['sites'] ?? [];
echo "Found " . count($sites) . " sites to analyze.n";
なお、環境の詳細情報(本番環境およびステージング環境)を取得するために、クエリパラメータinclude_environments=trueを使用しています。
次に、Google PSI APIにクエリを発行し、Slackアプリにデータを送信します。
PageSpeed Insightsの指標とSlackの通知
次に、取得した各サイトのURLをPageSpeed Insights APIに送信します。サービスを呼び出すと、PageSpeed Insightsがパフォーマンスチェックを実行し、パフォーマンス指標を含むオブジェクトを返します。スクリプトではこのデータをSlack APIに送信し、対応するメッセージを生成します。
以下が、スクリプトに追加するコードです。
foreach ($sites as $site) {
$site_label = $site['display_name'];
$primary_domain = "";
// 2. ダウンロードしたデータから本番環境(live)を直接検索する
$environments = $site['environments'] ?? [];
foreach ($environments as $env) {
if ($env['name'] === 'live') {
$raw_domain = $env['primaryDomain'] ?? $env['primary_domain'] ?? null;
$primary_domain = is_array($raw_domain) ? ($raw_domain['name'] ?? "") : $raw_domain;
break;
}
}
if (empty($primary_domain)) {
echo "Skipping $site_label (No Live domain found).n";
continue;
}
echo "Analyzing $primary_domain... ";
// 3. PageSpeed分析
$psi_url = "https://www.googleapis.com/pagespeedonline/v5/runPagespeed?url=https://" . urlencode($primary_domain) . "&key=$google_api_key&category=performance&strategy=mobile";
$res_psi = @file_get_contents($psi_url);
if ($res_psi === false) {
echo "PSI Error.n";
continue;
}
$data_psi = json_decode($res_psi, true);
$score = ($data_psi['lighthouseResult']['categories']['performance']['score'] ?? 0) * 100;
$fcp = $data_psi['lighthouseResult']['audits']['first-contentful-paint']['displayValue'] ?? 'N/A';
$lcp = $data_psi['lighthouseResult']['audits']['largest-contentful-paint']['displayValue'] ?? 'N/A';
// 4. Slackにリッチ通知を送信する
$report_link = "https://pagespeed.web.dev/analysis?url=https://" . $primary_domain . "&strategy=mobile";
$slack_msg = [
"text" => "🚀 *パフォーマンスレポート: $site_label*nURL: `https://$primary_domain` nn" .
"• *スコア:* `$score` n" .
"• *FCP:* $fcp n" .
"• *LCP:* $lcpnn" .
"[ <$report_link|View Full Report> ]"
];
$ch = curl_init($slack_webhook_url);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($slack_msg));
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_exec($ch);
curl_close($ch);
echo "Done.n";
}
echo "--- MONITORING COMPLETED ---n";
このコードは要するに、$sites配列の要素を順に処理し、各サイトのCore Web Vitalsを取得したうえで、Slackにメッセージを投稿します。
スクリプトのテスト
SSHでコンテナに接続し、ターミナルから直接PHPスクリプトを実行できます。これにより、スクリプトのトラブルシューティングを迅速に行い、パフォーマンス結果をSlackでリアルタイムに確認できます。
MyKinstaで「サイト」から該当のサイトを選択します。「情報」画面をスクロールして「メインSFTP/SSHユーザー」セクションを開き、「SSHのターミナルコマンド」欄を確認してください。以下のようなコマンドが表示されます。
ssh wordpress@host-name -p port-number
SSHターミナルコマンドをコピーしてターミナルに貼り付けます。同じセクションに表示されているパスワードの入力を求められるので、入力してEnterキーを押してください。これでコンテナ環境に接続できます。

これでコードをテストできます。コマンドラインから、スクリプトをアップロードしたフォルダへ移動してください。本記事の例ではpublicフォルダを使用しています。
cd public
次に、以下のコマンドを使用してスクリプトを実行します。
php performance-monitor.php
このスクリプトは、実行した各処理ごとにメッセージを出力します。実行が完了すると、以下のようなメッセージ一覧が表示されるはずです。
--- STARTING FULL PERFORMANCE MONITORING ---
Found 5 sites to analyze.
Analyzing site1.kinsta.cloud... Done.
Analyzing site2.kinsta.cloud... Done.
Analyzing site3.kinsta.cloud... Done.
Analyzing example.com... Done.
Analyzing site5.kinsta.cloud... Done.
--- MONITORING COMPLETED ---
PSIが一定時間内に応答しない場合、スクリプトは次のサイトの処理へ進みます。その場合、以下のようなメッセージが表示されます。
--- STARTING FULL PERFORMANCE MONITORING ---
Found 5 sites to analyze.
Analyzing site1.kinsta.cloud... Done.
Analyzing site2.kinsta.cloud... Done.
Analyzing site3.kinsta.cloud... Done.
Analyzing example.com... PSI Error.
Analyzing site5.kinsta.cloud... Done.
--- MONITORING COMPLETED ---
スクリプトがGoogle PSIの回答を処理すると、Slackチャンネルにメッセージが送信されます。PSIによる分析に成功したサイトごとに、以下のようなSlackメッセージが表示されます。

これで、自動監視システムの構築が完了しました。
次は、運用に合わせて調整していきます。たとえば数百の顧客サイトを管理している場合、サイトごとにSlackへメッセージを送るのは非効率になりがちです。
そこで、サイトの総合スコアを判定し、PSI APIから返された値が指定したしきい値(例:90)を下回った場合にのみ、Slackチャンネルへ通知する条件を追加できます。以下のコードで実現できます。
$threshold = 90;
// 4. Slackにリッチ通知を送信する
// アラートは、現在のスコアが設定したしきい値を下回った場合にのみ発動します
if ($score < $threshold) {
echo "Score below threshold. Sending Slack alert... ";
$report_link = "https://pagespeed.web.dev/analysis?url=https://" . $primary_domain . "&strategy=mobile";
// Slackメッセージを準備
$slack_msg = [
"text" => "⚠️ *パフォーマンスアラート: $site_label*nThe site score has dropped below the threshold of *$threshold*!nn" .
"• *スコア:* `$score` n" .
"• *FCP:* $fcp n" .
"• *LCP:* $lcpnn" .
"[ <$report_link|View Full Audit Report> ]"
];
// SlackのWebhookに対してcURLリクエストを実行
$ch = curl_init($slack_webhook_url);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($slack_msg));
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_exec($ch);
curl_close($ch);
echo "Done.n";
} else {
echo "Score is optimal ($score). No alert sent.n";
}
スクリプトを更新してファイルを保存し、再度アップロードします。次にSSHでサーバーに接続し、該当フォルダへ移動したうえで、もう一度次のコマンドを実行します。
php performance-monitor.php
スクリプトに別のファイル名を付けている場合は、コマンド内の名前を適宜変更してください。実行すると、ターミナルには以下のようなメッセージが順に表示されます。
--- STARTING FULL PERFORMANCE MONITORING ---
Found 5 sites to analyze.
Analyzing site1.kinsta.cloud... Score is optimal (100). No alert sent.
Analyzing site2.kinsta.cloud... Score is optimal (95). No alert sent.
Analyzing site3.kinsta.cloud... Score is optimal (100). No alert sent.
Analyzing example.com... Score below threshold. Sending Slack alert... Done.
Analyzing site5.kinsta.cloud... Score below threshold. Sending Slack alert... Done.
--- MONITORING COMPLETED ---
Slackでは、総合スコアがしきい値90を下回ったサイトごとにメッセージが表示されます。

すでにいい感じですが、さらにこのプロセスを最適化することができます。コマンドラインツールを開かなくても、一定間隔でスクリプトを自動実行できれば、さらに時間を削減できます。これには、cronジョブを使用します。
cronジョブを使用してプロセスを自動化する
Kinstaでcronジョブを設定する方法はいくつかあります。WordPress経由で設定することも可能ですが、Kinstaでは各サイトのコンテナに対してサーバーレベルのcronジョブを追加できます。
Kinstaでcronジョブを設定するには、cronコマンドを作成し、SSH経由でコンテナのcrontabファイルに追加します。
たとえば、以下のようなコマンドが利用可能です。
0 10 * * * /usr/bin/php /www/yoursite_123/public/your-script.php >> /www/yoursite_123/performance_monitor.log 2>&1
cronコマンドを作成したら、それをサイトのコンテナに追加する必要があります。サポートチームに依頼することもできますが、SSH経由で自分で設定することも可能です。自分で行う場合は、まず以下のコマンドを実行します。
crontab -e
エディターの選択を求められます。特に指定がなければ「nano」を選択してください。
エディターが開いたら、ファイルの末尾に作成したコマンドを貼り付けます。保存してコマンドラインに戻ると、変更が正常に反映されたことを示すメッセージが表示されます。
crontab installing new crontab
Kinsta APIでさらに自動化&スケールアップ
本記事で紹介したスクリプトは、さらにカスタマイズや拡張が可能です。たとえば、TrelloやAsanaなどの外部サービスと連携したり、データをエクスポートしたり、クライアント向けに定期的なメールレポートを送信したりすることもできます。
クライアントサイトのパフォーマンスチェックの自動化は、ほんの第一歩にすぎません。Kinsta APIをチームの日常的なツールと連携させることで、手動でのサイト管理や保守作業を削減し、業務効率の向上と運用コストの削減を実現できます。さらに、サービス品質の向上、納期の短縮、そして顧客体験の最大化にもつながります。
Kinsta APIを活用すれば、ステージング環境の作成、ステージングから本番環境への選択的な反映、エラーログへのアクセス、サイトキャッシュのクリア、バックアップ管理など、さまざまなタスクを自動化できます。これらの機能により、WordPressサイトの管理がより迅速かつ容易になり、安心してスケールアップできるようになります。
制作業ビジネスの成長を加速させるなら、ぜひKinstaのWordPress専用クラウドサーバーをお試しください。または、具体的なお悩みや要件について、営業部門にお気軽にご相談ください。