WordPress.orgにプラグインをSVNで公開する手順|初回デプロイで踏んだ落とし穴と対処法

WordPress.orgにプラグインをSVNで公開する手順|初回デプロイで踏んだ落とし穴と対処法 macOS
この記事は約16分で読めます。

前編ではSVNの基本コマンドとGitとの違いを解説しました。この後編では、WordPress.orgへのプラグイン公開に絞って、実際の手順を解説します。

私がRapls PDF Image Creatorを初めてWordPress.orgに公開したとき、SVNのコマンド自体は前編の知識で足りました。でもWordPress.org特有の「お作法」——assetsの配置場所、Stable tagの仕組み、readme.txtとtagsの関係——ここでかなり手間取りました。

この記事では、その経験をもとに「最初のデプロイで知っておくべきこと」を中心にまとめています。SVNのコマンド操作は前編で学んだ前提で書いているので、まだ読んでいない方は先にそちらをどうぞ。

WordPress.orgのSVNは「配布用」——ここが最初に理解すべきポイント

WordPress.orgのSVNはGitHubのような開発用リポジトリではなく、完成したプラグインを配布するための専用リポジトリです。リリース単位でまとめてcommitするのがベストプラクティスです。

最初に伝えておきたいのが、WordPress.orgのSVNリポジトリの位置づけです。

GitHubのように「開発の過程をすべて記録する場所」ではありません。完成したプラグインを置いて、バージョンをタグ付けして、ユーザーがダウンロードできるようにする——それだけが目的の配布専用リポジトリです。

私は最初これを理解せずに、GitHubと同じ感覚で「ちょっと直した → commit」「README修正 → commit」と細かくcommitしていました。動作上は問題ないのですが、WordPress.orgの履歴が無意味なコミットで埋まってしまい、後から見返すと何がどのリリースに対応しているのかわかりにくくなりました。

リリース単位でまとめてcommitする。これがWordPress.org SVNのベストプラクティスです。

ディレクトリ構成——assetsの配置場所だけは絶対に間違えないで

最も多い間違いはバナーやアイコンをtrunk/assets/に置いてしまうことです。正しくはリポジトリ直下のassets/で、配置場所が違ってもエラーが出ないのが厄介です。

プラグインが審査を通過すると、以下のSVNリポジトリが自動で用意されます。

trunkはプラグインのコード本体を置く場所。ここが次のリリース候補です。

tagsはリリースの固定点。tags/1.0.0/のようにバージョンごとのディレクトリを作り、その時点のコードを保存します。WordPress.orgはこのtagsの中身をユーザーに配布します。

branchesはチーム開発用の分岐ですが、WordPress.orgのプラグイン公開では基本的に使いません。

assetsはプラグインページに表示されるバナーやアイコンの画像を置く場所です。

ここで最も多い間違いを先に書いておきます。

画像ファイルはリポジトリ直下のassets/に置きます。trunk/の中ではありません。私もこれを間違えて、プラグインページにバナーが出ない → 何度commitしても反映されない → 半日悩む、という経験をしました。配置場所が違うだけで、エラーメッセージも出ないのがタチの悪いところです。

初回デプロイの手順

審査通過メールに記載されたSVN URLをcheckoutし、trunkにプラグインファイルを配置してsvn add → commitするだけです。開発用ファイルを含めないことだけ注意してください。

審査通過メールが届いたところから、順を追って説明します。

WordPress Plugin Directory 承認メール

▲ WordPress.orgからの審査通過メール

Step 1:リポジトリをcheckoutする

審査通過メールに記載されたSVN URLを使います。

wporg-svnは作業フォルダの名前で、好きな名前でOKです。checkoutが完了すると、trunk/tags/branches/assets/の空ディレクトリが見えるはずです。

checkoutしたディレクトリ構成(tree -L 2 の出力など)

▲ checkoutしたディレクトリ構成

Step 2:trunkにプラグインファイルを配置する

プラグインのコードをtrunkにコピーします。

ここで注意すべきは、開発用のファイルを含めないことです。.git/node_modules/.env、テスト用ファイルなどはtrunkに入れないでください。WordPress.orgは配布用なので、ユーザーに必要なファイルだけを置きます。

Step 3:svn addしてcommitする

初回commitではWordPress.orgのユーザー名とパスワードの入力を求められます。--usernameオプションでユーザー名を指定しておくとスムーズです。

--forceを付けると、ディレクトリ内のファイルを再帰的にすべて追加してくれます。

assets(バナー・アイコン・スクリーンショット)の設定

assetsはプラグインページの見栄えを大きく左右します。リポジトリ直下のassets/にファイル名・サイズが仕様通りの画像を置いてcommitしてください。反映まで数時間かかることがあります。

プラグインページの見栄えを大きく左右するのがassetsです。ここをちゃんと設定するかどうかで、ユーザーの印象がまったく変わります。

バナー画像

プラグインページのヘッダーに表示される横長の画像です。

ファイル名 サイズ 用途
banner-772×250.png 772×250px 標準ディスプレイ用
banner-1544×500.png 1544×500px Retinaディスプレイ用

ファイル名は完全に一致させる必要があります。Banner-772x250.png(先頭大文字)でもダメです。

アイコン画像

検索結果やプラグイン一覧に表示される正方形の画像です。

ファイル名 サイズ
icon-128×128.png 128×128px
icon-256×256.png 256×256px

スクリーンショット

プラグインの動作画面を見せる画像です。readme.txt== Screenshots ==セクションと番号が連動します。

この「1.」「2.」「3.」が、screenshot-1.pngscreenshot-2.pngscreenshot-3.pngと対応します。

assetsを配置してcommitする

画像ファイルをリポジトリ直下のassets/に配置します。繰り返しますが、trunk/assets/ではなくassets/です。

assets/ディレクトリの中身

▲ assets/ディレクトリの中身

commitしてから実際にプラグインページに反映されるまで、数分〜数時間かかることがあります。WordPress.orgはCDNを使っているので、キャッシュが効いている間は古い状態が表示されます。焦って何度もcommitし直すと履歴が汚れるだけなので、しばらく待ってください。

プラグインページにバナーが表示されている状態

▲ プラグインページにバナーが表示されている状態

Stable tagとtagsの関係——リリースの仕組みを理解する

WordPress.orgはreadme.txtのStable tagの値を見てユーザーに配布するバージョンを決定します。Stable tag・PHPヘッダーのVersion・tags/ディレクトリ名の3つを必ず一致させてください。

WordPress.orgでいちばん混乱しやすいのが、readme.txtStable tagtags/ディレクトリの関係です。ここを正しく理解していないと「更新したのに反映されない」「古いバージョンが配布されている」というトラブルが起きます。

Stable tagとは

readme.txtの先頭付近にある以下の行です。

WordPress.orgはこの値を見て、ユーザーにダウンロードさせるバージョンを決定します。Stable tag: 1.0.0と書かれていれば、tags/1.0.0/の中身が配布パッケージになります。

つまり流れはこうです。

  1. trunkにコードを置いて開発する
  2. リリースの準備ができたら、readme.txtStable tagを更新する
  3. svn copyでtrunkの内容をtagsにコピーしてバージョンを固定する
  4. WordPress.orgがStable tagの値を読み、対応するtagsのコードを配布する

実際のリリース手順

バージョン1.0.0をリリースする例です。

svn copy(tag作成)の実行結果

▲ svn copy(tag作成)の実行結果

次のバージョン(1.0.1)をリリースするとき

この繰り返しです。慣れると5分もかかりません。

「Stable tag: trunk」はやめておいたほうがいい

Stable tag: trunkと書くと、trunkの最新状態がそのまま配布されます。tagを切る手間が省ける反面、作業途中のコードがうっかりユーザーに配布されるリスクがあります。

私は最初「tagsを切るのが面倒だから」とtrunkにしていた時期がありましたが、一度trunkに中途半端な状態でcommitしてしまい、その状態がしばらく配布されていたことに気づいて冷や汗をかきました。それ以降はtagsを切る運用に変えています。手間と言ってもsvn copyの1行だけなので、安心のために必ずtagsを使うことをおすすめします。

バージョンの不一致に注意

以下の3箇所のバージョン番号は必ず一致させてください。

  • readme.txtStable tag:
  • メインPHPファイルのヘッダーコメントのVersion:
  • tags/のディレクトリ名

ここがズレていると、WordPress管理画面で「更新あり」の通知が正しく出なかったり、古いバージョンが配布され続けたりします。

GitHubで開発してSVNで配布する——現実的なワークフロー

開発はGitHub、配布はWordPress.org SVNと役割を分けるのが現実的です。リリース時にtrunkの中身を差し替えてcommitし、tagsにコピーするだけで同期できます。

実際の開発では、コードの管理はGitHubで行い、WordPress.orgのSVNにはリリース時だけ同期するのが現実的です。私もこの方法で運用しています。

なぜこの方法がいいのか

GitHubなら、ブランチを切って機能開発したり、プルリクエストでコードレビューしたり、GitHub Actionsでテストを自動化したりと、モダンな開発フローが使えます。一方でWordPress.orgのSVNは配布に特化しているので、開発の履歴を置く場所としては向いていません。

「開発はGitHub、配布はSVN」と役割を分ければ、両方の良いところを活かせます。

手動での同期手順

ポイントはsvn status | grep '^!'の行です。trunkからファイルを削除した場合、手動でsvn deleteしないとSVNが認識してくれません。この1行でまとめて処理できます。

GitHub Actionsで自動化する

毎回手動で同期するのが面倒になったら、GitHub Actionsで自動化できます。10up(WordPress専門の大手開発会社)が公開しているActionが定番です。

10up/action-wordpress-plugin-deploy

GitHubでリリースタグをpushすると、自動でWordPress.orgのSVNにデプロイしてくれます。設定方法は10upのGitHubリポジトリにドキュメントがあります。

私はまだ手動運用ですが、リリース頻度が増えたら自動化に切り替える予定です。

TortoiseSVN——Windowsで使えるGUIクライアント

コマンドラインに抵抗がある方にはTortoiseSVNがおすすめです。Windowsのエクスプローラーに統合され、右クリックメニューからSVN操作ができます。

コマンドラインでの操作に抵抗がある方は、TortoiseSVNという選択肢があります。Windowsのエクスプローラーに統合され、右クリックメニューからSVN操作ができるGUIツールです。

TortoiseSVNの右クリックメニュー画面

▲ TortoiseSVNの右クリックメニュー画面

よく使う操作

やりたいこと TortoiseSVNの操作 対応するコマンド
作業コピーを作る 右クリック → SVN Checkout svn checkout URL
最新化する 右クリック → SVN Update svn update
変更状態を確認 右クリック → Check for Modifications svn status
差分を見る 右クリック → TortoiseSVN → Diff svn diff
コミット 右クリック → SVN Commit svn commit -m "msg"
ファイルを追加 右クリック → TortoiseSVN → Add svn add PATH
タグを作成 右クリック → TortoiseSVN → Branch/Tag svn copy SRC DST
履歴を見る 右クリック → TortoiseSVN → Show log svn log
変更を取り消す 右クリック → TortoiseSVN → Revert svn revert PATH
ロックを修復 右クリック → TortoiseSVN → Cleanup svn cleanup

TortoiseSVNのコミットダイアログは、変更されたファイルの一覧と差分をまとめて確認できるので、コマンドラインのsvn stsvn diffsvn ciの流れを1画面で完結できます。「commit前の最終確認」が視覚的にできるのはGUIの強みです。

初回デプロイで踏みやすい落とし穴

初回デプロイでよくあるトラブルは「assetsの配置場所ミス」「svn addの忘れ」「Stable tagの不一致」「開発用ファイルの混入」の4つです。いずれもcommit前の確認で防げます。

自分の経験と、WordPress.orgのフォーラムでよく見かける質問をもとにまとめます。

assetsが表示されない

原因の9割は配置場所です。trunk/assets/に入れていないか確認してください。正しくはassets/(リポジトリ直下)です。

残りの1割は以下のどれかです。

  • ファイル名のスペルミス(大文字・小文字も区別される)
  • ファイル名に書かれたサイズと実際の画像サイズが不一致
  • CDNキャッシュが古い状態を返している(数時間待つと解消する)

svn addを忘れたままcommitした

新しいファイルを追加したのにsvn addを忘れると、commitしてもそのファイルは反映されません。svn status?マークが表示されているファイルがないか、commitの前に必ず確認してください。

前編でも書きましたが、私が初回デプロイで最初にハマったのがまさにこれでした。

古いバージョンが配布され続ける

readme.txtStable tagを確認してください。この値が古いバージョンを指していると、trunkをどれだけ更新しても配布パッケージは変わりません。

以下の3箇所が一致しているか確認:

  1. readme.txtStable tag: X.X.X
  2. メインPHPファイルのVersion: X.X.X
  3. tags/X.X.X/ディレクトリが存在すること

開発用ファイルが混入した

.git/node_modules/.env、テストファイルなどをうっかりtrunkに入れてしまうケース。commitする前にsvn statusで余計なファイルが追加されていないか確認してください。

一度commitしてしまった場合は、該当ファイルをsvn deleteして再commitすれば配布パッケージからは消えますが、SVNの履歴には残ります。

commit前チェックリスト

毎回のリリースで以下の7項目を確認すれば、トラブルはほぼ防げます。

  • svn upで最新化したか
  • svn st?(add忘れ)が残っていないか
  • 開発用ファイル(.git、node_modules、.env、テストファイル)を含めていないか
  • readme.txtのStable tagは新バージョンに更新したか
  • メインPHPファイルのVersionヘッダーは新バージョンか
  • assetsはassets/直下(trunk/assets/ではない)にあるか
  • 画像ファイル名は仕様通りか(大文字小文字・サイズ一致)

参考リソース

この記事で参照した公式ドキュメントとツールの一覧です。

WordPress公式ドキュメント

TortoiseSVN

GitHub Actions

まとめ

WordPress.orgへのプラグイン公開で覚えるべきことは3つだけです。assetsはリポジトリ直下のassets/に置く、Stable tagとtags/ディレクトリ名を一致させる、リリース単位でまとめてcommitする。

WordPress.orgへのプラグイン公開は、最初の1回を乗り越えれば難しくありません。要点を3つだけ覚えておいてください。

assetsはリポジトリ直下のassets/に置く。trunk/assets/ではありません。

Stable tagtags/ディレクトリ名を一致させる。ここがズレると正しいバージョンが配布されません。

リリース単位でまとめてcommitする。WordPress.orgのSVNは配布用リポジトリです。開発の中間コミットは不要です。

この3つさえ守れば、あとはコマンドを順番に打つだけです。前編の基本コマンドと合わせて、ぜひ自分のプラグインを公開してみてください。

← 前編を読む:WordPressプラグインを公開して学んだSVNの使い方

コメント

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