Ichipen ページ修正依頼

説明

Ichipen ページ修正依頼は、ログイン済みのスタッフ向けに、フロント側へ小さなフローティングボタンを追加します。ワンクリックでパネルを開き、閲覧中のページの問題をその場で報告できます。既定では依頼は設定した宛先へメールで送信され、第三者のサービスには一切接続しません。送信内容が保存されることはありません (保存されるのは設定オプション1件のみです)。

LINE・電話・チャットなどに分散した依頼の窓口を、低コストな1つの導線に集約することを狙いとしています。

自社システムへ送信する (API 配信)

メールの代わりに (またはメールに加えて)、各依頼を JSON として、設定 > 修正依頼で指定した HTTPS エンドポイントへ POST できます。これは任意で、既定では無効です。設定しない限り、データがサイトの外に出ることはありません。有効にすると、依頼は指定した Authorization: Bearer トークンを付けて送信され、JSON には依頼の種別と本文、ページのタイトルと URL、送信者の WordPress ユーザー ID・表示名・メールアドレス、サイト名と URL、送信日時が含まれます。データは設定したエンドポイントにのみ送信され、他の第三者に渡ることはありません。

GitHub Issue として登録する (GitHub 配信)

各依頼を、設定 > 修正依頼で指定した GitHub リポジトリの Issue として登録することもできます。これは任意で、既定では無効です。Issue のタイトルは依頼の種別とページタイトルから組み立てられ、Markdown の本文にはメールと同じ情報 (種別、ページ、URL、依頼者、日時) と依頼内容が入り、貼り付けたスクリーンショットは [Image N] のプレースホルダーとして表示されます。認証には、対象リポジトリに限定した ファイングレインド個人アクセストークン を使用し、トークンには Issues への読み書き権限 が必要です。トークンは他の設定とは別に、autoload しない専用のオプションへ保存されます。通信先は HTTPS の api.github.com のみです。

任意で、貼り付けた画像を Issue に埋め込むこともできます。有効にすると、各画像は GitHub Contents API を通じて専用のアセットブランチ (既定は fix-request-assets、存在しない場合は自動作成) にコミットされ、本文に表示されます。公開リポジトリではインライン、非公開リポジトリではリンクとして表示されます (非公開リポジトリの raw URL は他のメンバーの画面では表示されないため)。これらの raw.githubusercontent.com / github.com のアドレスは、Issue の本文に Markdown のリンクとして書き込まれるだけで、WordPress サイトがそこから何かを読み込むことはありません。この機能には、トークンに Contents への読み書き権限 も必要です。アップロードに失敗しても Issue は作成され、該当する画像はテキストの注記に置き換わります。

プライバシーに関する注意: 画像の埋め込みを有効にすると、スクリーンショットはリポジトリにコミットされ、その Git 履歴に永久に保存されます。それを望まない場合は、埋め込みを無効 (既定) のままにしてください。

設計方針

  • 第三者への依存はゼロです (CMB2、ACF、jQuery、外部 API を使用しません)。
  • 送信データは保存しません (保存するのは設定オプション1件のみです)。
  • 既定でプライバシーに配慮: 独自エンドポイントへの API 配信を有効にしない限り、データがサイトの外に出ることはありません。
  • 導入するだけですぐに動作します。宛先が未設定の場合は、サイト管理者のメールアドレスにフォールバックします。
  • すべてフィルターで上書きできるため、ホスト側のプラットフォームが独自の設定レイヤーと統合できます。

機能

  • フロント側に表示されるフローティングの「修正依頼」ボタンは、許可されたログイン済みユーザーにのみ表示されます。それ以外の訪問者には HTML もアセットも一切出力されません。
  • 種別セレクター、依頼内容の入力欄、送信ボタン、状態表示を備えたパネル。クリックで開閉し、Esc キーで閉じます。
  • クリップボードのスクリーンショットを Ctrl/Cmd + V で依頼内容の欄に直接貼り付けられます。画像は貼り付けた位置にそのまま表示されます。画像はメールにインラインで埋め込まれ (API ペイロードにも含まれます)、サーバーやメディアライブラリに保存されることはありません。
  • 現在のページの URL とタイトルは自動的に付加されます。
  • メールには、種別、ページ (タイトル)、URL、依頼者の名前とメールアドレス、送信日時、依頼内容が含まれます。Reply-To には依頼者が設定されます。スクリーンショットが貼り付けられている場合は、画像をインラインで埋め込んだ HTML メールとして送信されます (プレーンテキストの代替付き)。
  • 任意の API 配信: 各依頼を JSON として (Bearer トークン付きで) 独自の HTTPS エンドポイントへ POST します。メールのみ、API のみ、両方から選べます。ペイロードにはプレーンテキストの本文、HTML 版 (message_html)、貼り付けた画像の base64 (images[]) が含まれます (各 images[].cid は message_html 内の cid: 参照に対応します)。
  • 任意の GitHub 配信: 各依頼を、指定したリポジトリの Issue として登録します (タイトル、Markdown 本文、任意のラベル)。認証には Issues への書き込み権限を持つファイングレインドアクセストークンを使用します。メールや API とは独立しており、任意の組み合わせで有効にできます。貼り付けた画像は、任意でアセットブランチ (Contents API) にコミットして Issue に埋め込めます。公開リポジトリではインライン、非公開ではリンクになります。
  • 任意のファイル添付: 画像以外のファイル (既定で PDF、log、CSV、JSON、ZIP など) を本文と一緒に添付できます。ファイルは拡張子と実際の MIME タイプの両方で検証され (拡張子を変えただけの .php/.svg/.exe は拒否されます)、メモリ上でのみ保持されて、メールの添付ファイル、API ペイロード内の base64 (files[])、そして画像の埋め込みが有効な場合は GitHub のアセットブランチへのコミットと Issue からのリンクとして配信されます。既定の上限は5ファイル・各5 MB です (ichipafi_file_limits で変更可能)。
  • 設定画面からの配信テスト: 小さな画像とテキストファイルを添付したサンプルの依頼を1件、選んだチャネルに送信して結果を確認できます。GitHub では段階ごとに結果を表示するため、トークンの権限不足がどの設定に起因するか分かります。
  • ユーザーごとのレート制限により、短時間の連続送信を防ぎます (既定は15秒)。
  • プラグイン画面の「設定」リンクから、設定ページへすぐ移動できます。

ホスト連携用フィルター

  • ichipafi_recipient – 通知の宛先を上書きします。
  • ichipafi_can_display – ウィジェットを表示するか / 送信を許可するか (bool) を上書きします。
  • ichipafi_categories – 依頼の種別リスト (key => label の配列) を上書きします。
  • ichipafi_mail_subject – メールの件名を上書きします。
  • ichipafi_mail_body – プレーンテキストのメール本文 (HTML メールの代替テキストとしても使用) を上書きします。
  • ichipafi_mail_html_body – HTML メールの本文 (スクリーンショットが添付されたときに使用) を上書きします。
  • ichipafi_mail_headers – メールのヘッダーを上書きします。
  • ichipafi_image_limits – インライン画像の上限 (最大件数、最大バイト数、許可する MIME タイプ) を上書きします。max_count を0にすると画像の貼り付けを無効にできます。
  • ichipafi_file_limits – ファイル添付の上限 (最大件数、最大バイト数、拡張子 => 許可する MIME タイプのホワイトリスト) を上書きします。max_count を0にすると添付を無効にできます。
  • ichipafi_delivery – 配信方法 (‘email’、’api’、’both’) を上書きします。
  • ichipafi_api_url – API エンドポイントの URL を上書きします。
  • ichipafi_api_token – API の Bearer トークンを上書きします。
  • ichipafi_api_headers – API へのリクエストヘッダーを上書きします。
  • ichipafi_api_payload – API へ送信する JSON ペイロードを上書きします。
  • ichipafi_api_args – wp_remote_post() の引数を上書きします。
  • ichipafi_api_success – API のレスポンスを成功と見なすかどうかを上書きします。
  • ichipafi_github_owner / ichipafi_github_repo – GitHub リポジトリのオーナー / リポジトリ名を上書きします。
  • ichipafi_github_token – GitHub アクセストークンを上書きします。
  • ichipafi_github_labels – 作成する Issue に付与するラベルを上書きします。
  • ichipafi_github_attach_enabled – 画像をコミットして埋め込むかどうか (bool) を上書きします。
  • ichipafi_github_branch – コミットしたアセットの push 先ブランチを上書きします。
  • ichipafi_github_body – Issue の Markdown 本文を上書きします。
  • ichipafi_github_payload – GitHub へ送信する Issue のペイロード (title/body/labels) を上書きします。
  • ichipafi_github_headers – GitHub へのリクエストヘッダーを上書きします。
  • ichipafi_github_args – wp_remote_post() の引数を上書きします。
  • ichipafi_github_success – GitHub のレスポンスを成功と見なすかどうかを上書きします。
  • ichipafi_rate_limit – レート制限の間隔 (秒) を上書きします。

例: 独自の設定システムから宛先を渡す。

add_filter( 'ichipafi_recipient', function () { return 'team@example.com'; } );

外部サービス

既定の設定では、本プラグインは外部サービスに一切接続しません。依頼は WordPress 標準の wp_mail() で配信されます。プラグインが使用する CSS・JavaScript・画像はすべてプラグインフォルダー内に同梱されており、リモートサーバーから読み込むものはありません。以下の2つの任意の配信チャネルは、サイト管理者が有効にするまで無効です。何が・いつ・どこへ送信されるかを正確に把握できるよう、それぞれについて説明します。

1. GitHub (任意 – 「GitHub」配信を有効にした場合のみ)

概要: GitHub は GitHub, Inc. が運営するソースコードホスティングサービスです。本プラグインはその REST API を利用して、各修正依頼を、設定 > 修正依頼で指定したご自身のリポジトリに Issue として登録します。このチャネルの利用には GitHub アカウントが必要です。対象リポジトリを所有しているか書き込み権限を持ち、そのためのファイングレインド個人アクセストークンを作成してください。GitHub チャネルを有効にし、リポジトリとトークンの両方を設定しない限り、GitHub には何も送信されません。

接続先: https://api.github.com (REST API)。サイトがこれ以外の GitHub ホストに接続することはありません。画像の埋め込みを有効にすると、作成される Issue に https://raw.githubusercontent.com または https://github.com へのリンクが含まれますが、これは Issue の本文に書かれたアドレスで、閲覧者が Issue を開いたときに GitHub 自身が解決するものです。WordPress サイトがこれらへアクセスすることはありません。

送信される内容とタイミング: GitHub チャネルが有効な状態で、許可されたログイン済みユーザーが修正依頼を送信するたびに、サイトから api.github.com へ、依頼の種別、報告対象ページのタイトルと URL、送信者の WordPress 表示名とメールアドレス、送信日時、本文が送信されます。Issue を作成する前に、プラグインはリポジトリの公開設定とデフォルトブランチも読み取り、アセットブランチを読み取るか作成します。「貼り付けた画像をリポジトリにコミットして Issue に埋め込む」を追加で有効にした場合に限り、貼り付けたスクリーンショットと添付ファイルも GitHub Contents API を通じてそのリポジトリにアップロードされ、リポジトリの Git 履歴に永久に保存されます。

利用規約: GitHub 利用規約 – https://docs.github.com/en/site-policy/github-terms/github-terms-of-service – および GitHub プライバシーステートメント – https://docs.github.com/en/site-policy/privacy-policies/github-privacy-statement

2. 独自の HTTPS エンドポイント (任意 – 「API」配信を有効にした場合のみ)

概要: これは本プラグインが選んだ第三者サービスではなく、設定 > 修正依頼でご自身が入力した任意の HTTPS エンドポイント (通常は自社のヘルプデスク、チケットシステム、社内 API など) です。API チャネルを有効にしてエンドポイント URL を入力しない限り、何も送信されません。

送信される内容とタイミング: API チャネルが有効な状態で、許可されたログイン済みユーザーが修正依頼を送信するたびに、その内容が JSON として、設定したとおりの URL (それ以外のホストには送信しません) へ POST されます。認証には、指定した Bearer トークンを Authorization ヘッダーで付与します。ペイロードには、依頼の種別、プレーンテキストと HTML の本文、ページのタイトルと URL、送信者の WordPress ユーザー ID・表示名・メールアドレス、サイト名と URL、送信日時、および貼り付けたスクリーンショットと添付ファイル (base64 エンコード) が含まれます。

利用規約: 送信先はご自身で選ぶため、適用される規約とプライバシーポリシーは、そのエンドポイントの運営者のものになります。

スクリーンショット

インストール

  1. ichipen-page-fix-request フォルダーを /wp-content/plugins/ にアップロードするか、プラグイン画面からインストールします。
  2. WordPress の「プラグイン」画面でプラグインを有効化します。
  3. 設定 > 修正依頼 を開き、1つ以上の配信チャネル (メール・API・GitHub) を有効にして、宛先メールアドレス、API エンドポイントまたは GitHub リポジトリ、ボタン文言、表示対象、種別リストを設定します。
  4. 宛先を設定しない場合、依頼は自動的にサイト管理者のメールアドレスへ送信されます。
  5. GitHub 配信を使う場合は、リポジトリを owner/repo の形式で入力し、必要に応じてラベルを追加して、対象リポジトリに限定し Issues への読み書き権限を持つファイングレインド個人アクセストークンを貼り付けます。貼り付けた画像も埋め込む場合は「貼り付けた画像をリポジトリにコミット…」を有効にし、アセットブランチを設定して、トークンに Contents への読み書き権限も付与してください (この場合、画像はリポジトリの Git 履歴に永久に保存されます)。

FAQ

ボタンは誰に表示されますか ?

設定した表示対象に該当する、ログイン済みユーザーのみです。既定ではログイン済みのすべてのユーザーに表示され、特定の権限グループに限定することもできます。ログインしていない訪問者に HTML やアセットが配信されることはありません。

依頼はどこに保存されますか ?

送信内容は一切保存されません。各依頼は即座に配信され (配信設定に応じて、wp_mail() によるメール送信、および/または設定した HTTPS エンドポイントへの POST)、その後破棄されます。貼り付けたスクリーンショットと添付ファイルは、リクエストの処理中のみメモリ上に保持され、ディスクに書き込まれることも、メディアライブラリに追加されることもありません。独自のデータベーステーブルは作成せず、保存するのは自身の設定のみで、それもアンインストール時に削除されます。

どのような個人データを扱いますか ?

ログイン済みユーザーが依頼を送信すると、その表示名とアカウントのメールアドレスが、ページの URL・タイトル・送信日時とともに通知メールに含まれます (メールアドレスは Reply-To に設定されます)。これはサイト自身のメーラー (wp_mail()) を通じて、設定した宛先にのみ送信されます。API 配信を有効にしている場合は、設定した HTTPS エンドポイントにも送信されます。プラグインがこのデータを保存することはありません。

設定画面を使わずにメールの宛先を変更できますか ?

はい。テーマやホスト側のプラグインから ichipafi_recipient (および他の ichipafi_* フィルター) にフィルターを追加すれば、独自の設定システムと連携できます。

外部サービスにデータが送信されますか ?

既定では送信しません。本プラグインは通知の送信に WordPress 標準の wp_mail() を使用し、外部のスクリプト・スタイル・画像を一切読み込みません。有効にした場合にのみ、2つの任意チャネルがデータを外部へ送信します。API 配信は各依頼を、設定した HTTPS エンドポイント (それ以外のホストには送信しません) へ POST し、GitHub 配信は各依頼を api.github.com 上の Issue として登録します。いずれも上記の「外部サービス」で、該当する利用規約とプライバシーポリシーとあわせて詳しく説明しています。

添付できるファイルの種類と、容量の上限は ?

既定では1ファイル5 MB まで、最大5個まで添付できます。対応する拡張子は pdf、txt、log、md、csv、json、zip です。実行可能・スクリプト系の形式 (.php、.phtml、.svg、.exe など) は拒否され、すべてのファイルについて実際の内容が拡張子と一致するか検証されるため、拡張子を変えただけのファイルは受け付けません。添付ファイルはメモリ上でのみ保持され、ディスクやメディアライブラリに書き込まれることはありません。アップロードは admin-ajax.php を経由するため、リクエスト全体がサーバーの PHP の upload_max_filesizepost_max_size の上限にも収まる必要があります。ichipafi_file_limits フィルターで1ファイルあたりの上限を引き上げる場合は、これらも合わせて引き上げてください。

評価

このプラグインにはレビューがありません。

貢献者と開発者

Ichipen ページ修正依頼 はオープンソースソフトウェアです。以下の人々がこのプラグインに貢献しています。

貢献者

“Ichipen ページ修正依頼” は2ロケールに翻訳されています。 翻訳者のみなさん、翻訳へのご協力ありがとうございます。

“Ichipen ページ修正依頼” をあなたの言語に翻訳しましょう。

開発に興味がありますか ?

コードを閲覧するか、SVN リポジトリをチェックするか、開発ログRSS で購読してみてください。

変更履歴

1.4.0

  • 設定 > 修正依頼に配信テストを追加。小さな画像とテキストファイルを添付したサンプルの依頼を1件、メール・API・GitHub のいずれかに送信して結果を確認できます。GitHub では段階ごと (リポジトリの読み取り、アセットブランチ、各添付、作成された Issue) に結果を表示するため、権限の問題がどの設定に起因するか分かります。
  • GitHub への添付の失敗を隠さず報告するようにしました。画像やファイルをコミットできなかった場合、その理由を設定画面に表示し、WP_DEBUG が有効ならログにも記録します。Issue 本文の表記も、埋め込みを無効にしている場合と区別して「埋め込みに失敗しました」と表示します。
  • 新規インストール後の初回保存を修正しました。設定の sanitize が2回実行されるため、ラベルに文字列「Array」が保存され、GitHub リポジトリが空になり、API と GitHub のトークンが削除されていました。これまでは2回保存し直すしか回避策がありませんでした。
  • GitHub トークンの作成手順を設定画面に追加しました。GitHub 側の画面のたどり方、Issues と Contents の権限、有効期限、トークン作成ページへのリンクを示します。

1.3.1

  • すべてのグローバルを、一意の ichipafi プレフィックスに変更しました (関数、クラス、定数、オプション、トランジェント、AJAX アクションと nonce、スクリプト/スタイルのハンドル、ローカライズしたスクリプトオブジェクト)。上記のフィルターは ichipafi_recipientichipafi_can_display などになり、旧来の pfr_* という名前は廃止されました。
  • 任意の配信チャネルが利用する外部サービスについて、利用規約とプライバシーポリシーへのリンクとともに記載しました (「外部サービス」を参照)。
  • 翻訳ファイルの同梱を廃止しました。翻訳は translate.wordpress.org を通じて提供されます。

1.3.0

  • 配信が単一の方法ではなく、独立したチャネルトグル (メール、API、GitHub) の組み合わせになりました。任意の組み合わせを有効にできます。既存の環境と ichipafi_delivery フィルターは、これまでどおり動作します。
  • GitHub 配信を追加: 各依頼を、指定したリポジトリの Issue として登録します (タイトル、Markdown 本文、任意のラベル)。認証にはファイングレインドアクセストークンを使用します。新しいフィルター: ichipafi_github_owner、ichipafi_github_repo、ichipafi_github_token、ichipafi_github_labels、ichipafi_github_body、ichipafi_github_payload、ichipafi_github_headers、ichipafi_github_args、ichipafi_github_success。
  • 任意の GitHub 画像埋め込みを追加: 貼り付けた画像を Contents API でアセットブランチにコミットし、Issue に表示します (公開リポジトリではインライン、非公開ではリンク)。失敗した場合はテキストの注記に degrade します。この方法でコミットされた画像は、リポジトリの Git 履歴に永久に保存されます。新しいフィルター: ichipafi_github_attach_enabled、ichipafi_github_branch。
  • 「このページをキャプチャ」を追加: ブラウザーの getDisplayMedia() で現在のタブを取得し、スクリーンショットとして添付します (外部ライブラリは不要)。プラグイン自身のパネルは撮影対象から除外され、非対応のブラウザーではボタンが表示されません。
  • ファイル添付を追加: 画像以外のファイル (既定で PDF、log、CSV、JSON、ZIP など) を、拡張子と実際の MIME タイプで検証したうえで、メールの添付ファイル、API ペイロード内の base64 (files[])、GitHub のコミットリンクとして配信します。新しいフィルター: ichipafi_file_limits。
  • チャネルごとの配信アクション ichipafi_delivery_result と、チャネルフィルター ichipafi_channels、ichipafi_available_channels を追加。

1.2.0

  • スクリーンショットのインライン貼り付けを追加: クリップボードの画像を Ctrl/Cmd + V で依頼内容の欄に直接貼り付けられます。画像は貼り付けた位置に表示され、メールにインラインで埋め込まれ (プレーンテキストの代替を伴う HTML)、API ペイロードには base64 で含まれます。画像がサーバーやメディアライブラリに保存されることはありません。
  • API ペイロードへの追加: message_html と images[] 配列 (base64。各 images[].cid は message_html 内の cid: 参照に対応します)。既存のフィールドに変更はありません。
  • 新しいフィルター: ichipafi_mail_html_body、ichipafi_image_limits。
  • 上限: 画像3枚まで、各2 MB、PNG/JPEG/GIF/WebP (ichipafi_image_limits で変更可能)。
  • プラグイン画面のプラグイン行に「設定」リンクを追加。
  • 修正: 設定を保存すると、種別リスト全体が「Array」という1件に置き換わることがある問題。設定のサニタイザーを冪等にし (オプションの初回作成時に WordPress が2回実行するため)、種別リストが空で保存された場合は既定値にフォールバックするようにしました。

1.1.0

  • 任意の API 配信を追加: 依頼を JSON (Authorization: Bearer) として独自の HTTPS エンドポイントへ POST します。メール・API・両方から選択できます。
  • 新しいフィルター: ichipafi_delivery、ichipafi_api_url、ichipafi_api_token、ichipafi_api_headers、ichipafi_api_payload、ichipafi_api_args、ichipafi_api_success。
  • 手動の load_plugin_textdomain() 呼び出しを削除 (WordPress.org では翻訳が自動的に読み込まれるため)。

1.0.0

  • 初回リリース。