WordPress公式ディレクトリのプラグインをGitHubで管理する

最近、自分で開発したWordPressプラグインをWordPress.orgの公式ディレクトリに登録しました。話には聞いていたんですがWordPressのVCSってSubversionなんですね。なので、公式ディレクトリに登録する時にはSubversionが必要になります。

ただ、普段の開発にはGitHubを使いたいので今回どうGitとSubversionを使い分けられるか試してみました。最終的に自分が落ち着いた方法をご紹介します。

git-svnを使わなくても併用できる

GitとSubversionを併用する方法について調べるといろいろ出てくるのですが、見ているとgit-svnを利用するものが多いです。たとえばこちらの記事とか。

GitHubにホストしていたレポジトリをWordPress.orgのSVNにSourceTree(Mac)を使ってプッシュするまで

ただ下記の記事で紹介されているスクリプトを利用するとgit-svnを利用しなくてもWordPress.orgのSVNにプッシュすることができます。多くの人はGitHubでソースコードのバージョンコントロールをしてSVNはプラグインのリリース用に利用できさえすれば良いと思うのでこれで十分だと思います。

Git管理下のWordPressプラグインを公式SVNリポジトリに上げる – Git-svnを使う方法/使わない方法

WordPressプラグインのリリース用スクリプトを利用する

下記のシェルスクリプトを利用します。gitのほかにはsubversionがインストールされていれば動作します。

Github to WordPress Plugin Directory Deployment Script, Git-Flow Version

SubversionのインストールもMacPortsで紹介されているケースが多かったんですが、自分の場合はHomebrewで一発でインストールできました。

$ brew install subversion

スクリプトがやっていることは、

  1. メインのスクリプトに記述してあるバージョンとreadme.txtに記述してあるバージョンをチェック
  2. ローカルのgitをpushする(コメントアウトはずすとタグをバージョン番号で付与する)
  3. WordPress.orgのプラグインのSVNのリポジトリを/tmp以下にチェックアウト
  4. /tmp以下にチェックアウトしたtrunkフォルダにGitHubからチェックアウト
  5. GitHubからチェックアウトしたリソースにassetsフォルダが存在すればSVNのassetsに移動
  6. SVNのリポジトリに反映
  7. SVNのタグにバージョン番号を反映
  8. 一連の処理が終わるとtmpのSVNのチェックアウトしたフォルダを削除

という感じだと思います。イメージとしてはSVNで管理するというよりは都度SVNをチェックアウトしGitHubで管理してるものを丸々コピーし反映するという感じです。

ぼくの場合は最終的にはこのスクリプトを改変してプラグインのGitリポジトリに含めて管理しています。下記のようなスクリプトです。

release.sh

大きく変えてはいないですが、ぼくの作ったプラグインの場合JavaScriptとSCSSのプリコンパイルが必要なのでGitHubからチェックアウトした後にnpm installやプリコンパイルを実行しています。あとはプラグインのファイル容量をなるべく少なくしておきたかったのでプラグインの実行に関係ないファイルは全て削除した上でSVNにコミットするようにしました。

# This is my own build script
cd $SVNPATH/trunk/
npm install
npm run compile

if [ $? != 0 ]; then echo "Build failed.."; exit 1; fi

rm -rf {bin,config,tests,node_modules,*.js,*.json,*.xml.dist,src,release.sh}

不要になったファイルの削除

ちなみにこのスクリプトは上書きを重ねていくものなので開発を続けるうちに不要になったファイルの削除などは自分でsvnの操作をして対応する必要があります。svnは初心者で間違っているところがあるかもしれませんが、下記のようにすると削除できます。

$ svn checkout https://plugins.svn.wordpress.org/acf-images-search-and-insert /tmp/acf-images-search-and-insert
$ cd /tmp/acf-images-search-and-insert
$ svn delete trunk/unused-file.php
$ svn commit -m "delete unused file" && svn update
$ cd
$ rm -rf /tmp/acf-images-search-and-insert