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 に上げたので、翻訳ファイルやパッチなどのプルリクお待ちしております^^;

MW WP Form

MW WP Form はショートコードベースのフォームプラグインです。多くの機能を持っており、例えば、多くのバリデーションルール、問い合わせデータの保存、そしてグラフ機能集計などを使用することができます。

さらに詳しく
Habakiri

Habakiri

Bootstrap ベースのシンプルな WordPress テーマ。レスポンシブ、多くのカスタマイズ機能。圧縮された CSS・JS を使用する高速化対策。Microformats 対応。Sass、クラスベースの functions.php。

さらに詳しく
basis-stylus

Basis

軽量なレスポンシブ Stylus/CSS フレームワーク。Flexbox ベースのグリッドシステム、疎結合なコンポーネント、バーティカルリズム。

さらに詳しく