WordPress のプラグイン「Coverpeek」を wordpress.org で公開するまでの連載の2回目です。
前回は審査で名前を差し戻されてから承認されるまでを書きました。
名前の差し戻しから承認までは↓こちらです。
さて、承認のメールが届いてホッとしたのも束の間でした。
ここから先はSVN を使って自分でプラグインをアップロードする必要があるとのことです。
しかも、wordpress.org の SVN は コミットした瞬間に公開される仕組み です。
「これで全世界の WordPress の管理画面に表示されるのか…!」という高揚感と、「取り消せない」という恐怖が一緒に来ました…!
今回の作業は、Claude Code(AI のコーディング支援ツール)と一緒に進めました。
コマンドの組み立てやファイルの照合は Claude Code に任せ、私は結果を確かめながら進める、という分担です。
最終的に、コミットの前に 「コマンドでの照合」と「GUI での目視」の2段階 で中身を確かめてから公開しました。
承認メールに書いてあること
承認のメールは、次のような件名で届きます。
Congratulations, the plugin hosting request for {プラグイン名} has been approved.本文の要点は次のとおりです。
- 1時間以内に、自分のアカウントに SVN へのコミット権限が付く
- SVN の URL は
https://plugins.svn.wordpress.org/<スラッグ> - コードのアップロードは、自分で SVN を使って行う(先方は代わりにやってくれない)
- SVN のユーザー名は、wordpress.org のユーザー名。大文字と小文字を区別し、メールアドレスは使えない
Git なら使い慣れていますが、SVN は使用したことがありませんでした…。
メールにリンクされている公式ドキュメントを、例によって Google 翻訳と AI の要約で読んでいきました。
コミットする前に、公式ドキュメントで押さえたこと
コミットした瞬間に公開される
いちばん大事なのはここです…!
wordpress.org の SVN には「公開を止めるスイッチ」がありません。
あるのはプラグインの「閉鎖」だけで、これは事実上元に戻せないようです。
つまり、コミットの前にどれだけ確かめられるか全て、ということになります。
コミットは1回にまとめる
コミットするたびに、配布用の zip が作り直されるそうです。
細かいコミットを繰り返すと反映も遅れる(最大6時間ほどかかることがある)ので、準備を全部済ませてから1回でコミットするのがよいようです。
フォルダの構成
SVN のリポジトリには、次の3つのフォルダが同じ階層に並びます。
| フォルダ | 入れるもの |
|---|---|
trunk/ | プラグインのコード。直下にメインファイルと readme.txt を置く |
tags/ | リリースごとのコピー(tags/0.1.0/ など) |
assets/ | ストア用の画像(バナー・アイコン・スクリーンショット) |
ここでちょっと混乱したのが assets です。
プラグイン自身にも、CSS や JS、フォントを入れた assets/ フォルダがあります。
こちらは trunk/assets/ に入ります。
一方、最上位の assets/ はストアのページに表示する画像の置き場所です。
名前は同じでも、まったく別物 なので、取り違えないように気をつけたいところです。
階層で書くと、こうなります。
<スラッグ>/ ← SVN のリポジトリ
├── assets/ ← ストア用の画像(ここはプラグインには含まれない)
│ ├── banner-772x250.png
│ ├── icon-128x128.png
│ └── screenshot-1.png …
├── tags/
│ └── 0.1.0/ ← trunk をコピーしたもの
└── trunk/ ← プラグイン本体(ここが配布される)
├── coverpeek.php
├── readme.txt
├── includes/
└── assets/ ← プラグインが使う CSS・JS・フォントなど同じ assets という名前のフォルダが、最上位と trunk の中の2か所に出てきます。
タグと Stable tag
リリースは、trunk をコピーして tags/ の下に作ります。
タグ名は数字とピリオドだけで、readme.txt の Stable tag と一致させます。
trunk をそのまま Stable tag にすることもできるようですが、非推奨とされています。
入れてはいけないもの
zip ファイル、.gitignore、開発用のファイルなど、「全ユーザーに配布されて困るもの」は入れません。
SVN に入れたものは、そのまま全員に配られると考えておくのがよさそうです。
事前の準備
SVN をインストールする
Mac に svn が入っていなかったので、Homebrew で入れました。
brew install subversionSVN 専用のパスワードを作る
SVN にログインするときのパスワードは、wordpress.org のログインパスワードとは別です。
プロフィールの「Account & Security」にある「SVN credentials」から生成します。
パスワードはランダムに生成されるもので、自分では決められません。
また、アカウントで 2段階認証が有効になっていること が必須でした。
作業の手順
チェックアウト
まず、リポジトリを手元にチェックアウトします。
読み取りだけなので、この時点ではパスワードは要りません。
svn co https://plugins.svn.wordpress.org/<スラッグ> <作業フォルダ>中身は assets・tags・trunk の空のフォルダが3つだけでした。
trunk は Git のコミット済みの内容から作る
プラグインのソースは Git で管理しているので、trunk の中身は Git でコミット済みの内容 から作りました。
git -C <プラグインのGitリポジトリ> archive HEAD <配布するファイル…> | tar -x -C <作業フォルダ>/trunk作業フォルダからそのままコピーすると、コミットしていない変更や、Mac の .DS_Store が紛れ込むおそれがあります。git archive なら、コミットした内容だけが出てくるので安心です。
配布するファイルは、審査に提出した zip と同じものです(メインファイル、uninstall.php、readme.txt、LICENSE、includes/、assets/、languages/)。
全部で21ファイルでした。
ストア用の画像を最上位の assets/ に置く
ストア用の画像は、ファイル名とサイズが決まっています。
| ファイル名 | 用途 |
|---|---|
banner-772x250.png | バナー |
banner-1544x500.png | バナー(高解像度用。これ単独では使えない) |
icon-128x128.png | アイコン |
icon-256x256.png | アイコン(高解像度用) |
screenshot-1.png 〜 | スクリーンショット(readme の説明1行につき1枚) |
ファイル名は小文字のみです。
今回は、バナー2枚、アイコン2枚、スクリーンショット8枚の、合わせて12枚を置きました。
ストアのページではバナーとアイコンがこのように表示されます。

スクリーンショットはページの下のほうに並びます。

画像づくり(Figma やスクリーンショットの撮影)でもいろいろ詰まったのですが、長くなるので別の記事に書く予定です。
画像の MIME タイプを設定する
SVN に画像を入れただけだと、ストアのページで画像をクリックしたときに、表示されずにダウンロードされてしまうことがあるそうです。
それを防ぐために、MIME タイプを設定しておきます。
svn propset svn:mime-type image/png assets/*.pngJPEG の場合は image/jpeg です。
タグを作る
最後に、trunk をコピーしてタグを作ります。
svn cp trunk tags/0.1.0ここまでで、コミットの準備は完了です。
コミット前に目で確かめたこと
コマンドで照合する
まず、diff -r で3か所を照合しました。
trunkと、Git でコミット済みの内容が一致しているかassetsに、画像12枚だけが入っているか(内部用のメモなどが紛れていないか)tags/0.1.0とtrunkが一致しているか
どれも差分なしでした。
それでも、自分の目で見たかった
審査は通っていたので、プラグイン自体に不備はないと思っていました。
それでも、コミットした瞬間に公開されると思うと、最後は自分の目で確かめたくなりました。
Git なら、普段は SourceTree で変更を見ています。
最初からターミナルで全てやれば良いだけなんですが、やはり初めての作業は使い慣れたツールで確認したい…!
ところが、SourceTree は SVN に対応しておらず…。
ならせめて似たような感じで確認したい…!
そこで、VS Code に SVN の拡張機能(johnstoncode.svn-scm)を入れました。
これで、追加されるファイルの一覧を Git と同じような感覚で見られます。
追加予定は67件(ファイルとフォルダを合わせた数)でした。
不要なファイルが入っていないか、trunk と最上位の assets を取り違えていないかを、一覧で確認しました。
見るのは GUI、コミットはターミナル、と役割を分けています。
GUI のボタンで間違ってコミットしてしまうのを避けたかったからです。
コミット
いよいよコミットです。
コマンドの履歴にパスワードを残さないため、パスワードはコマンドに書かずに対話で入力します。
svn ci --username <ユーザー名> --no-auth-cache -m "Initial release 0.1.0"--no-auth-cache を付けると、パスワードが手元に保存されません。
実行するとパスワードの入力を求められます。
入力した文字は画面に表示されないので、生成したパスワードを貼り付けて Enter を押します。
Enter を押す瞬間は正直ドキドキしました…!
しばらくして次のように表示されました。
リビジョン 3714885 をコミットしました。これで公開です。あっけないくらい一瞬でした。
公開されたかの確認
コミットのあと、まずは公開ページを開いてみました。
Coverpeek – Auto Thumbnails with Live Preview|WordPress.org

自分のプラグインが wordpress.org のいつものデザインで表示されているのを見て、じわじわと実感がわいてきました。
ほかにも、次の点を確認しました(確認作業は Claude Code に任せています)。
- wordpress.org の公開 API に、名前・バージョン・タグ・スクリーンショットが反映されている
- 画像12枚が、CDN から正しい MIME タイプで返ってくる
- wordpress.org が作った配布用の zip の中身が正しい
公式の FAQ によると、反映までの目安は次のとおりです。
| 対象 | 反映までの目安 |
|---|---|
| プラグインのページ | すぐ |
| 画像(CDN) | 最大6時間 |
| プラグインの検索 | 6〜14日 |
公開してすぐに検索しても出てこないので、焦らずに待つのがよいかと。
ちなみに、管理画面のプラグイン一覧に出るリンクも変わります。
公開前は「プラグインのサイトを表示」(ヘッダーの Plugin URI へのリンク)でしたが、コミットしてしばらくしてから見ると「詳細を表示」に切り替わっていました。
wordpress.org に同じスラッグのプラグインの情報があると、こちらが出る仕組みのようです。

「詳細を表示」をクリックすると、wordpress.org と同じ説明やスクリーンショットが管理画面の中で開きます。
まとめ:初回コミットで確認したいこと
最後に、これから初めてコミットする方向けに、確認したいことをまとめておきます。
readme.txtのStable tagと、tags/のフォルダ名が一致しているかtrunk/assets/(プラグイン本体)と、最上位のassets/(ストア用の画像)を取り違えていないかtrunkの直下に、メインファイルとreadme.txtがあるか(サブフォルダに入れると zip が正しく作られない)- 開発用のファイルや
.DS_Storeが入っていないか - 画像の MIME タイプを設定したか
- コミットは1回にまとめたか
なお、承認直後にコミットしようとして Access forbidden と出る場合は、権限が付くまで(最大1時間)待つ必要があるようです。
私は承認の翌日にコミットしたので、このエラーには当たりませんでした。
「コミット=公開」という仕組みは怖かったですが、事前に照合と目視をしておいたおかげで落ち着いてコミットできました。
次回は公開後の翻訳(translate.wordpress.org)について書きます。
「翻訳ファイルを同梱しないでください」という審査の指摘から、日本語チームに翻訳を差し戻されて直すまでの話です。
翻訳の取り込みから PTE をもらうまでは↓こちらです。

