Grunt で WordPress テーマ・プラグインを公式ディレクトリと GitHub の両方で管理しやすいようにした。

昨日、「MacBookAir の容量がきついので Vagrant 環境を外付けに移した話」という記事を書きましたが、WordPress のテーマ・プラグインは Subversion で管理する必要があり、これまでは Subversion で WordPress の公式ディレクトリにだけアップしていたのですが、プルリクなどもらいやすいように GitHub にも公開するようにしたいと思っていたので、ついでに Grunt でその辺の環境も整えてみました。

下記のコマンドで開発環境のディレクトリから Subversion 用のディレクトリ、GitHub 用のディレクトリにファイルがコピーされるようになっています。

# GitHub 用のディレクトリにファイルをコピー
grunt github
# Subversion 用のディレクトリにファイルをコピー
grunt svn

Grunt の準備

この Grunt の設定は複数の WordPress テーマ・プラグインの開発環境で共通に使えるようにしたかったので、簡単にインストールできるようにシェルスクリプトにしました。

vi gruntinit.sh

npm init
npm install --save-dev grunt grunt-contrib-clean grunt-contrib-copy

Gruntfile.js は下記のような感じです。GitHub 用、Subversion 用のディレクトリの中身を一旦全て削除して、開発環境から必要なファイルをコピーするようにしています。テーマ・プラグインを構成するファイルが追加される場合は特に問題無いと思いますが、ファイルが削除される場合は別途 git rm とか、svn delete したほうが良いかもしれません(ちょっとこの辺詳しくないです…)。

module.exports = function( grunt ) {
	// load task
	grunt.loadNpmTasks( 'grunt-contrib-clean' );
	grunt.loadNpmTasks( 'grunt-contrib-copy' );

	// Project configuration.
	grunt.initConfig( {
		dir: {
			// Gruntfile.js から見た WordPress ルートへの相対パス
			develop: 'vccw/www/wordpress',
			// プラグインディレクトリ名
			plugin: 'mw-wp-form',
			// GitHub 用ディレクトリパス
			github: '/PATH/TO/github/<%= dir.plugin %>',
			// Subversion 用ディレクトリパス
			svn   : '/PATH/TO/svn/<%= dir.plugin %>/trunk'
		},

		copy: {
			github: {
				expand: true,
				cwd: '<%= dir.develop %>/wp-content/plugins/<%= dir.plugin %>/',
				src: '**',
				dest: '<%= dir.github %>/'
			},
			svn: {
				expand: true,
				cwd: '<%= dir.develop %>/wp-content/plugins/<%= dir.plugin %>/',
				src: '**',
				dest: '<%= dir.svn %>/'
			}
		},

		clean: {
			options: { force: true },
			github: {
				src: [
					'<%= dir.github %>/*/',
					'<%= dir.github %>/*.*'
				]
			},
			svn: {
				src: [
					'<%= dir.svn %>/*/',
					'<%= dir.svn %>/*.*'
				]
			},
			noneed: {
				src: [
					'<%= dir.github %>/.DS_Store',
					'<%= dir.svn %>/.DS_Store'
				]
			}
		}
	} );

	grunt.registerTask( 'github', [ 'clean:github', 'copy:github', 'clean:noneed' ] );
	grunt.registerTask( 'svn', [ 'clean:svn', 'copy:svn', 'clean:noneed' ] );
};

実際のところ、仮想環境内のテーマフォルダやプラグインフォルダをそのままローカルリポジトリにしてしまって git-svn で Git と Subversion 同時に管理したほうが効率的だと思いますが、WordPress の公式ディレクトリにはリリース版だけあげて GitHub のほうには途中の物でもある程度こまめにあげるようにしたかったので、このような構成にしてみました。僕はあまり環境構築は詳しくないので、もっと効率の良い方法があるのかもしれませんが…。

WordPress プラグイン「MW WP Form」と現在公式ディレクトリに申請中のテーマ 「Kotetsu」を GitHub に上げたので、翻訳ファイルやパッチなどのプルリクお待ちしております^^;

  • ブックマーク
  • Feedly

この記事を書いた人

キタジマタカシ

長崎在住、フリーランスのWordPress テーマ / プラグインデベロッパー。 多数のプロダクトをオープンソースで開発・公開しています。現在は WordPress 有料テーマ Snow Monkey を開発・販売しています。