Rapls Copy Notice — コピーされた文をメールで知らせる WordPress プラグイン

Rapls Copy Notice
  1. PLUGIN : Rapls Copy Notice
  2. USE CASE : こんな場面で使えます
  3. WHY : 選ばれる理由
    1. 1. 読者の邪魔をしない
    2. 2. 訪問者のデータを持ちすぎない
    3. 3. 軽くて、ページキャッシュと相性がよい
    4. 4. 訪問者から来た値を信用しない作り
    5. 5. 日本語の説明がある
  4. PRICING : 料金
    1. 無料版は体験版ではありません
    2. Pro アドオンの価格
  5. HOW IT WORKS : コピーが記録されるまで
  6. INSTALLATION : 設置方法
    1. 動作要件
    2. セットアップ手順
    3. 動作の確認
  7. FEATURES : 機能一覧
    1. 1. 本文からのコピーだけを検出
    2. 2. 入力欄からのコピーは記録しない NEW
    3. 3. コピーのログ
    4. 4. テキストのメール通知
    5. 5. テストメール NEW
    6. 6. 同じ段落からのコピーをまとめて表示
    7. 7. 読者向けの 2 つの機能 (既定でオフ)
    8. 8. ダッシュボードウィジェット
    9. 9. サイトヘルスの検査
    10. 10. ページキャッシュ対応
    11. 11. マルチサイト
    12. 12. 停止と削除
  8. SETTINGS : プラグイン設定画面
    1. Log (ログ) タブ
    2. Notifications (通知) タブ
    3. Detection (検出) タブ
    4. Privacy (プライバシー) タブ
    5. Visitors (読者向け) タブ
    6. Pro features (Pro の機能) タブ
  9. PRIVACY : 訪問者のデータの扱い
    1. 受け付けるときの確認
    2. IP アドレスの扱い
    3. 保存するもの
    4. しないこと
    5. 回数の上限の数え方
    6. プライバシーポリシーの文例
  10. FAQ : よくある質問
    1. コピーを防げますか
    2. 無料で使えますか
    3. 何も記録されません
    4. 通知メールが届くか確かめたい
    5. まとめのメールが遅れて届きます
    6. IP アドレスがどれも同じになります
    7. IP アドレスの最後が 0 になっています
    8. Google アナリティクスなどでコピーを数えられますか
    9. 以前使っていたプラグインから移れますか
    10. Pro 版との違いは
    11. サポートはどこで受けられますか
  11. ADVANCED FILTERS : フィルターフック
    1. 通知メールに載せる行を選ぶ (rapls_cn_email_rows)
    2. メール以外にも届ける (rapls_cn_notification_delivered)
    3. プライバシーポリシーの文例を変える (rapls_cn_privacy_policy_paragraphs)
    4. Pro の案内を隠す・リンク先を変える (rapls_cn_show_upsell / rapls_cn_pro_url)
    5. 管理画面にタブを足す (rapls_cn_admin_tabs)
  12. ACTION HOOKS : アクションフック
    1. コピーを保存した直後 (rapls_cn_logged)
    2. ログをすべて削除した直後 (rapls_cn_log_emptied) NEW
    3. 管理画面の出力前 (rapls_cn_admin_load)
    4. ページ上のイベント rapls-cn:copy
  13. CHANGE LOG : バージョン履歴
  14. RELATED PAGES : 関連ページ
    1. Free 版
    2. Pro 版
    3. その他

PLUGIN : Rapls Copy Notice

Rapls Copy Notice wordpress.org から最新版をダウンロード 訪問者が投稿の本文をコピーすると、コピーされた文と投稿をログに残し、サイトの管理者にテキストのメールで知らせる WordPress プラグインです。どの記事のどの段落が持っていかれているのかが、あとから確かめられます。 特徴は 3 つです。
  • コピーは止めない — 読者はいつもどおり選択・コピー・右クリックができます。プラグインは記録して知らせるだけです。
  • 外部のサービスと通信しない — 報告は自分のサイトにだけ届き、メールは WordPress のメール機能で送ります。Cookie も使いません。
  • 訪問者のデータを疑ってかかる — コピーされた文やブラウザーの情報は、表示する場所に合わせて毎回エスケープし、メールはテキストだけで送ります。
バージョン 1.3.17 / WordPress 6.3 以上 / PHP 8.2 以上 / GPLv2 以降。管理画面の表示は英語です。このページでは画面の文言を英語のまま書き、括弧で日本語の意味を添えています。 画面ごとの操作手順は無料版マニュアルにまとめています。

USE CASE : こんな場面で使えます

コピーされること自体は、悪いことばかりではありません。引用やメモのためにコピーする読者もいます。どの文がコピーされているかがわかると、次のような判断がしやすくなります。
  • 個人ブログ・メディア — よくコピーされる段落から、読者が何を持ち帰っているかを知る。引用されている記事を見つける
  • レシピ・ハウツー・解説記事 — 手順や数値の段落がコピーされているなら、その部分をまとめ直したり、表にしたりする
  • 教材・資料のサイト — 同じ段落が短い間に何度もコピーされていないかを見る
  • 転載が気になるサイト — コピーの多い段落を、転載を探すときの手がかりにする。別売りの Pro アドオンを入れると、その段落を Web で検索する作業まで自動にできます
コピーを記録しても、転載や盗用を防げるわけではありません。わかるのは「このページから、この文がコピーされた」という事実までです。

WHY : 選ばれる理由

1. 読者の邪魔をしない

右クリックや文字の選択を禁止しても、コピーは止まりません。ページのソースを開けば文は読めますし、スクリーンショットも撮れます。困るのは、引用したい人や、読み上げ・翻訳の機能を使う普通の読者のほうです。このプラグインは止める代わりに、何がコピーされたかを記録して知らせます。コピーを妨げる機能は入れていません。

2. 訪問者のデータを持ちすぎない

IP アドレスは、既定で短くしてから保存します (IPv4 は最後の区切り、IPv6 は下位 80 ビットを消します)。Cookie は使わず、訪問者のブラウザーには何も保存しません。回数の制限のためだけに、IP アドレスを元に戻せない形に変えた値を最長1時間使います。記録は既定で 90 日たつと自動で消えます。プラグイン自身は外部のサービスに何も送りません。

3. 軽くて、ページキャッシュと相性がよい

検出のスクリプトは依存ライブラリなしの小さな JavaScript 1 本で、defer で読み込みます。訪問者ごとのトークンを使わないので、キャッシュされたページでもそのまま動きます。サイト側は報告を 1 行保存するだけで、メールは 1 時間に 1 回まとめて送るのが既定です。

4. 訪問者から来た値を信用しない作り

同じ目的のプラグインには前例がありますが、訪問者から届いた値を管理画面にそのまま表示したことで、蓄積型の XSS (クロスサイトスクリプティング) を抱えました。コピーの報告は、ログインしていない誰からでも届きます。中身はすべて訪問者のブラウザーが作ったものです。このプラグインは一から書き、次の点を最初から組み込んでいます。
  • コピーされた文、ユーザーエージェント、参照元、IP アドレスは、管理画面に出すたびに、出す場所 (HTML の本文・属性・URL) に合わせてエスケープします。保存のときに消毒したことは当てにしません
  • 通知は常に text/plain のメールで送ります。件名はサイト名・自分で決めた文言・件数だけで、訪問者が送ったものや投稿タイトルは入れません
  • 受け付ける回数に上限があります。超えた報告は保存もメールもしません
  • 受け口は状態コードだけを返し、送られた値を返しません

5. 日本語の説明がある

開発者が日本人です。管理画面は英語ですが、このページと無料版マニュアルで、各画面の項目を日本語で説明しています。

PRICING : 料金

無料版は体験版ではありません

このページで説明している機能は、すべて無料版に入っています。コピーの検出、ログ、メール通知、テスト送信、読者向けのメッセージと出典の追加、ダッシュボードウィジェット、サイトヘルスの検査です。期限も、件数の制限もありません。無料版はそれだけで動き、ほかに何も要りません。

Pro アドオンの価格

  • 1 サイト : ¥1,980 (税込)
  • 5 サイト : ¥4,980 (税込)
買い切りで、サブスクリプションではありません。マルチサイトのネットワークで使うには 5 サイト版が必要で、1 つのライセンスでネットワーク内のすべてのサイトが対象になります。14 日間返金保証があります (返金ポリシー / 特定商取引法に基づく表記)。 Rapls Copy Notice Pro は別のプラグインで、無料版 1.3.19 以降と一緒に入れて使います。管理画面の「ツール > Rapls Copy Notice」に、次のタブを追加します。Pro には日本語訳が入っているので、タブ名は管理画面の言語に合わせて日本語でも表示されます。
  • 統計 (Statistics) — 直近 7・30・90 日の日ごとのコピー数を、前の期間と重ねて表示します。コピーの多い投稿と前の期間からの増減、投稿ごとによくコピーされる段落もわかります
  • チャンネル (Channels) — メールに加えて Slack・Discord・Chatwork・自分の HTTPS の Webhook に通知します。チャンネルごとにテスト送信ができ、送る訪問者の情報を選べます。直近 50 件の配信履歴 (30 日保存) を見て、失敗した配信を送り直せます。ほかのチャンネルには届いたのに失敗したチャンネルは、自動で送り直します
  • ルール (Rules) — 投稿・カテゴリー・文字数でコピーを振り分け、メール・Slack・Discord・Chatwork・Webhook のどれに送るか (どこにも送らないか) を決めます。1 つの投稿のコピーが急に増えたときにすぐ知らせる急増アラートもあります。「振り分けを試す」で、ある投稿・文字数のコピーがどこへ送られるかを確かめられます
  • 転載の検索 (Reposts) — 既定でオフです。違う IP アドレスから何度もコピーされた段落を、1 日 1 回、自分の Brave Search API か SerpApi のキーで Web 検索し、転載かもしれないページを一覧にします。結果は手がかりで、証拠ではありません (ページそのものは取得しません)。既定では、このタブで承認した段落だけを検索します。段落ごとに「検索しない」も選べます。検索の料金は、それぞれのサービスの自分のアカウントにかかります
  • CSV 書き出し (Export) — 期間と、必要なら投稿を 1 つ選んで、ログを CSV で書き出します。表計算ソフトで数式として動かないように書き出します
  • ライセンス (License) — 上の機能と更新を有効にするライセンスを登録します
マルチサイトでは、ライセンスを「ネットワーク管理 > 設定 > Rapls Copy Notice Pro」で管理し、同じ画面でサイトごとのコピー数を一覧できます。ログと設定はサイトごとに分かれたままです。 ライセンスは 1 日 1 回確認します。Pro の機能が止まるのは、ライセンスサーバーが「有効ではない」とはっきり答えたとき (返金のあとなど) だけです。サーバーに届かないときは、そのまま動き続けます。ライセンスがどうなっても、ログと設定は消えず、無料版も動き続けます。 購入はPro 版販売ページからどうぞ。 Free 版 Pro 版

HOW IT WORKS : コピーが記録されるまで

  1. 監視対象の投稿を 1 件表示しているページで、読者が本文の中の文をコピーします。
  2. ページに読み込まれた小さなスクリプト (rapls-copy-notice.js) が、選択された文字数と範囲を確かめます。条件を満たすと、文 (最大 500 文字) と投稿 ID をサイトの REST API (/wp-json/rapls-copy-notice/v1/log) に送ります。
  3. サイト側で、回数の上限、投稿が公開中で監視対象か、無視する IP・投稿に当たらないかを確かめます。通ったものだけを専用のテーブル ({接頭辞}rapls_cn_log) に 1 行保存します。
  4. まとめモードなら次の毎時の処理で、即時モードならその場でメールを送ります。
受け口はログインしていない訪問者にも開いています。nonce は使いません。ページキャッシュに残ったページでも期限切れにならないようにするためです。守りは回数の上限、投稿の確認、長さの上限で行います。応答は状態コードだけで、本文は空です。

INSTALLATION : 設置方法

動作要件

  • WordPress 6.3 以上
  • PHP 8.2 以上
  • WordPress からメールが送れること (wp_mail())。SMTP プラグインを使っている場合は、その設定どおりに送られます
  • ログインしていない訪問者が /wp-json/rapls-copy-notice/v1/log に POST できること
PHP 8.2 より古い環境では動きません。その場合は管理画面に、必要な PHP のバージョンと現在のバージョンを書いた通知を出します。エラーでサイトが止まることはありません。HTTPS は必須ではありませんが、段落の指紋 (後述) だけは HTTPS のページでしか記録しません。

セットアップ手順

  1. 管理画面の「プラグイン > 新規追加」で「Rapls Copy Notice」を検索してインストール (または rapls-copy-notice フォルダを /wp-content/plugins/ にアップロード)
  2. 「プラグイン」メニューから有効化。この時点で記録が始まります。設定を保存する必要はありません
  3. 「ツール > Rapls Copy Notice」の Notifications (通知) タブで、Send notifications to (通知の送信先) を確かめる。空なら「設定 > 一般」の管理者メールアドレスに届きます
  4. 同じタブの Send a test email (テストメールを送る) を押して、メールが届くか確かめる
  5. 必要なら Detection (検出) タブなどで設定を変える
有効化した直後は、次の設定で動きます。
  • 投稿と固定ページの本文から 20 文字以上コピーされると記録します
  • 記録は 1 時間に 1 回まとめて、サイトの管理者メールアドレスに送ります
  • ログイン中の管理者・編集者のコピーは数えません
  • IP アドレスは短くしてから保存し、記録は 90 日で消えます
テストメールが届かないときは、迷惑メールのフォルダとサイトのメール設定を確かめてください。サーバーによっては SMTP プラグインが必要です。

動作の確認

  1. ブラウザーのプライベートウィンドウで、公開中の投稿を 1 件開きます。ログインしたままだと数えられません
  2. 本文から 20 文字以上を選んでコピーします
  3. 「ツール > Rapls Copy Notice」の Log (ログ) タブに 1 行増えていれば動いています
メールは次の毎時の処理で届きます。すぐ確かめたいときは、Notifications タブで One email per copy, right away (コピーごとにすぐ 1 通) に切り替えてから、もう一度コピーしてください。 詳しい手順は無料版マニュアルにまとめています。

FEATURES : 機能一覧

1. 本文からのコピーだけを検出

選んだ投稿タイプの個別ページで、本文の中からのコピーだけを数えます。トップページやアーカイブ、サイドバーでは数えません。
  • 最小文字数 (既定 20 文字) に満たないコピーは数えません
  • 選択の全体が本文の範囲の中にあるときだけ数えます。本文とサイドバーにまたがる選択は数えません
  • 同じ文を 10 秒以内にもう一度コピーしても、2 回目は送りません
  • サイトが受け付けるのは、公開中で監視対象の投稿タイプの投稿への報告だけです。下書きやプレビューは数えません
本文の範囲は CSS セレクター (既定 .entry-content, .post-content, article) で見つけます。テーマがこのどれも使っていない場合は、本文の最後に目印を置いて見つける方法も選べます (SETTINGS の Detection タブを参照)。

2. 入力欄からのコピーは記録しない NEW

本文の中にあるコメント欄やお問い合わせフォームなど、入力欄や編集できる領域からのコピーは記録しません。そこにあるのは、たいてい読者が自分で書いている文だからです。読者向けのメッセージも出典の追加も、このコピーには働きません。

3. コピーのログ

「ツール > Rapls Copy Notice」の Log (ログ) タブに、日時・投稿・コピーされた文・短くした IP アドレス・ブラウザーを一覧で表示します。投稿で絞り込めます。選んだ行だけ、またはすべての行を削除できます。削除の前には確認が出ます。

4. テキストのメール通知

通知メールの実例。テキストのみで、コピーされた文を引用し、投稿と URL、文字数を並べる
1 時間ごとのまとめメール(件名のサイト名は見本に置き換えています)
送り方は 2 通りです。
  • One summary email per hour (1 時間に 1 通のまとめ):既定。まだ知らせていない記録がなければ送りません
  • One email per copy, right away (コピーごとにすぐ 1 通):1 時間あたりの上限 (既定 20 通) を超えた分は、次の毎時のまとめに入ります
まとめのメールの見本です。即時モードでも形は同じで、1 通に 1 件です。固定の文言は英語で届きます。
件名: [サンプルブログ] Copy notification (2 copies)
Content-Type: text/plain; charset=UTF-8

---------------------------------------------------
It appears that the following text was copied.
---------------------------------------------------

> ドリップの前に、ペーパーフィルターをお湯でさっと湿らせておきます。

Date: 2026年10月9日 3:14 PM
Post: ハンドドリップの基本
URL: https://example.com/hand-drip/
Length: 33 characters
IP: 203.0.113.0
Browser: Mozilla/5.0 (iPhone; CPU iPhone OS 18_0 like Mac OS X) ...
Referrer: www.google.com
---------------------------------------------------

> 蒸らしの時間は 30 秒ほど。粉がふくらみきるまで待ちます。

Date: 2026年10月9日 3:40 PM
Post: ハンドドリップの基本
URL: https://example.com/hand-drip/
Length: 30 characters
IP: 2001:db8:85a3::
Browser: Mozilla/5.0 (Windows NT 10.0; Win64; x64) ...
---------------------------------------------------

Log: https://example.com/wp-admin/tools.php?page=rapls-copy-notice
Settings: https://example.com/wp-admin/tools.php?page=rapls-copy-notice&tab=notifications
  • 件名は常に「[サイト名] 件名の文言 (〇 copies)」の形です。文言は Email subject (メールの件名) で変えられるので、メールソフトの振り分けに使えます
  • > で始まる行は、コピーされた文の先頭 200 文字です。改行があれば 1 行ずつ > を付けるので、文がほかの項目になりすますことはありません
  • 改行や文字の向きを変える特殊な文字は、コピーされた文やブラウザーの情報から取り除いてから書きます
  • Length は元の選択の文字数です。保存する文は 500 文字までですが、ここには選択全体の長さが出ます
  • Referrer は直前に見ていたページのホスト名だけです。わからないときはこの行を省きます
  • 1 通に詳しく載せるのは 100 件までです。それを超えた分は件数だけを書きます。1 回のまとめで扱うのは最大 5,000 件です
  • メールが送れなかった記録は「知らせ済み」にならず、次のまとめで送り直します。まとめの処理が同時に 2 回動いても、同じ記録を 2 回送らないようにしています

5. テストメール NEW

Notifications タブの Send a test email (テストメールを送る) で、いまの通知の送信先に短い固定の文面を送ります。件名の括弧の中は件数ではなく test になります。送信先を変えたときは、先に保存してから押してください。正しいアドレスがないときはボタンが押せず、理由がタブに表示されます。

6. 同じ段落からのコピーをまとめて表示

コピーするたびに、そのコピーが始まった段落の指紋も記録します。段落の文から読者のブラウザーで計算した SHA-1 ハッシュで、段落の文そのものは保存しません。ログの Copies of this paragraph (この段落のコピー) を押すと、同じ投稿の同じ段落からのコピーだけが並びます。
  • 段落とみなすのは、本文の中の p・li・blockquote・pre・見出し (h1〜h6)・表のセル・dt / dd・figcaption です
  • 段落の文を 1 文字でも書き換えると、別の段落として扱います
  • ブラウザーがハッシュの機能を HTTPS のページでしか提供しないため、HTTP のサイトではこのリンクが出ません。コピーの記録そのものは HTTP でも行います

7. 読者向けの 2 つの機能 (既定でオフ)

読者が記事の文をコピーしたあと、画面の下に出るメッセージ
コピーしたあとに出るメッセージ
コピーした文を貼り付けると、後ろに投稿のタイトルと URL の出典の行が付く
貼り付けた文に付く出典の行
  • コピー後のメッセージ:コピーした読者に、画面の下で 5 秒間メッセージを出します。たとえば「引用するときはリンクをお願いします」といった文です。コピーは止めません。Esc キーか閉じるボタンで閉じられ、マウスを乗せている間は消えません。スクリーンリーダーはコピーのたびにメッセージを読み上げます
  • 出典の追加:コピーした文の後ろに、空行をはさんで投稿のタイトルと URL を付けます
出典の追加をオンにしたとき、読者のクリップボードに入る文の例です。
ドリップの前に、ペーパーフィルターをお湯でさっと湿らせておきます。

Source: ハンドドリップの基本

https://example.com/hand-drip/
どちらも投稿のタイトルと URL、管理者が書いた文だけを使い、追加の記録はしません。

8. ダッシュボードウィジェット

ダッシュボードのウィジェット。直近 7 日間のコピー数と、よくコピーされた投稿の上位 3 件
管理画面のダッシュボードに「Rapls Copy Notice」のウィジェットを出します。直近 7 日間のコピーの数と、コピーの多い投稿の上位 3 件を表示します。ウィジェットに出すのは投稿のタイトルだけで、コピーされた文は出しません。View the log (ログを見る) からログのタブに移れます。

9. サイトヘルスの検査

「ツール > サイトヘルス」の「ステータス」に 6 つの検査を追加します。どれもサイトの中の状態を見るだけで、外部への通信はしません。
  • ログのテーブル:テーブルがないか古いと「重大な問題」。プラグインを停止して有効化し直すと作り直します
  • 予定された処理:毎時のまとめか毎日の古い記録の削除が、予定されていないか 1 時間以上遅れている
  • 通知の送信先:正しいアドレスがない。記録は続きますが、メールは送れません
  • 通知の配信:2 時間以上前の記録が、まだ知らされずに残っている。送信の失敗、送信先がない、まとめの処理が動いていない、のどれかが考えられます
  • 監視する投稿タイプ:投稿タイプが 1 つも選ばれておらず、どこでもコピーを検出していない
  • 訪問者の IP アドレス:信頼するプロキシに登録していないプロキシの後ろにあるかもしれない
「サイトヘルス > 情報」にも Rapls Copy Notice の節を追加します。バージョン、記録の件数、通知モード、次のまとめの確認、監視する投稿タイプ、回数の上限、保存期間、回数を数える場所などが並びます。訪問者のデータは含みません。サポートに問い合わせるときは、この節をそのまま貼り付けてください。

10. ページキャッシュ対応

検出のスクリプトは訪問者ごとのトークンを使わないので、キャッシュされたページでも動きます。ページに埋め込む設定は、投稿 ID・最小文字数・本文のセレクターと、オンにしているときの読者向けメッセージ・出典の情報だけです。 Detection タブや Visitors タブを変えたら、ページキャッシュを削除してください。設定はページに埋め込まれるので、古いキャッシュには古い設定が残ります。

11. マルチサイト

ログのテーブル、設定、予定された処理はサイトごとです。ネットワークで有効化して使います。各サイトは、最初に読み込まれたときに自分のテーブルを作ります。ネットワークからサイトを削除すると、そのサイトのログも一緒に削除します。大きなネットワークで停止するときは、サイトを 500 件ずつ処理します。

12. 停止と削除

  • 停止:毎時のまとめと毎日の削除の予定を外します。ログと設定は残ります
  • 削除:ログのテーブル {接頭辞}rapls_cn_log、設定 rapls_cn_settings、名前が rapls_cn_ で始まるオプションと一時データを消します。別売りの Pro アドオンの設定は残します。元に戻せません。マルチサイトでは、ネットワーク内のすべてのサイトで消します

SETTINGS : プラグイン設定画面

画面は、日本語訳を入れた状態で撮っています。無料版の日本語訳は translate.wordpress.org から配信されるまで、管理画面は英語で表示されます。

WordPress の管理画面「ツール > Rapls Copy Notice」の 1 ページだけで、上のタブで切り替えます。見られるのは manage_options 権限のあるユーザー (通常は管理者) です。設定はタブごとに保存します。正しくない値を入れて保存すると、直した欄の名前が通知に出ます。

Log (ログ) タブ

Rapls Copy Notice のログ画面。日時、投稿、コピーされた文、短くした IP アドレス、ブラウザーが並び、投稿で絞り込める
  • Date (日時):サイトのタイムゾーンと日付形式で表示。この列で並べ替えできます (既定は新しい順)
  • Post (投稿):タイトルと ID。行にマウスを乗せると Show only this post (この投稿だけ表示) が出ます
  • Copied text (コピーされた文):先頭 80 文字と元の選択の文字数。長い文はクリックすると保存した全文 (最大 500 文字) が開きます。段落の指紋があれば Copies of this paragraph が出ます
  • IP:保存した IP アドレス。既定では短くした形 (例 203.0.113.0)
  • Browser (ブラウザー):「Chrome on macOS」のような要約。クリックするとユーザーエージェントの全文が開きます。その下に Came from: (参照元) のホスト名
一覧の上の All posts (すべての投稿) で投稿を選んで Filter を押すと絞り込めます。並べ替えの順は絞り込んでも保たれます。選んだ行は一括操作の Delete で、すべての行は一覧の下の Delete all entries で削除します。どちらも確認が出ます。データベースが削除を受け付けなかったときは、削除できなかったことを表示します。1 ページの表示件数は「表示オプション」で 1〜200 件 (既定 20 件) に変えられます。

Notifications (通知) タブ

通知タブ。通知先のアドレス、件名の見出し、1 時間ごとのまとめか 1 件ずつかの選択、テストメールのボタン
  • Send notifications to (通知の送信先):宛先を 1 つ。空ならサイトの管理者メールアドレス。正しくないアドレスは保存せず、そのあいだの通知がどこに届くかを通知で知らせます。既定は空
  • Email subject (メールの件名):件名の真ん中に入る文言。改行は取り除きます。最大 100 文字。既定は Copy notification
  • When to send (送るタイミング):One summary email per hour (1 時間に 1 通のまとめ) / One email per copy, right away (コピーごとにすぐ 1 通)。既定はまとめ
  • Instant email limit (即時メールの上限):即時モードで 1 時間に送る上限。超えた分は次の毎時のまとめに入ります。1〜1000 通、既定 20
  • Test email (テストメール):Send a test email ボタン。いまの送信先に固定の文面を送ります

Detection (検出) タブ

検出タブ。最小の文字数、対象の投稿タイプ、本文の範囲、無視する役割・IP アドレス・投稿、信頼するプロキシ、回数の上限
  • Minimum length (最小文字数):この文字数以上のコピーを記録します。1〜500 文字、既定 20
  • Post types (投稿タイプ):監視する投稿タイプ。公開されている投稿タイプ (メディアを除く) から選びます。既定は投稿・固定ページ。1 つも選ばないと、タブに警告が出ます
  • Find the post body (本文を見つける):本文の最後に空の非表示要素を 1 つ足し、その親要素を本文の範囲として使います。オンのとき、下の Content area は予備になります。既定はオフ
  • Content area (本文の範囲):本文を囲む要素の CSS セレクター。カンマ区切りで前から順に試し、ページで最初に何かに一致したものを使います。既定は .entry-content, .post-content, article
  • Ignore logged-in users with these roles (この権限グループのログインユーザーは無視):選んだ権限グループでログインしているユーザーには、検出のスクリプトを読み込みません。既定は管理者・編集者
  • Ignore IP addresses (無視する IP アドレス):1 行に 1 つ。192.0.2.0/24 のような範囲も使えます。ログに出ている短くしたアドレスをそのまま貼れば、そのアドレスに短くされる訪問者をすべて無視します (例:192.0.2.0 で 192.0.2.0〜192.0.2.255)。最大 500 件 NEW
  • Ignore posts (無視する投稿):投稿 ID を 1 行に 1 つ。ID はログのタイトルの後ろに #123 の形で出ています。最大 500 件
  • Trusted proxies (信頼するプロキシ):リバースプロキシや CDN の IP アドレス (範囲も可)。その後ろにないサイトは空のままにします。最大 500 件
  • Limit per IP (IP ごとの上限):1 つの IP アドレスから 1 分間に受け付ける報告の数。1〜1000、既定 10。IPv6 はネットワーク (/64) 単位で数えます。1 つのアドレスは、1 時間にサイト全体の上限の 5 分の 1 まで (既定 100 件) に抑えます
  • Limit for the site (サイト全体の上限):サイト全体で 1 時間に受け付ける報告の数。1〜100000、既定 500
Find the post body をオンにすると、監視するページの本文の最後に次の要素が 1 つ入ります。入れるのはメインループの中の、表示中の投稿の本文だけです。
<span class="rapls-cn-content-marker" hidden></span>

Privacy (プライバシー) タブ

  • IP addresses (IP アドレス):Shorten IP addresses before storing them (保存する前に短くする)。オフにすると完全なアドレスを保存します。すでに保存した記録は書き換えません。既定はオン
  • Keep log entries for (ログの保存期間):この日数より古い記録を、1 日 1 回の処理で削除します。1〜3650 日、既定 90
  • Privacy policy (プライバシーポリシー):Suggested text for your privacy policy (プライバシーポリシーの文例) のリンクから、「設定 > プライバシー」のポリシーガイドを開きます
保存期間を短くしたとき、大きなログでも古い記録を少しずつ消すので、テーブルを長くロックしません。SQLite のように少しずつ消せないデータベースでは、一度に消します。

Visitors (読者向け) タブ

訪問者タブ。コピー後のメッセージと、コピーした文に付ける出典の行。どちらも既定でオフ
  • Message after copying (コピー後のメッセージ):Show a short message to the reader after they copy。画面の下に 5 秒間表示します。既定はオフ
  • Message (メッセージ):表示する文。テキストのみ、最大 200 文字。空なら既定の文 (Thank you for reading. If you quote this article, please link to it.) を使います
  • Source link (出典リンク):Add the post title and URL to copied text。コピーした文に投稿のタイトルと URL を付けます。既定はオフ
  • Source label (出典のラベル):タイトルの前に付ける文字。最大 50 文字。空なら Source: を使います
どちらの機能も、Detection タブの最小文字数・本文の範囲・投稿タイプ・無視する投稿・無視する権限グループに従います。無視する IP アドレスと回数の上限はサイト側で確かめるので、それに当たる読者にもメッセージは出て、出典も付きます。既定の文は英語なので、日本語で出したいときは欄に日本語で書いてください (例:「出典:」)。

Pro features (Pro の機能) タブ

別売りの Pro アドオンの説明だけを載せたタブです。設定の項目はなく、無料版の機能を制限するものでもありません。Log タブと Notifications タブの下の短い案内、プラグイン一覧の行のリンクも同じ扱いです。Pro を有効にするとすべて消えます。rapls_cn_show_upsell フィルターで隠すこともできます (DEVELOPERS を参照)。

PRIVACY : 訪問者のデータの扱い

コピーの報告に含まれるものは、すべて訪問者のブラウザーから来ます。プラグインはそのすべてを信用しない前提で扱います。

受け付けるときの確認

  • 回数の上限:既定では 1 つの IP アドレスから 1 分に 10 件、サイト全体で 1 時間に 500 件まで。1 つのアドレスは 1 時間に 100 件までです。超えた報告は保存もメールもしません
  • 実在する投稿だけ:公開中で監視対象の投稿への報告だけを受け付けます
  • 長さの上限:コピーされた文は 500 文字、ユーザーエージェントと参照元のホスト名は 255 文字で切ります
  • 何も返さない:受け口は状態コードだけを返し、本文は空です
  • 除外は黙って捨てる:無視する IP・無視する投稿に当たった報告は、ほかの報告と同じ応答を返して捨てます

IP アドレスの扱い

訪問者の IP アドレスは、直接の接続元 (REMOTE_ADDR) から取ります。X-Forwarded-For は誰でも偽れるので、通常は使いません。Detection タブの Trusted proxies に登録したアドレスから来たリクエストに限り、X-Forwarded-For を右から順に見て、登録したプロキシではない最初のアドレスを訪問者の IP とします。 保存の前に短くします (既定)。例:203.0.113.45 → 203.0.113.0、2001:db8:85a3:1:2:3:4:5 → 2001:db8:85a3::。設定を変えても、すでに保存した記録は書き換えません。

保存するもの

1 回のコピーにつき、専用テーブルに次を 1 行保存します。日時 (UTC)、投稿 ID、コピーされた文 (最大 500 文字)、元の選択の文字数、IP アドレス、ユーザーエージェント (最大 255 文字)、参照元のホスト名 (最大 255 文字)、段落の指紋 (HTTPS のときだけ)、通知済みかどうか。参照元はホスト名だけで、URL のパスやクエリは送りません。コピーされた文は、コピーされたままの形で保存します。表示するときにエスケープします。

しないこと

  • Cookie を使わず、ブラウザーには何も保存しません。回数の制限のためだけに、IP アドレスを元に戻せない形に変えた値を最長1時間使います
  • 外部のサービスに何も送りません。報告は自分のサイトにだけ届き、メールは WordPress のメール機能で送ります
  • クリップボードの中身は読みません。読むのはページで選択されている文字だけです
  • 入力欄や編集できる領域からのコピーは記録しません
  • ログや件数を wp_options に保存しません

回数の上限の数え方

回数は WordPress の一時データ (transient) で数えます。オブジェクトキャッシュがないサイトでは、これが wp_options に入ります。量が増えないように、キーは IP ごとに 1 つで 1 時間で期限が切れ、自動読み込みはしません。サイト全体の上限を先に確かめるので、IP ごとのキーが 1 時間にサイト全体の上限より多く作られることはありません。キーには IP アドレスそのものではなくハッシュを使います。同時に届いたリクエストでも上限を超えないよう、1 件ずつ数えます。保存先は「サイトヘルス > 情報」の Rate-limit counters stored in でわかります。

プライバシーポリシーの文例

「設定 > プライバシー」のポリシーガイドに文例を追加します。次の 4 段落です。文例は英語です。
  • 記録する項目:コピーされた文、選択の長さ、投稿、日時、ユーザーエージェント、参照元のホスト名、段落の指紋 (段落の文は含まない)、IP アドレス
  • IP アドレス NEW:Privacy タブの設定に合わせて変わります。短くする設定なら短くして保存すること、オフなら完全なアドレスを保存することを書きます
  • 使い道:管理者へのメール通知だけに使い、ほかの誰にも、外部のサービスにも送らないこと。メールはサイトのメールの仕組み (外部のメール事業者のこともある) を通ること。ブラウザーには Cookie も識別子も保存せず、IP アドレスを元に戻せない形に変えた値を最長1時間だけ使うこと
  • 保存期間:Keep log entries for の日数で自動で削除されること
Visitors タブの機能を使う場合などは、サイトの実際に合わせて直してください。Pro アドオンで Slack などのチャンネルや転載の検索をオンにすると、使い道の段落は、送り先のサービスと送る内容を書いた文に置き換わります。

FAQ : よくある質問

コピーを防げますか

防げません。このプラグインは防ぐためのものではありません。選択や右クリックを禁止すると普通の読者の邪魔になり、本気でコピーしたい人は止められません。何がコピーされているかを知らせることだけをします。

無料で使えますか

使えます。コピーの検出、ログ、メール通知など、このページの FEATURES と SETTINGS にある機能はすべて無料版のものです。期限や件数の制限はありません。統計、チャット通知、転載の検索などが要るときだけ、別売りの Pro アドオンを足してください。

何も記録されません

  1. ログアウトして試す:管理者と編集者は既定で数えません。プライベートウィンドウで試してください
  2. 投稿の個別ページで、本文から 20 文字以上コピーする:トップページ、アーカイブ、サイドバーでは数えません。コメント欄やフォームなどの入力欄からのコピーも記録しません
  3. 本文の範囲を確かめる:テーマが本文を .entry-content・.post-content・article のどれでも囲んでいないと、どのコピーも範囲外になります。Detection タブの Find the post body をオンにするか、Content area にテーマに合うセレクターを書いてください
  4. キャッシュを消す:Detection の設定を変えたあとは、ページキャッシュを削除してください。JavaScript をまとめたり遅らせたりする最適化を使っている場合は、rapls-copy-notice.js を対象から外して確かめてください
  5. REST API が止められていないか:セキュリティ系のプラグインで、ログインしていない人の REST API を止めていると報告が届きません。/wp-json/rapls-copy-notice/v1/log を許可してください

通知メールが届くか確かめたい

Notifications タブの Send a test email を押してください。通知の送信先に短い固定の文面を送ります。届かないときは、迷惑メールのフォルダとサイトのメール設定を確かめてください。多くのサーバーでは SMTP プラグインが必要です。

まとめのメールが遅れて届きます

まとめは WP-Cron で送ります。WP-Cron はサイトにアクセスがあったときに動くので、アクセスの少ないサイトでは、毎時ちょうどではなく、その後の最初のアクセスで送られます。wp-config.php で DISABLE_WP_CRON を使っている場合は、サーバーの cron で wp-cron.php を定期的に呼んでいるか確かめてください。遅れはサイトヘルスの「予定された処理」と「通知の配信」の検査でわかります。

IP アドレスがどれも同じになります

サイトが Cloudflare などの CDN やリバースプロキシの後ろにあり、プロキシのアドレスが記録されています。その場合、IP ごとの上限もすべての訪問者で分け合うことになります。プロキシの IP アドレスか範囲を、Detection タブの Trusted proxies に 1 行に 1 つ書いてください。登録前に保存された記録の IP は変わりません。

IP アドレスの最後が 0 になっています

故障ではありません。既定で IP アドレスを短くしてから保存しています (Privacy タブ)。そのアドレスを Ignore IP addresses にそのまま貼れば、同じアドレスに短くされる訪問者をまとめて無視できます。

Google アナリティクスなどでコピーを数えられますか

プラグインからは送りません。ページで発生する rapls-cn:copy イベントを、自分のスクリプトで受けて送ってください (下の DEVELOPERS を参照)。イベントはサイトが上限や無視する IP を確かめる前にブラウザーで発生するので、数はログより少し多くなることがあります。

以前使っていたプラグインから移れますか

移れます。Check Copy Contents (すでに保守されていないプラグイン) と同じ用途を扱いますが、一から書いた別のプラグインです。以前のプラグインの設定がデータベースに残っていれば、最初の有効化のときに、通知の送信先、最小文字数、独自に設定していた件名を引き継ぎます。引き継いだ値は、通常の保存と同じ検査を通してから使います。 引き継いだあとは、以前のプラグインを停止してください。停止しないと、1 回のコピーでメールが 2 通届きます。両方が有効なあいだは、管理画面に案内が出ます。以前のプラグインの記録 (過去のコピー) は移しません。

Pro 版との違いは

Pro は別のプラグインで、無料版に統計、Slack・Discord・Chatwork・Webhook への通知、振り分けルールと急増アラート、転載の検索、CSV 書き出しを足します。無料版の動作は、Pro の有無で変わりません。価格は 1 サイト ¥1,980 / 5 サイト ¥4,980 (いずれも税込) の買い切りです。

サポートはどこで受けられますか

WordPress.org のサポートフォーラムで質問してください。「サイトヘルス > 情報」の Rapls Copy Notice の節を添えると、状況が早く伝わります。

ADVANCED FILTERS : フィルターフック

functions.php や独自のプラグインにフィルターを書いて、挙動を広げられます。訪問者のブラウザーから来た値は、保存したままの形で渡します。行の配列のうち id・created_at・post_id・text_length 以外は、すべて訪問者から来た値です。出力する場所に合わせて、必ずエスケープしてください。

通知メールに載せる行を選ぶ (rapls_cn_email_rows)

引数は行の配列と 'instant' か 'digest'。空の配列を返すと、その通知のメールは送りません (処理済みとして扱います)。特定の投稿のコピーだけをメールから外す例です。
add_filter( 'rapls_cn_email_rows', function ( $rows, $context ) {
    return array_filter( $rows, function ( $row ) {
        return 42 !== (int) $row['post_id'];
    } );
}, 10, 2 );

メール以外にも届ける (rapls_cn_notification_delivered)

引数は $delivered (ここまでに届けられたか)、行の配列 (まとめでは最大 5,000 件)、件数、'instant' か 'digest'。届けたら true、そうでなければ $delivered をそのまま返します。true を返すと、メールが失敗していても記録は「知らせ済み」になります。
add_filter( 'rapls_cn_notification_delivered', function ( $delivered, $rows, $total, $context ) {
    $response = wp_remote_post( 'https://example.com/copy-hook', array(
        'body' => array(
            'count'   => $total,
            'context' => $context,
        ),
    ) );
    if ( ! is_wp_error( $response ) && 200 === wp_remote_retrieve_response_code( $response ) ) {
        return true;
    }
    return $delivered;
}, 10, 4 );

プライバシーポリシーの文例を変える (rapls_cn_privacy_policy_paragraphs)

引数はテキストの段落の配列で、キーは collected・ip・use・retention。出力のときにエスケープされるので、HTML は書けません。コピーの記録を外に送るアドオンは use を書き換えてください。
add_filter( 'rapls_cn_privacy_policy_paragraphs', function ( $paragraphs ) {
    $paragraphs['use'] = 'This information is emailed to the site administrator and posted to our team chat.';
    return $paragraphs;
} );

Pro の案内を隠す・リンク先を変える (rapls_cn_show_upsell / rapls_cn_pro_url)

rapls_cn_show_upsell に false を返すと、Pro features タブと関連する案内が消えます。rapls_cn_pro_url は、案内から開く Pro のページの URL です (既定は管理画面の言語に合わせて日本語版か英語版の販売ページ)。
add_filter( 'rapls_cn_show_upsell', '__return_false' );

管理画面にタブを足す (rapls_cn_admin_tabs)

キーとラベルの配列を返します。既存のタブは置き換えも削除もできません。中身は rapls_cn_render_tab_{key} アクションで出力します。権限の確認とエスケープは、コールバック側で行ってください。
add_filter( 'rapls_cn_admin_tabs', function ( $tabs ) {
    $tabs['notes'] = 'Notes';
    return $tabs;
} );

add_action( 'rapls_cn_render_tab_notes', function () {
    if ( ! current_user_can( 'manage_options' ) ) {
        return;
    }
    echo '<p>' . esc_html__( 'Notes for editors.', 'my-textdomain' ) . '</p>';
} );
このほか、rapls_cn_is_pro (既定 false、Pro アドオンが true にします) があります。

ACTION HOOKS : アクションフック

コピーを保存した直後 (rapls_cn_logged)

引数は行の ID と、保存した値の配列です。
add_action( 'rapls_cn_logged', function ( $log_id, $row ) {
    // $row['copied_text'] などは訪問者から来た値。出力するときはエスケープする。
    error_log( sprintf( 'copy #%d on post %d', $log_id, $row['post_id'] ) );
}, 10, 2 );

ログをすべて削除した直後 (rapls_cn_log_emptied) NEW

Delete all entries ですべての記録を消したあとに発生します。引数はありません。新しい記録の ID は 1 から振り直されるので、記録の ID を持っているアドオンは、ここで捨ててください。
add_action( 'rapls_cn_log_emptied', function () {
    delete_option( 'myplugin_pending_log_ids' );
} );

管理画面の出力前 (rapls_cn_admin_load)

引数は表示中のタブのキーです。追加したタブのフォーム処理などに使います。
add_action( 'rapls_cn_admin_load', function ( $tab ) {
    if ( 'notes' !== $tab ) {
        return;
    }
    // 追加したタブのフォーム処理 (権限と nonce を確かめてから)
} );

ページ上のイベント rapls-cn:copy

プラグイン自身はアクセス解析のサービスに何も送りません。自分のスクリプトで解析ツールに渡したいときのために、スクリプトがコピーを報告するたびに、ページの document で rapls-cn:copy イベントを発生させます。detail には投稿 ID と選択の文字数が入ります。コピーされた文は入りません。
document.addEventListener( 'rapls-cn:copy', function ( e ) {
    // e.detail.postId : 投稿 ID
    // e.detail.length : 選択の文字数
    console.log( e.detail.postId, e.detail.length );
} );
イベントはブラウザーが報告を送った時点で発生します。サイト側で上限や除外によって捨てられた報告でも発生します。

CHANGE LOG : バージョン履歴

  • 1.3.17初回リリース。

RELATED PAGES : 関連ページ

Free 版

Pro 版

その他

タイトルとURLをコピーしました