WordPressで行う継続的インテグレーションのススメ

67
WordPress × CI WordPressで行う継続的インテグレーションのススメ

Transcript of WordPressで行う継続的インテグレーションのススメ

WordPress × CIWordPressで行う継続的インテグレーションのススメ

自己紹介

キタジマタカシ

長崎のフリーランスWebデザイナー/プログラマー。

Plugin:「MW WP Form」 「Smart Custom Fields」

Theme :「Kotetsu」「Habakiri」

Toro_Unit(占部 紘)

長野県ではたらくフロントエンドエンジニア。

Plugin: 「Custom Post Type Permalinks」 「 Simple Post Type Permalinks」

堀家隆宏

Engineer at Digitalcube Co. Ltd.

4.2 Core Contributor

Plugin:「Trust Form」 「Simpe GA Ranking」

目標

CIを回すメリットを理解してもらう

WordPressでCIを行う方法を ハンズオンを通して持ち帰ってもらう

従来の開発における問題

コードを書く

ブラウザでテスト

コードを書く

エラーが発生

コードを見なおして修正

完成

WordPress.orgにあげて公開

ここから先は プラグインメンテの長い旅路

追加開発やバグ修正を 繰り返した結果…

バージョンを上げるたびに 複雑になっていくコード

忘れてしまう仕様

こんな機能つくったっけ

そしていつの日か…

あなたのプラグイン、バージョンあげたらバグったわよ!!

申し訳ございません!!

こうならないためにどうするべきか?

テスト仕様書をつくる

テスト仕様書をつくる

ドキュメント書くのは大変。 書きたくない。メンテ出来ない

継続的インテグレーション

“アプリケーション開発において品質改善や納期の短縮のための取り組みを 継続して実行していくこと”

開発

テスト

Git、Svnへの反映

デプロイ

開発

テスト

Git、Svnへの反映

デプロイ

開発

この流れを 自動化する ことが重要

テスト駆動開発

“最初にテストを書き(これをテストファーストと言う)、そのテストが動作する必要最低限な実装をとりあえず行った後、コードを洗練させる”

(wikipedia引用)

https://phpunit.de/

PHPUnit

PHPUnit

・PHPのテスティングフレームワーク

・ユニットテストを記述できる

・多機能で老舗

テストコードを書く

プラグインのコードを書く

phpunitコマンドでテストを実行

PHPUnitを使った開発の流れ

テストケース

アサーション

テストの期待値と実際の結果を比較してテストの成否を判定するメソッド

アサーション

・第1引数があるべき値・第2引数が実際の実行結果

アサーション

https://phpunit.de/manual/current/ja/appendixes.annotations.html

アノテーション

PHPのコメントの形式でテスト実行時のオプションを記述

アノテーション

・「@アノテーション名 引数」の形式で書く・@afterだとテストケースクラス内の各テストメソッドを実行した後に呼ぶメソッドを指定

アノテーション

https://phpunit.de/manual/current/ja/appendixes.annotations.html

WordPressで PHPUnitを使う

WP-CLI

wp scaffold plugin <プラグイン名>

自動でテストに対応した構成を作る

WP_UnitTestCaseというクラスを継承

テストの例

タイトルがHello!の投稿を作成

投稿のタイトルがHello!が返るかテスト

テストの例

[hello_world]というショートコードを実行

ショートコードの実行結果を検証

テストの例

テストの前にパーマリンクを設定

・go_toメソッドで/feedヘアクセス・is_feedでtrueが返るか検証

Test as a Document

Test as a Document

テストコードをメンテすることで同時にドキュメントにもなる

・PHPUnitによるテストを継続的に実施することで品質が担保される

・ドキュメントの代わりにもなるので仕様を忘れない

Travis CI

https://travis-ci.org/

Travis CI

・GitHubのアカウントがあれば使用可能なCIサービス

・GitHubへのpush時にhookしてテストを実行

・テストの設定を.travis.ymlに記載

.travis.yml

複数のPHP及びWordPressのバージョンでテストが可能

実行結果

実行結果

テストを実行して通ってますよという証

GitHub上にbadgeを追加

・pushのタイミングでテストを通すことが担保できる

・PHP及びWordPressの複数バージョンでの自動テスト

・テストして品質が担保されていることをGitHub上に記載できる

Travis CIのメリット

デプロイの自動化

通常のデプロイ

サーバへファイルのアップ

通常のデプロイ

サーバへファイルのアップ

データベースの置換

通常のデプロイの問題点

・手作業による作業の煩雑さ

・データベースの置換で心が折れる

WordMove

https://github.com/welaika/wordmove

WordMove

・Rubyで作られたWordPress専用のデプロイツール

・DB内のURLをステージングと本番で自動で置換

・Movefileというファイルにデプロイの情報を記述

Movefile

続きはハンズオンで!