VVVを使ってWordPress本体のパッチを送る方法

WordBench串本おれおれアドベントカレンダー19日目の記事です。

本日(12/19)の早朝にWordPress4.1がリリースされましたね。

今回のバージョンでは、僕もコアコントリビューターとしてクレジットを入れてもらいました。(4回目!)

WordPress 4.1 “Dinah”

日本人では、僕以外にも一緒にデジタルキューブで仕事をしている@tekapoさん、WordBench大阪の管理人の1人@ixkaitoさん、Automatticの@TakashiIrieさん、そして僕は面識がないのですが Yuta Sekine さんという方もクレジットが入ってますね。

追記※ 元WordCamp東京の実行委員長のとおるちゃんも発見しました!

デジタルキューブは、手を動かす形でのWordPressへの貢献にはとても力を入れていまして、プラグインのダウンロード数が100万を超え、3.7から4.1まで連続してコアコントリビューターが出ているなど、国内では圧倒的です。

Our WordPress Contributions

最近では、“Five for the Future”ということで、海外を中心にいろんな人や企業が貢献度合いをアピールし始めましたね。

WordCamp San Franciscoでの講演の一つで述べられていましたが、能力があることもとても重要ですが、こうやって「能力があるように見せる」こともオープンソースでビジネスをしていく上では重要じゃないかと思います。

WordPressコアへの貢献について

今回の記事ではWordPressコアにパッチを送るための、パッチの作り方をざくっと解説します。

だいたいの流れは以下のような感じです。

  1. 修正する。
  2. パッチを作る。
  3. Tracに突撃する。

Tracへの突撃方法はスクショとかいろいろあるので次回にまわして、この記事ではパッチを作るまでの方法を解説します。

じゃあ、やってみましょう!

VVVを起動する

WordPress本体の開発へ貢献するには、概ね以下の環境が必要になります。

  • PHPUnit
  • Subversion
  • Grunt
  • WordPress本体の開発用バージョン

特にPHPUnitやGruntに関しては、WordPress本体の開発用の環境を構築するためのドキュメントがほとんどありません。

なのでVVVというVagrantベースの開発環境を使うのが手っ取り早いです。

Varying-Vagrant-Vagrants/VVV

ここは自力で頑張ろうなんて考えないでぜひVVVを使ってください。

そうそう、僕はVVVにもコントリビューターとして名前を入れてもらっています。

VVVの使い方

Vagrantなので使い方は簡単です。

あえて詳しくは書きませんが、以下のようにgit cloneしてvagrant upです。

$ git clone git@github.com:Varying-Vagrant-Vagrants/VVV.git
$ cd VVV
$ vagrant up

プロビジョニングが完了したら、以下のURLにアクセスしてください。

http://build.wordpress-develop.dev/

VVVではバーチャルホストで、最新版(Stableなバージョン)のWordPressもセットアップされますが、コア開発においては、こちらを使いましょう。

WordPress本体を修正する

環境が出来上がったら、実際に作業を行うわけですが、その前にいかのコマンドを実行してWordPressのビルドに必要な環境をインストールする必要があります。

$ cd /var/www/html
$ npm install

ディレクトリ名は間違えないようにしましょうね。

コアにパッチを送る際には全てのコマンドをこのディレクトリ(/var/www/html)で実行することを心がけましょう。

NodeやPHPUnitなどの環境がない場合は、以下のようにvagrant sshしてから作業用のパスに移動してもいいです。

$cd /vagrantwww/html #VVV側でのパス

そしてファイルを修正して、以下のコマンドを実行です。

$ grunt

このコマンドを実行しないと、http://build.wordpress-develop.dev/に反映されなくてあれ?ってなりますので忘れないように。

PHPのファイルを修正したら以下のコマンドでPHPUnitも実行しましょう。

$ phpunit

コマンドを実行した結果、以下のようにエラーが出なければ成功です。

$ phpunit
.............................................................   61 / 2956 (  2%)
....................................S........................  122 / 2956 (  4%)
(中略)
............................................................. 2867 / 2956 ( 96%)
............................................................. 2928 / 2956 ( 99%)
............................

Time: 4 minutes, Memory: 126.25Mb

OK, but incomplete, skipped, or risky tests!
Tests: 2956, Assertions: 11999, Skipped: 22.

PHPUnit実行時に以下のようなメッセージが出ると思います。

Not running ajax tests. To execute these, use --group ajax.
Not running ms-files tests. To execute these, use --group ms-files.
Not running external-http tests. To execute these, use --group external-http.

これは、以下のようにマルチサイト用のテストなどを実行するための各種のオプションを指定してねという意味です。

$ phpunit -c tests/phpunit/multisite.xml

時間がかかるものなので、毎回全てを実行するのはめんどうなので、そのへんは作業内容に合わせて対処しましょう。

パッチを作る

パッチを作るには、svnコマンドを使用します。

くどいようですが、この時/var/www/htmlでコマンドを実行することに注意してください。

$ svn diff > patch.diff

パッチを作ってTracに投げたら以下のコマンドで元に戻しておくことをおすすめします。

$ svn revert --recursive .

Tracへの突撃方法は次の記事で書きます!