昨日 [「VCCW + WP-CLI で WordPress のユニットテスト」](VCCW + WP-CLI で WordPress のユニットテスト) という記事を書きました。
何回かに分けて、VCCW の少し高度な使い方について解説していきます。
WordPress のコーディングスタンダード
WordPress にはいくつかのコーディングスタンダードが定められています。
主な規約はだいたい以下のような感じ。
- インデントにはスペースではなく本物のタブを使用すること。
- 丸括弧の内側にはスペース。
- 変数を展開する等の理由がない限りシングルクォーテーションを使用すること。
などなど。
これらは WordPress-Coding-Standards というツールを使用すれば、皆さんのプラグインやテーマ内のコードをチェックすることができます。
VCCW にはこれがデフォルトでセットアップされていますので簡単にチェックを行うことができます。
wpcs コマンドを使ってコーディングスタンダードをチェックする
みなさんのテーマやプラグインが WordPress のコーディングスタンダードに準拠しているかをチェックするには、wpcs
コマンドを使ってください。
まず、いつものとおりゲストマシンにログイン。
$ vagrant ssh
次にチェックしたいテーマやプラグインのディレクトリに移動してください。
$ cd /var/www/html/wp-content/plugins/oreore
最後にチェック。
$ wpcs *.php
サンプルに以下のようなまったく役に立たないプラグインを用意してみました。
<?php
/**
* Plugin Name: Oreore
* Plugin URI: PLUGIN SITE HERE
* Description: PLUGIN DESCRIPTION HERE
* Author: YOUR NAME HERE
* Author URI: YOUR SITE HERE
* Text Domain: oreore
* Domain Path: /languages
* Version: 0.1.0
*
* @package Oreore
*/
function hello( $str ) {
echo $str;
}
これにチェックをかけると以下のような感じ。
$ wpcs *.php
FILE: /var/www/html/wp-content/plugins/oreore/oreore.php
----------------------------------------------------------------------
FOUND 3 ERRORS AFFECTING 1 LINE
----------------------------------------------------------------------
16 | ERROR | [x] Tabs must be used to indent lines; spaces are not
| | allowed
16 | ERROR | [x] Line indented incorrectly; expected at least 1
| | tabs, found 0
16 | ERROR | [ ] Expected next thing to be a escaping function, not
| | '$str'
----------------------------------------------------------------------
PHPCBF CAN FIX THE 2 MARKED SNIFF VIOLATIONS AUTOMATICALLY
----------------------------------------------------------------------
Time: 37ms; Memory: 4Mb
インデントの方法に関するエラーが二つと、最後に Expected next thing to be a escaping function, not '$str'
というエラーが出ていますね。
これは XSS脆弱性を防ぐためのエスケープが漏れていることを指摘しています。
これは以下のように WordPress のエスケープ関数を使用するとエラーがでなくなります。
<?php
/**
* Plugin Name: Oreore
* Plugin URI: PLUGIN SITE HERE
* Description: PLUGIN DESCRIPTION HERE
* Author: YOUR NAME HERE
* Author URI: YOUR SITE HERE
* Text Domain: oreore
* Domain Path: /languages
* Version: 0.1.0
*
* @package Oreore
*/
function hello( $str ) {
echo esc_html( $str );
}
このように WordPress-Coding-Standards を使用するとエスケープ漏れもチェックしてくれますので、プラグインやテーマのセキュリティ向上にも役に立ちます。