WordPress コアがコーディング規約準拠に向けて

この記事はWordPress Advent Calendar 2017の6日目の記事です。昨日は覆面くん (@MrExcluded)さんの「セマンティックシュトラーセ」でした。

Make WordPress Coreを眺めてたらきになる投稿がありました。

WordPress のコーディング規約

WordPress には独自のコーディング規約、WordPress Coding Standards(以下WPCS)が定義されています。詳しいことはたぶんアドカレのまたほかのエントリで扱われるであろうので省略しますが、WPコアにパッチを送る際にはこれに準拠する必要があり、プラグインやテーマでも利用が推奨されているものです。

(なお、モダンなFW等で採用されているような PSR-2 とかとは大きく異なるためそっちに慣れた自分はWPCSに従ったコードを書くのがつらくなっています)

コアにおけるコーディング規約対応

ところで今月頭(現地時間ではまだ11月末ですが)、こんな投稿がMake WordPress Coreに投稿されていました。

WordPress PHP now (mostly) conforms to WordPress Coding Standards

この投稿によると、現行の(少なくともWP 4.9時点での)7万行以上のコードはなんとWPCSに準拠していなかったとのこと。

そもそも今のコーディング規約がいまほど重要視されるようになったのも WordPress の歴史的にみれば最近のことでもあるため、決しておかしいことではありません。

試しに手元にあるWPコアの無作為に選んだファイルに対してphpcsをかけてみたところ、大量のエラーが表示されました。1ファイルでもかなりのエラー量があり、複数ファイル一気にやろうとするとメモリーが足りません……

決して誰もそれを指摘してこなかったわけではないのですが、リファクタリングだけのパッチはレビューが面倒だったり互換性が保証できないなりでハンドブックにも推奨されないことが明記されていました。

Code Refactoring

一方で同ページには

That said, we want to be internally consistent and follow our own rules. Code is poetry, and our code should be beautiful.

とも書かれています。ならなおすべきじゃん?

半分ほどのコードが直される

ということで、WordPress-Coding-Standards/WordPress-Coding-Standardsの修正もおこないつつ1、さらにはPHPCS2も修正しつつ、[42343]にて問題の94.8%は機械的に修正されたようです。

この変更のdiffのサイズは11MBを超える大容量(+105,650, -77,558)。参考にWP4.9のPHPのサイズは大体12MB程度3なので、パッチの半分程度が問題行と見積もるとコアのコードの半分弱の行はコーディング規約に反してたことに
(公開前追記)WP4.9.1のPHPの総行数は34万行程度4だったので行基準で1/4弱といったところでしょうか(パッチにはまわりの行も含まれるので辻褄が合う)、いずれにしてもかなりの数に違いはありません。

歴史的に仕方ないとは言えものすごい量の変更です。

残りの5.2%の壁

残りの5.2%は機械的には直せず、人の手による介入が必要なコードの模様。百分率で見たらたった5%かもしれないものの単純計算でざっと4000行くらい残っているようです。

これらについては近いうちにパッチの受け入れを始めるとのこと。これまでこういったことにあまり積極的でなかった(ように見える)方針に対して大きな変化・改善です。最新のTrunkで直せる(Tracで未報告の)部分を見つけたら是非パッチを書いてチケットを立てましょう。コアコントリビューターになるチャンス!

既存のパッチ

過去に投稿されたパッチの多くは最新のコード(やWPCS)に適合せず更新が必要で、そのままでは利用できないものが多いでしょう。もしこの問題に興味があればなんか実験的な取り組みに協力できる……っぽいことが例の記事に書かれてるんだけど良くわからない。

Thanks @jrf, @pento and other

彼らのおかげでコアコードの保守性・可読性などが改善されたことでしょう。これは多くの人が気にしていたことであると同時に、WordPress、そしてそれ以外にも影響を与える大きな成果です。ありがとう。


@see #41057 Update PHP codebase per WordPress PHP Coding Standards


明日の WordPress Advent Calendar 2017 は@ryo511さんのGutenbergことはじめです。

まだ枠が空いているようですね。この記事を見てくれたあなた、よければ書いてみませんか?


  1. wpcs0.11.0 以降のリリースで大量の変更が入ってるのがリリース履歴からも分かります。 
  2. @jrfnlのPRが大量…… 
  3. du -sc wp-{includes,admin,content/themes/twenty*}/**/*.php 
  4. wc -l wp-{includes,admin,content/themes/twenty*}/**/*.php 

コメントを残す