Slide 1

Slide 1 text

プラグインで開発 at 秋のお茶会 #wbehime

Slide 2

Slide 2 text

参考書

Slide 3

Slide 3 text

WordPress 1. コンテンツ管理 -> WordPress の基本機能 2. デザインのカスタマイズ -> テーマ制作で対応 3. 機能追加 -> 独自プラグインで対応

Slide 4

Slide 4 text

Plugin Handbook goo.gl/XK0sRI

Slide 5

Slide 5 text

Plugin 作成で最低限必要なもの plugins$ mkdir sfd-handbook sfd-handbook$ vi sfd-handbook.php

Slide 6

Slide 6 text

テストコードを書こう 参考までに、昨年の Coderetreat "Global Day of Coderetreat 2014 in Matsuyama" agile459.doorkeeper.jp/events/16066 ペア( 2 人一組)でプログラムの問 題を TDD で解くトレーニングのイ ベント。世界同時(同日)開催。

Slide 7

Slide 7 text

TDD のメリット ワンアクション (phpunit 実行 ) で、 一連の動作確認ができます。 ブラウザで所定のページを開いて動 作確認して、でも別のページが壊れ ていて ... 、のようなデバッグ作業が 格段に効率化できます。

Slide 8

Slide 8 text

テスト駆動開発の参考記事 WP-CLI+PHPUnit を使った WordPress プラグインのユニットテスト(1) https://firegoby.jp/archives/5498 WP-CLI+PHPUnit を使った WordPress プラグインのユニットテスト(2) https://firegoby.jp/archives/5511

Slide 9

Slide 9 text

環境が整っている前提で ... 仮想環境(べいぐらんと)を起動 $ vagrant up 仮想環境に ssh で入る $ vagrant ssh wordpress ディレクトリへ移動 $ cd /var/www/wordpress WP-CLI でプラグインのひな形を生成 $ wp scaffold plugin my-counter

Slide 10

Slide 10 text

自動生成されたフォルダ

Slide 11

Slide 11 text

PHPUnit 用の WordPress 環境準備 プラグインのディレクトリに移動 $ cd $(wp plugin path --dir my-counter) テスト用 WordPress 環境を作成 $ bash bin/install-wp-tests.sh wordpress_test root 'wordpress' localhost latest mysqladmin: CREATE DATABASE failed; error: 'Can't create database 'wordpress_test'; database exists' (テスト用DBはすでに作られている様子。)

Slide 12

Slide 12 text

PHPUnit を実行してみる

Slide 13

Slide 13 text

自動生成されたテストコード プラグインフォルダ内の test/test-sample.php assertTrue( true ); } }

Slide 14

Slide 14 text

テスト用のクラスを追加 $ touch tests/test-my-counter.php ショートコードを実行すると0が返る assertEquals('0', $count); } }

Slide 15

Slide 15 text

テストを実行 - 失敗 $ phpunit

Slide 16

Slide 16 text

shortcode の処理を実装 class MyCounter { public function __construct() { add_shortcode( 'my_counter', array( $this, 'mycounter_shortcode' )); } public function mycounter_shortcode($p) { return '0'; } }

Slide 17

Slide 17 text

テストを実行 - 成功 $ phpunit

Slide 18

Slide 18 text

プラグインを有効にして、

Slide 19

Slide 19 text

Widget に設置してみる

Slide 20

Slide 20 text

プラグインのテスト駆動開発 表示されない ...

Slide 21

Slide 21 text

Widget でショートコードを使う フィルターが必要でした。 class MyCounterTest extends WP_UnitTestCase { function test_my_counter_shortcode() { $count = do_shortcode( '[my_counter]' ); $this->assertEquals('0', $count); $this->assertTrue( has_filter('widget_text', 'do_shortcode') ); } }

Slide 22

Slide 22 text

Widget でショートコードを使う テスト実行。

Slide 23

Slide 23 text

Widget でショートコードを使う フィルターを追加。 class MyCounter { public function __construct() { add_shortcode( 'my_counter', array( $this, 'mycounter_shortcode' )); add_filter('widget_text', 'do_shortcode' ); } ...

Slide 24

Slide 24 text

Widget でショートコードを使う Widget に表示できた。

Slide 25

Slide 25 text

カウントアップ class MyCounterTest extends WP_UnitTestCase { ... function test_counter_increment() { $cnt0 = do_shortcode( '[my_counter]' ); $cnt1 = do_shortcode( '[my_counter]' ); $this->assertEquals( $cnt1, $cnt0 + 1 ); } ... カウントアップのテストコード追加。

Slide 26

Slide 26 text

カウントアップのテスト実行 未実装なのでエラー( 0 のまま)

Slide 27

Slide 27 text

カウントアップを実装 class MyCounter { ... public function mycounter_shortcode($p) { $count = get_option( 'my_counter' ) + 1; update_option( 'my_counter', $count ); return $count; } ... 今回は WordPress のオプション値を利用。

Slide 28

Slide 28 text

カウントアップのテスト実行 カウントアップできた。

Slide 29

Slide 29 text

続きはデモにて。

Slide 30

Slide 30 text

参考資料 Testing Added Hooks http://goo.gl/I2VySn 関数リファレンス /add_filter https://goo.gl/McBgYS