月次保守20サイトを効率化するために、自分用のWordPress診断プラグインを作った

月次保守の作業時間を記録し始めたとき、情報収集と報告作業だけで半日以上消えていることに気づいた。20サイト分のWPバージョン、プラグインの更新状況、エラーログを一つひとつ確認して、問題を解消できたことをクライアントに連絡できる形に整える。作業自体は正確でないといけない。でも同じ手順を毎月繰り返していた。
それを解決するために、自分専用のWordPress診断プラグイン「NPC WP Healthcheck」を作った。今回はその開発の経緯と、実際に使ってみた所感を記録しておく。
■前回のエラーを解消したのでエラーログ項目の「ログをクリア」ボタンを押して診断!
ボタンはうまく動いてくれた!
ページ下部に前回のレポートがアコーディオンで保存される。
■レポートを生成すると
■レポートはhtml形式でダウンロードできる。PDF保存すれば区アイアントに提出できる!
工数の削減効果は体感で大きい。以前は20サイト分の保守作業を半日〜1日かけて行っていたが、情報収集とレポート草案の生成が自動化されたことで、確認と対応の判断に絞れるようになった。特にエラーログや不審ファイルの検出は、手動でやると見落としが起きやすい部分なので、自動でチェックが入るのは精神的にもありがたい。
一方で、AIが生成するレポートをそのまま使うのは難しいケースもある。総合評価Aでも「プラグインが2件未更新」という状態なら、クライアントへの説明の仕方は変わってくる。レポートはあくまで下書きであり、最終的な判断と言葉の調整は必ず自分で行っている。
月次保守20サイト、情報収集だけで半日以上かかっていた
保守契約は月5,000円前後のサイトが中心で、現在は約20サイトを担当している。毎月行う作業はおおむね決まっている。WP本体とプラグインの更新確認、サイトヘルスのチェック、バックアップ確認、フォームの送受信テスト、エラーログの確認、サーバー環境(PHPバージョン等)の最適化確認、そして表示チェック。 問題は、この情報収集がどうしても手作業になりやすいことだった。管理画面にログインして、ダッシュボードを開いて、プラグイン一覧を確認して、ツールメニューのサイトヘルスを開いて…とサイトごとに繰り返す。慣れているとはいえ、20サイト分こなすと相当な時間がかかる。 その情報をメールにまとめて送付する作業もある。「プラグイン3件の更新が必要でした。セキュリティリスクは現時点で確認されていません」といった文章は毎回手書きで、バリエーションもそれほどない。ここに時間をかけるのは非効率だと感じていた。NPC WP Healthcheck でできること
このプラグインは、保守作業で毎回確認する項目を一画面にまとめてチェックし、その結果をAIが日本語のレポートに整形して出力する、というシンプルな構成になっている。バージョンは現在 0.2.0。チェック項目は以下の9つだ。- WP本体の更新状況
- プラグインの更新状況
- サイトヘルス診断(WP標準のサイトヘルスAPI連携)
- PHPバージョン・サーバー環境(メモリ上限、ファイルアップロード上限等)
- エラーログ収集(debug.logの直近エラーを取得)
- ファイル改ざん検知(WPコアのチェックサム比較 + 不審コードスキャン)
- 不審ファイル検出(uploadsディレクトリ内のPHPファイル)
- SSL証明書の期限チェック(残日数表示)
- ファイルパーミッション確認(wp-config.php、.htaccess等)
セキュリティ面の設計で気をつけたこと
このプラグインは保守担当者が自分のサイトに入れて使うものなので、API認証情報の扱いと、プラグイン自体への不正アクセスの2点に特に気を使って設計した。 Claude APIのキーはデータベースに保存しない設計にしている。WordPressのオプションテーブルに保存すると、SQLインジェクションや管理画面への不正ログインでキーが抜かれるリスクが生じる。そのため、wp-config.php に定数として書く方式を採用した。
※「wp-config.php」とは、WordPressの設定ファイルのこと。データベースの接続情報などが書かれており、通常はWebからアクセスできない場所に置かれる。
もう一つ意識したのが「誰が使えるか」の制限だ。初回有効化時に許可ユーザーをメールアドレスで登録する仕組みになっており、登録されていないユーザーはプラグインの画面にアクセスできない。さらに、プラグインをインストールしたサイトのURLに紐付けてあり、別ドメインで有効化しようとすると自動的に停止する。
自分専用のツールなので、使い回しができないぶん設計がシンプルになった面もある。汎用プラグインとして配布する場合は、このあたりのライセンス設計をもっと丁寧に作る必要があると思っている。現時点では配布は考えていない。
実際に使ってみた所感 — API費用と効果
使い始めてからの感触を正直に書く。 API費用は1サイトあたり約2円。20サイト分を月1回実行しても月40円程度に収まっている。Claude Sonnetのトークン単価が下がっていることもあるが、チェックデータの量がそれほど大きくないことも理由の一つだ。診断結果をそのままAPIに投げるのではなく、必要な情報だけを整形してから渡しているので、トークンの無駄遣いが少ない。 ■プラグイン画面 前回のレポートが表示されている。 前回はcomments.phpが入ってなかったせいで、エラーログが6Mbも溜まっていた。 サーバーに入って削除がめんどくさかったので、ログクリアボタンを追加実装。 管理画面運用者が簡単に操作できる様にした。実際にボタンが動くかテストするためにわざとログを出してみた。
■前回のエラーを解消したのでエラーログ項目の「ログをクリア」ボタンを押して診断!
ボタンはうまく動いてくれた!
ページ下部に前回のレポートがアコーディオンで保存される。
■レポートを生成すると
■レポートはhtml形式でダウンロードできる。PDF保存すれば区アイアントに提出できる!
工数の削減効果は体感で大きい。以前は20サイト分の保守作業を半日〜1日かけて行っていたが、情報収集とレポート草案の生成が自動化されたことで、確認と対応の判断に絞れるようになった。特にエラーログや不審ファイルの検出は、手動でやると見落としが起きやすい部分なので、自動でチェックが入るのは精神的にもありがたい。
一方で、AIが生成するレポートをそのまま使うのは難しいケースもある。総合評価Aでも「プラグインが2件未更新」という状態なら、クライアントへの説明の仕方は変わってくる。レポートはあくまで下書きであり、最終的な判断と言葉の調整は必ず自分で行っている。
まとめ
「保守作業の情報収集が毎月同じ手順の繰り返しで、非効率だと感じていた」という具体的な課題から作ったプラグインなので、自分のユースケースにはよく合っている。汎用性は低いが、それでいいと思って作った。- WP診断9項目を一括チェックして、AIが日本語レポートを自動生成する
- API費用は20サイト月1回で約40円。費用対効果は十分に出ている
- APIキーはwp-config.phpの定数管理、ユーザーロックとURL紐付けでセキュリティを担保
- AIのレポートはあくまで下書き。最終判断は必ず人間が行う
- 現時点で一般配布の予定はない