WordPressプラグインを審査に出す前の準備【前編】

WordPress WordPress
  1. WordPressプラグインを審査に出す前の準備【前編】提出ブロックを回避する
    1. この記事のゴール
    2. 全体像:提出〜公開までの流れ
  2. 1. 公式ガイドラインを最初に読む(最短ルートです)
    1. 必ず目を通すべきドキュメント
    2. レビューでよく指摘される項目TOP5
  3. 2. WordPress.orgアカウントを準備する(2FA必須!)
    1. 2-1. アカウント作成
    2. 2-2. 2FA(2段階認証)を有効化する
      1. 2FA設定手順
  4. 3. プラグインヘッダーを整える(審査担当が最初に見る場所)
    1. 3-1. ヘッダーの雛形(コピペOK)
    2. 3-2. 各項目の詳細説明
    3. 3-3. よくある差し戻しポイント(ヘッダー編)
    4. 3-4. ライセンスと同梱物(超重要)
  5. 4. readme.txt を作成する(プラグインページの命)
    1. 4-1. readme.txt が重要な理由
    2. 4-2. readme.txt の雛形(コピペOK)
    3. 4-3. 各項目の詳細と注意点
    4. 4-4. Stable tag: trunk は使わない
    5. 4-5. Readme Validator で検証する(必須)
    6. 4-6. 英語が苦手な方へ:翻訳のコツ
  6. 5. Plugin Check で検査する(提出前の必須タスク)
    1. 5-1. Plugin Check とは
    2. 5-2. なぜ「必須」なのか
    3. 5-3. インストールと使い方
      1. インストール
      2. 使い方
    4. 5-4. 結果の読み方
    5. 5-5. よく出る指摘と対処法
      1. ① エスケープ不足(最頻出)
      2. ② サニタイズ不足
      3. ③ Nonce / Capability チェック不足
      4. ④ 直接アクセス防止の不足
      5. ⑤ プレフィックスの問題
      6. ⑥ テキストドメインの不整合
    6. 5-6. 誤検知(False Positive)について
    7. 5-7. 推奨:Securityカテゴリも実行
  7. 6. 提出用ZIPを作成する(構成ミスで落ちるのを防ぐ)
    1. 6-1. 正しいフォルダ構成
    2. 6-2. よくある「二重フォルダ」事故
    3. 6-3. ZIPに含めないもの
    4. 6-4. ZIPの作成方法
      1. Mac / Linux(ターミナル)
      2. Windows(PowerShell)
      3. 確認方法
  8. 7. 提出前チェックリスト(コピペ用)
  9. まとめ(前編)
    1. 前編のポイント

WordPressプラグインを審査に出す前の準備【前編】提出ブロックを回避する

自作のWordPressプラグインをWordPress.org公式ディレクトリに公開したい!

でも、提出しても差し戻されたり、そもそも提出自体がブロックされたりするケースが後を絶ちません。審査は「動くかどうか」だけでなく、セキュリティ・品質・ガイドライン準拠が厳しくチェックされます。

この記事(前編)では、提出前に整えるべきすべての準備を詳しく解説します。後編では提出後の差し戻し対応からSVN公開までをカバーします。

⚠️ 2025年の重要アップデート(必読)

  • 新規提出には2FA(2段階認証)が必須になりました
  • 提出時にPlugin Checkが自動実行され、エラーがあると提出自体がブロックされます
  • readme.txt・プラグインヘッダー・申請フォームはすべて英語で記述する必要があります

この記事のゴール

  • 提出前の「落ちる原因」を潰し、差し戻しを最小化する
  • レビュー担当が確認しやすい形(readme / ヘッダー / ZIP構成)に整える
  • 提出後のやりとりまで見越して、慌てない体制を作る

全体像:提出〜公開までの流れ

① 提出用ZIPを作る
② Plugin Check(必須)+セルフチェックで不備を潰す
③ 提出フォームからZIPをアップロード
④ レビューチームから指摘 → 修正 → 反映(後編で解説)
⑤ 承認後、SVNリポジトリへ初回リリース(後編で解説)

1. 公式ガイドラインを最初に読む(最短ルートです)

▶ ここでやること:審査基準の大枠を把握し、地雷を避ける

差し戻しの多くは「コードが動かない」ではなく、セキュリティ・品質・ガイドライン違反です。提出前に公式ドキュメントをざっと通しておくだけで、無駄な差し戻しを大幅に減らせます。

必ず目を通すべきドキュメント

ドキュメント 内容
Detailed Plugin Guidelines 審査の詳細ガイドライン(全18項目)
Plugin Security セキュリティ要件(差し戻し最多)
How Your readme.txt Works readme.txtの書き方

レビューでよく指摘される項目TOP5

💡 これだけは先に潰しておく:

  1. 出力のエスケープ不足(esc_html, esc_attr, esc_url など)
  2. 入力のサニタイズ不足(sanitize_text_field, absint など)
  3. Nonce検証の不足(CSRF対策)
  4. 権限チェックの不足(current_user_can)
  5. 直接アクセス防止の不足(defined(‘ABSPATH’))

「自分は大丈夫」と思っていても、人の目で見ると漏れていることが多いです。意識的にチェックしましょう。


2. WordPress.orgアカウントを準備する(2FA必須!)

▶ ここでやること:アカウント作成と2段階認証の設定

プラグインを提出するには、WordPress.orgのアカウントが必要です。そして2025年現在、新規プラグイン提出には2FA(2段階認証)が必須になっています。

2-1. アカウント作成

  1. 登録ページにアクセスhttps://login.wordpress.org/register
  2. Username(ユーザー名)を入力
    • これがreadme.txtの Contributors に記載する名前になります
    • 後から変更できないので慎重に決めましょう
  3. Email(メールアドレス)を入力
    • 審査結果の通知がここに届きます
    • 確実に受信できるアドレスを使用してください
  4. 確認メールからパスワードを設定

2-2. 2FA(2段階認証)を有効化する

🚨 超重要:2FAなしでは提出できません
新規プラグイン提出では、WordPress.orgアカウントに2FAが設定されていないと、提出ボタンを押しても先に進めません。提出直前に慌てないよう、先に設定しておきましょう。

2FA設定手順

  1. WordPress.orgにログイン
  2. 右上のアバターをクリック → Edit Profile
  3. Security タブを開く
  4. Two-Factor Authentication セクションで設定
    • 認証アプリ(Google Authenticator, Authy など)を推奨
    • QRコードをスキャンして登録
  5. 復旧コード(Backup Codes)を必ず保存
    • スマホを紛失した時に必要になります
    • 安全な場所に保管してください
✅ アカウント準備チェックリスト
□ WordPress.orgアカウント作成済み
□ 2FA有効化済み(認証アプリ推奨)
□ 復旧コード(Backup Codes)を安全に保管
□ SVNパスワードを確認(承認後に使用)

3. プラグインヘッダーを整える(審査担当が最初に見る場所)

▶ ここでやること:メインPHPファイルの先頭に正しいヘッダー情報を記載する

プラグインヘッダーは、レビュー担当が最初に確認する入口です。ここが雑だと「情報が取れないプラグイン」として印象が悪くなります。

3-1. ヘッダーの雛形(コピペOK)

💡 ポイント:ヘッダーは英語で記述
Description を含め、すべて英語で書きます。日本語での説明は、プラグイン内の管理画面や、公開後の翻訳システムで対応しましょう。
<?php
/**
 * Plugin Name:       Your Plugin Name
 * Plugin URI:        https://example.com/your-plugin
 * Description:       A brief description in English (recommended ~140 characters).
 * Version:           1.0.0
 * Requires at least: 6.0
 * Requires PHP:      7.4
 * Author:            Your Name
 * Author URI:        https://example.com
 * License:           GPLv2 or later
 * License URI:       https://www.gnu.org/licenses/gpl-2.0.html
 * Text Domain:       your-plugin-slug
 * Domain Path:       /languages
 */

// Prevent direct access
if ( ! defined( 'ABSPATH' ) ) {
    exit;
}

3-2. 各項目の詳細説明

項目 説明 注意点
Plugin Name プラグインの表示名 商標侵害に注意
Version 現在のバージョン readme.txtのStable tagと完全一致必須
Requires at least 必要な最低WPバージョン readme.txtと一致させる
Requires PHP 必要な最低PHPバージョン readme.txtと一致させる
Text Domain 翻訳用のドメイン フォルダ名(slug)と一致必須
License ライセンス GPL互換必須

3-3. よくある差し戻しポイント(ヘッダー編)

❌ よくあるミス
・Version が readme.txt の Stable tag と一致していない(1.0 vs 1.0.0 もNG)
・Requires at least / Requires PHP を readme.txt にだけ書いてヘッダーに書き忘れ
・Text Domain がフォルダ名と違う
・Description を日本語で書いてしまう
・直接アクセス防止(defined('ABSPATH'))を入れ忘れる

3-4. ライセンスと同梱物(超重要)

WordPress.orgに公開するプラグインは、GPL互換ライセンスが必須です。これはプラグイン本体だけでなく、同梱するすべてのファイルに適用されます。

  • JavaScript / CSS:MITやBSDなどGPL互換ならOK
  • 画像 / フォント:配布可能なライセンスか確認
  • 外部ライブラリ:LICENSEファイルや著作権表記は消さない
⚠️ 注意:
「フリー素材だから大丈夫」と思っていても、商用利用不可や再配布不可のライセンスの場合があります。必ず確認しましょう。

4. readme.txt を作成する(プラグインページの命)

▶ ここでやること:WordPress.org標準フォーマットで英語のreadme.txtを作成する

readme.txt は超重要ファイルです。レビュー時に必ず確認され、公開後はプラグインページの説明文のベースになります。

4-1. readme.txt が重要な理由

  • レビュー時に必ず見られる
  • 公開後、プラグインページの説明・FAQ・更新履歴の元データになる
  • 「Stable tag」や「Tested up to」のズレは差し戻しの常連
🚨 超重要:readme.txt は必ず英語で書く
readme.txt の内容がそのままWordPress.orgのプラグインページになります。審査チームも世界中のユーザーも英語で読むため、すべて英語で記述してください。日本語版は公開後に翻訳システム(translate.wordpress.org)で対応できます。

4-2. readme.txt の雛形(コピペOK)

=== Your Plugin Name ===
Contributors: yourwporgusername
Donate link: https://example.com/donate
Tags: utility, admin, tool
Requires at least: 6.0
Tested up to: 6.7
Stable tag: 1.0.0
Requires PHP: 7.4
License: GPLv2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html

A short description of your plugin in one line (max 150 characters, no markup).

== Description ==

Write a detailed description of your plugin here. Explain what it does, why users need it, and what makes it unique.

**Key Features:**

* Feature 1: Brief explanation
* Feature 2: Brief explanation
* Feature 3: Brief explanation

**Use Cases:**

* When you need to do X
* When you want to achieve Y

== Installation ==

**From WordPress Admin:**

1. Go to "Plugins" → "Add New"
2. Search for "Your Plugin Name"
3. Click "Install Now" and then "Activate"

**Manual Installation:**

1. Download the plugin ZIP file
2. Go to "Plugins" → "Add New" → "Upload Plugin"
3. Select the ZIP file and click "Install Now"
4. Activate the plugin

== Frequently Asked Questions ==

= Is this plugin free? =

Yes, this plugin is completely free and open source.

= Where can I find the settings? =

Go to "Settings" → "Your Plugin Name" in your WordPress admin.

= Does this plugin work with my theme? =

Yes, this plugin is designed to work with any properly coded WordPress theme.

== Screenshots ==

1. Settings page - Configure the plugin options here
2. Frontend display - How it looks on your site

== Changelog ==

= 1.0.0 =
* Initial release

== Upgrade Notice ==

= 1.0.0 =
Initial release of the plugin.

4-3. 各項目の詳細と注意点

項目 説明 注意点
Contributors プラグイン作者 WordPress.orgのユーザー名を記載(任意の名前ではない)
Tags 検索用タグ 5個まで、英語で
Tested up to テスト済みWPバージョン 実際にテストしたバージョンを記載(未検証で上げない)
Stable tag 安定版バージョン PHPヘッダーのVersionと完全一致

4-4. Stable tag: trunk は使わない

⚠️ 注意:
新規申請では Stable tag: trunk は避けてください。素直に 1.0.0 のようにtags配下のバージョン運用を前提にしたほうが安全です。trunkを使うと自動アップデートで問題が発生することがあります。

4-5. Readme Validator で検証する(必須)

作成したreadme.txtは、提出前に必ず公式バリデーターでチェックしましょう。

🔗 Readme Validator: https://wordpress.org/plugins/developers/readme-validator/

  1. readme.txt の内容をコピー
  2. バリデーターにペースト
  3. 「Validate」をクリック
  4. エラーが出たら修正

4-6. 英語が苦手な方へ:翻訳のコツ

readme.txt を英語で書くのは大変に感じるかもしれませんが、以下の方法で乗り切れます。

  • Google翻訳 / DeepL:まず日本語で書いてから翻訳
  • ChatGPT / Claude:「以下をWordPressプラグインのreadme.txt用の英語に翻訳して」と依頼
  • 他のプラグインを参考に:似た機能のプラグインのreadme.txtを見て表現を真似る
💡 ヒント:
完璧な英語である必要はありません。文法が多少おかしくても、伝わればOKです。審査チームは世界中の非ネイティブからの申請に慣れています。

5. Plugin Check で検査する(提出前の必須タスク)

▶ ここでやること:公式チェックツールでプラグインを検査し、ERRORをゼロにする

5-1. Plugin Check とは

Plugin Check(PCP)は、WordPress.org公式が提供するプラグイン検査ツールです。提出時に行われるチェックの多くを、開発者側で事前に実行できます。

5-2. なぜ「必須」なのか

🚨 超重要:
新規提出では、提出時にPlugin Check(Plugin Repoカテゴリ)が自動実行されます。ERRORがあると提出自体がブロックされ、先に進めません。「出してから直す」では遅いのです。

5-3. インストールと使い方

インストール

  1. WordPress管理画面 → プラグイン → 新規追加
  2. 「Plugin Check」で検索
  3. Plugin Check (PCP) をインストール → 有効化

使い方

  1. 管理画面 → ツール → Plugin Check
  2. チェックしたいプラグインを選択
  3. カテゴリで「Plugin repo」を選択(これが提出時のチェックに近い)
  4. 「チェックを実行」をクリック

5-4. 結果の読み方

種類 意味 対応
🔴 ERROR 致命的・ガイドライン抵触の可能性大 必ずゼロにする(提出ブロック)
🟡 WARNING 問題の可能性あり 可能な限り対応、理由を説明できる状態に
🔵 INFO 改善提案 余裕があれば対応

5-5. よく出る指摘と対処法

① エスケープ不足(最頻出)

// ❌ NG: エスケープなし
echo $user_input;
echo $url;
echo "<input value='$value'>";

// ✅ OK: 適切なエスケープ関数を使用
echo esc_html( $user_input );
echo esc_url( $url );
echo "<input value='" . esc_attr( $value ) . "'>";

② サニタイズ不足

// ❌ NG: サニタイズなし
$value = $_POST['value'];

// ✅ OK: サニタイズあり
$value = sanitize_text_field( wp_unslash( $_POST['value'] ) );
$email = sanitize_email( $_POST['email'] );
$number = absint( $_POST['number'] );

③ Nonce / Capability チェック不足

// ❌ NG: 検証なしで保存
if ( isset( $_POST['save'] ) ) {
    update_option( 'my_option', $_POST['value'] );
}

// ✅ OK: Nonce + 権限チェックあり
if ( isset( $_POST['save'] ) ) {
    // Nonce検証
    if ( ! isset( $_POST['_wpnonce'] ) || 
         ! wp_verify_nonce( $_POST['_wpnonce'], 'my_save_action' ) ) {
        wp_die( 'Security check failed' );
    }
    
    // 権限チェック
    if ( ! current_user_can( 'manage_options' ) ) {
        wp_die( 'Permission denied' );
    }
    
    // サニタイズして保存
    update_option( 'my_option', sanitize_text_field( $_POST['value'] ) );
}

④ 直接アクセス防止の不足

// すべてのPHPファイルの先頭に入れる
if ( ! defined( 'ABSPATH' ) ) {
    exit; // または die();
}

⑤ プレフィックスの問題

// ❌ NG: プレフィックスが短い(4文字未満)
function wcp_init() {}

// ❌ NG: 汎用的すぎる
function init() {}
function plugin_setup() {}

// ✅ OK: 4文字以上のユニークなプレフィックス
function your_plugin_init() {}
function your_plugin_activate() {}
class Your_Plugin_Main {}

⑥ テキストドメインの不整合

// ❌ NG: テキストドメインがslugと違う
__( 'Hello', 'wrong-domain' );

// ❌ NG: テキストドメインが変数
$domain = 'my-plugin';
__( 'Hello', $domain );

// ✅ OK: プラグインのslugと一致する文字列リテラル
__( 'Hello', 'your-plugin-slug' );

5-6. 誤検知(False Positive)について

💡 注意:
Plugin Checkには誤検知(false positive)もあります。ただし「無理やり黙らせる」より、まずは本当に問題かを確認し、必要ならレビュー担当に説明できる状態にしておくのが安全です。

5-7. 推奨:Securityカテゴリも実行

「Plugin repo」カテゴリに加えて、「Security」カテゴリも実行しておくと、セキュリティ上の問題を先に発見できます。


6. 提出用ZIPを作成する(構成ミスで落ちるのを防ぐ)

▶ ここでやること:正しい構成でZIPファイルを作成する

6-1. 正しいフォルダ構成

ZIPの直下には、プラグインフォルダが1つだけ入っている状態にします。

your-plugin-slug.zip
└── your-plugin-slug/
    ├── your-plugin-slug.php    ← メインファイル
    ├── readme.txt              ← 必須
    ├── includes/
    │   ├── class-main.php
    │   └── class-admin.php
    ├── assets/
    │   ├── css/
    │   │   └── style.css
    │   └── js/
    │       └── script.js
    └── languages/
        └── your-plugin-slug.pot

6-2. よくある「二重フォルダ」事故

❌ NG: 二重フォルダ(解凍するとフォルダの中にフォルダ)
your-plugin-slug.zip
└── your-plugin-slug/
    └── your-plugin-slug/
        ├── your-plugin-slug.php
        └── readme.txt

✅ OK: 正しい構成(解凍するとすぐにプラグインフォルダ)
your-plugin-slug.zip
└── your-plugin-slug/
    ├── your-plugin-slug.php
    └── readme.txt

6-3. ZIPに含めないもの

以下のファイル・フォルダは必ず除外してください。

  • .git/ / .github/:バージョン管理用
  • node_modules/:npm依存パッケージ
  • vendor/:Composer依存パッケージ(必要なものだけ残す場合あり)
  • tests/:テストファイル
  • .gitignore / .editorconfig:設定ファイル
  • composer.json / package.json:開発用設定
  • .DS_Store(Mac)/ Thumbs.db(Windows):OS生成ファイル
  • APIキー / パスワード / ログファイル:機密情報

6-4. ZIPの作成方法

Mac / Linux(ターミナル)

# プラグインフォルダの親ディレクトリに移動
cd /path/to/plugins

# 不要ファイルを除外してZIP作成
zip -r your-plugin-slug.zip your-plugin-slug \
    -x "*.git*" \
    -x "*.DS_Store" \
    -x "*__MACOSX*" \
    -x "*node_modules*" \
    -x "*.editorconfig"

Windows(PowerShell)

# プラグインフォルダを圧縮
Compress-Archive -Path "C:\path\to\your-plugin-slug" -DestinationPath "C:\path\to\your-plugin-slug.zip"

確認方法

作成したZIPを別の場所で解凍して、正しい構成になっているか確認しましょう。


7. 提出前チェックリスト(コピペ用)

すべて ✅ になったら、いよいよ提出です!

【アカウント】
□ WordPress.orgアカウント作成済み
□ 2FA(2段階認証)有効化済み
□ 復旧コード(Backup Codes)を安全に保管

【プラグインヘッダー】
□ 必須項目をすべて記載(Plugin Name, Version, License など)
□ Description を英語で記載
□ Text Domain がフォルダ名(slug)と一致
□ 直接アクセス防止(defined('ABSPATH'))を追加
□ ライセンスがGPL互換(同梱物含む)

【readme.txt】
□ 英語で記載
□ 標準フォーマットに従っている
□ Readme Validator でエラーゼロ
□ Stable tag が PHPヘッダーの Version と完全一致
□ Tested up to は実際にテストしたバージョン
□ Contributors が WordPress.org のユーザー名
□ Stable tag: trunk を使っていない

【Plugin Check】
□ Plugin repo カテゴリの ERROR がゼロ
□ WARNING は理由を説明できる状態
□ (推奨)Security カテゴリも実行してチェック

【ZIP構成】
□ ZIP直下にプラグインフォルダが1つ(二重フォルダなし)
□ 不要ファイルを除外(.git, node_modules, .DS_Store など)
□ 機密情報が含まれていない

【整合性】
□ フォルダ名 = Text Domain = slug が一致
□ PHPヘッダーの Version = readme.txt の Stable tag
□ PHPヘッダーの Requires at least / Requires PHP = readme.txt の値

まとめ(前編)

ここまでで、提出に必要な準備がすべて整いました。

前編のポイント

  • 2FAが必須:設定していないと提出できない
  • すべて英語で記述:readme.txt、PHPヘッダー、申請フォーム
  • Plugin CheckでERRORゼロ:ERRORがあると提出自体がブロックされる
  • バージョン番号の整合性:PHPヘッダーとreadme.txtで完全一致
  • 正しいZIP構成:二重フォルダに注意

後編では、以下を解説します:

  • 提出フォームの入力方法とslugの注意点
  • 差し戻しメールが来た時の正しい対応方法
  • 承認後のSVN初回リリース手順

後編:差し戻し対応から公開までに続く

コメント

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