106
WordPressで行う 継続的インテグレーション入門編 -私がプラグイン開発・保守地獄から学んだこと- 2015.10.31 @WordCamp Tokyo 2015 WordPressで行うCI入門編 1

WordPressで行う継続的インテグレーション入門編

Embed Size (px)

Citation preview

Page 1: WordPressで行う継続的インテグレーション入門編

WordPressで行う継続的インテグレーション入門編

-私がプラグイン開発・保守地獄から学んだこと-

2015.10.31 @WordCamp Tokyo 2015 WordPressで行うCI入門編 1

Page 2: WordPressで行う継続的インテグレーション入門編

whoamiじこしょうかい

2015.10.31 @WordCamp Tokyo 2015 WordPressで行うCI入門編 2

Page 3: WordPressで行う継続的インテグレーション入門編

Toro_Unit占部 紘 (うらべ ひろし)

長野県松本市在住

Frontend Engineer / Plugin Developer / Web Designer

Github: @torounitTwitter: @Toro_UnitFacebook: fb.me/torounitBlog: http://www.torounit.com

2015.10.31 @WordCamp Tokyo 2015 WordPressで行うCI入門編 3

Page 5: WordPressで行う継続的インテグレーション入門編

WordPressとの関わり

2015.10.31 @WordCamp Tokyo 2015 WordPressで行うCI入門編 5

Page 6: WordPressで行う継続的インテグレーション入門編

WordPress 4.3 Core Contributer

4.4でも引き続きコアコントリビューターの予定

2015.10.31 @WordCamp Tokyo 2015 WordPressで行うCI入門編 6

Page 7: WordPressで行う継続的インテグレーション入門編

Other Project• Plugin Development

• WordCamp Kansai 2015 Speaker

Contribution

WP-CLI (v0.20.2) / VCCW / Some Plugin.

2015.10.31 @WordCamp Tokyo 2015 WordPressで行うCI入門編 7

Page 8: WordPressで行う継続的インテグレーション入門編

Plugins• Custom Post Type Permalinks

• Simple Post Type Permalinks

• Powerful Posts Per Page

• RS CSV Importer Media Add-On

• etc...

2015.10.31 @WordCamp Tokyo 2015 WordPressで行うCI入門編 8

Page 9: WordPressで行う継続的インテグレーション入門編

Custom Post Type Permalinks

2015.10.31 @WordCamp Tokyo 2015 WordPressで行うCI入門編 9

Page 10: WordPressで行う継続的インテグレーション入門編

主にこのプラグインの開発/保守の経験から学んだことをお話しします。

2015.10.31 @WordCamp Tokyo 2015 WordPressで行うCI入門編 10

Page 11: WordPressで行う継続的インテグレーション入門編

Custom Post Type Permalinks• カスタム投稿タイプのパーマリンクを管理画面から設定できるようにするプラグイン。

• 2011.11.02リリース。ちょうど丸4年!• Active install: 50,000+

• Downloads: 160,000+

2015.10.31 @WordCamp Tokyo 2015 WordPressで行うCI入門編 11

Page 12: WordPressで行う継続的インテグレーション入門編

実は、初めて作ったプラグイン。

2015.10.31 @WordCamp Tokyo 2015 WordPressで行うCI入門編 12

Page 13: WordPressで行う継続的インテグレーション入門編

プラグイン界のシンデレラボーイ!!

2015.10.31 @WordCamp Tokyo 2015 WordPressで行うCI入門編 13

Page 14: WordPressで行う継続的インテグレーション入門編

そんな4年前のToro_Unitはどんなだったか

2015.10.31 @WordCamp Tokyo 2015 WordPressで行うCI入門編 14

Page 15: WordPressで行う継続的インテグレーション入門編

• ==と===の違い?

• Class?• オブジェクト指向?• デザインパターン?• 副作用? 破壊的操作?• interfaceって何のために存在してるの?

2015.10.31 @WordCamp Tokyo 2015 WordPressで行うCI入門編 15

Page 16: WordPressで行う継続的インテグレーション入門編

つまりコピペプログラマースパゲッティなクソコードを毎日生産する日々

2015.10.31 @WordCamp Tokyo 2015 WordPressで行うCI入門編 16

Page 17: WordPressで行う継続的インテグレーション入門編

WordPressとかそういうレベルの問題じゃ無い。そもそもPHPのド基礎すらよくわかってない状態。

2015.10.31 @WordCamp Tokyo 2015 WordPressで行うCI入門編 17

Page 18: WordPressで行う継続的インテグレーション入門編

要望と言う名のおしかりを受ける始末

2015.10.31 @WordCamp Tokyo 2015 WordPressで行うCI入門編 18

Page 19: WordPressで行う継続的インテグレーション入門編

デバッグモードで検証しろ!Noticeでてる!エスケープしろ!

2015.10.31 @WordCamp Tokyo 2015 WordPressで行うCI入門編 19

Page 20: WordPressで行う継続的インテグレーション入門編

いろいろつらい!

2015.10.31 @WordCamp Tokyo 2015 WordPressで行うCI入門編 20

Page 21: WordPressで行う継続的インテグレーション入門編

しかし

2015.10.31 @WordCamp Tokyo 2015 WordPressで行うCI入門編 21

Page 22: WordPressで行う継続的インテグレーション入門編

なぜか信じられないペースでダウンロード数が伸び始める当時はWordPress3.2。たまたま時代の波に乗ってしまった。

2015.10.31 @WordCamp Tokyo 2015 WordPressで行うCI入門編 22

Page 23: WordPressで行う継続的インテグレーション入門編

次々やってくるバグレポートと要望今思えば地獄の始まり

2015.10.31 @WordCamp Tokyo 2015 WordPressで行うCI入門編 23

Page 24: WordPressで行う継続的インテグレーション入門編

• コメントのパーマリンクが動かない!• 添付ファイルのURLがおかしい!• カスタムタクソノミー使えるようにして!• カテゴリーに対応させて!• etc...

2015.10.31 @WordCamp Tokyo 2015 WordPressで行うCI入門編 24

Page 25: WordPressで行う継続的インテグレーション入門編

バグを直した!

2015.10.31 @WordCamp Tokyo 2015 WordPressで行うCI入門編 25

Page 26: WordPressで行う継続的インテグレーション入門編

(`・ω・´) シャキーン

2015.10.31 @WordCamp Tokyo 2015 WordPressで行うCI入門編 26

Page 27: WordPressで行う継続的インテグレーション入門編

と思ったら

2015.10.31 @WordCamp Tokyo 2015 WordPressで行うCI入門編 27

Page 28: WordPressで行う継続的インテグレーション入門編

別のところがバグって動かない!

2015.10.31 @WordCamp Tokyo 2015 WordPressで行うCI入門編 28

Page 29: WordPressで行う継続的インテグレーション入門編

Σ (゚Д゚;)

2015.10.31 @WordCamp Tokyo 2015 WordPressで行うCI入門編 29

Page 30: WordPressで行う継続的インテグレーション入門編

バグを直すとなぜかバグが増殖!

2015.10.31 @WordCamp Tokyo 2015 WordPressで行うCI入門編 30

Page 31: WordPressで行う継続的インテグレーション入門編

機能を追加してももちろんバグる!

2015.10.31 @WordCamp Tokyo 2015 WordPressで行うCI入門編 31

Page 32: WordPressで行う継続的インテグレーション入門編

まさに地獄!!!

2015.10.31 @WordCamp Tokyo 2015 WordPressで行うCI入門編 32

Page 33: WordPressで行う継続的インテグレーション入門編

そんな私の昔の開発手法1年半前くらいまで

2015.10.31 @WordCamp Tokyo 2015 WordPressで行うCI入門編 33

Page 34: WordPressで行う継続的インテグレーション入門編

1. コードを書く2. パーマリンクを更新3. ブラウザで何十ページのパターンにアクセスして確認

投稿ページ・アーカイブ・子ページ・コメントのパーマリンク・添付ファイル....etc.」x いろんな設定のカスタム投稿タイプとかタクソノミーとか...

2015.10.31 @WordCamp Tokyo 2015 WordPressで行うCI入門編 34

Page 35: WordPressで行う継続的インテグレーション入門編

開発時間の7割がブラウザでのテスト...

2015.10.31 @WordCamp Tokyo 2015 WordPressで行うCI入門編 35

Page 36: WordPressで行う継続的インテグレーション入門編

• そんなにまとまった開発の時間はとれない。• やりかけで放置して寝るとだいたい解らなくなってる。• 毎度毎度やってらんないので、たまにやると壊れてる。けど、原因不明。

• とりあえずロールバック。サヨナラしたコードは数知れず。

2015.10.31 @WordCamp Tokyo 2015 WordPressで行うCI入門編 36

Page 37: WordPressで行う継続的インテグレーション入門編

リリース後にバグが見つかり徹夜でバグフィックスすることも恒例行事

ごめんなさい。

2015.10.31 @WordCamp Tokyo 2015 WordPressで行うCI入門編 37

Page 38: WordPressで行う継続的インテグレーション入門編

こんなのやってられるか!!!いやほんとすみません

2015.10.31 @WordCamp Tokyo 2015 WordPressで行うCI入門編 38

Page 39: WordPressで行う継続的インテグレーション入門編

なんとかならんかね...毎回ごめんなさいしながらアップデートするのつらい

2015.10.31 @WordCamp Tokyo 2015 WordPressで行うCI入門編 39

Page 40: WordPressで行う継続的インテグレーション入門編

さてどうしよう。

2015.10.31 @WordCamp Tokyo 2015 WordPressで行うCI入門編 40

Page 41: WordPressで行う継続的インテグレーション入門編

ようやく本編

2015.10.31 @WordCamp Tokyo 2015 WordPressで行うCI入門編 41

Page 42: WordPressで行う継続的インテグレーション入門編

CI=継続的インテグレーションとは?

2015.10.31 @WordCamp Tokyo 2015 WordPressで行うCI入門編 42

Page 43: WordPressで行う継続的インテグレーション入門編

ソフトウェア作成時の品質改善や納期の短縮のための習慣のこと

2015.10.31 @WordCamp Tokyo 2015 WordPressで行うCI入門編 43

Page 44: WordPressで行う継続的インテグレーション入門編

具体的には...

• プログラムによるテスト• テスト駆動開発• テスト自動化• 自動デプロイ / ビルド自動化• etc...

2015.10.31 @WordCamp Tokyo 2015 WordPressで行うCI入門編 44

Page 45: WordPressで行う継続的インテグレーション入門編

プラグイン開発でやっていること• ブラウザ上でのテストをやめてプログラムでテスト• テスト駆動開発• Travis-CIでテストを自動化

2015.10.31 @WordCamp Tokyo 2015 WordPressで行うCI入門編 45

Page 46: WordPressで行う継続的インテグレーション入門編

これで地獄からおさらばしました!

2015.10.31 @WordCamp Tokyo 2015 WordPressで行うCI入門編 46

Page 47: WordPressで行う継続的インテグレーション入門編

1.WordPressでのテストコードの書き方

2015.10.31 @WordCamp Tokyo 2015 WordPressで行うCI入門編 47

Page 48: WordPressで行う継続的インテグレーション入門編

実例:カスタム投稿タイプの記事ページにアクセス出来ているかのテスト。

2015.10.31 @WordCamp Tokyo 2015 WordPressで行うCI入門編 48

Page 49: WordPressで行う継続的インテグレーション入門編

ブラウザでテストしていたこと1. 適当なカスタム投稿タイプを作成。2. 投稿を作成。3. アクセスして正しく投稿ページにアクセスできるかを確認。

(個別投稿ページにアクセスできているか、目的のページに到達できているか)

2015.10.31 @WordCamp Tokyo 2015 WordPressで行うCI入門編 49

Page 50: WordPressで行う継続的インテグレーション入門編

これをテストコードにするとこうなる

2015.10.31 @WordCamp Tokyo 2015 WordPressで行うCI入門編 50

Page 51: WordPressで行う継続的インテグレーション入門編

class SampleTest extends WP_UnitTestCase { public function test_permalink() { register_post_type('hoge'); /*カスタム投稿タイプhogeの投稿を作成。*/

$args = array( 'post_type' => 'hoge' ); $id = $this->factory->post->create( $args ); /*WordPressを投稿にアクセスした状態に*/

$this->go_to( get_permalink( $id ) ); //is_single(), is_singular()のみがtrueなら合格。 $this->assertQueryTrue( 'is_singular', 'is_single' ); //生成した記事のIDと、URLから調べたIDが一致するかどうか $post_id = url_to_postid( get_permalink( $id ) ); $this->assertEquals( $id, $post_id ); } }

2015.10.31 @WordCamp Tokyo 2015 WordPressで行うCI入門編 51

Page 52: WordPressで行う継続的インテグレーション入門編

細かい解説は後ほどしますが、基本的には、ブラウザでやっていたことをそのままコードとして記述していくだけ。

2015.10.31 @WordCamp Tokyo 2015 WordPressで行うCI入門編 52

Page 53: WordPressで行う継続的インテグレーション入門編

だまされたと思ってやってみるとそこまで難しくない!

2015.10.31 @WordCamp Tokyo 2015 WordPressで行うCI入門編 53

Page 54: WordPressで行う継続的インテグレーション入門編

確認だけで一日仕事だったものが...

2015.10.31 @WordCamp Tokyo 2015 WordPressで行うCI入門編 54

Page 55: WordPressで行う継続的インテグレーション入門編

30秒足らずで終了!!

2015.10.31 @WordCamp Tokyo 2015 WordPressで行うCI入門編 55

Page 56: WordPressで行う継続的インテグレーション入門編

革命起きた!

2015.10.31 @WordCamp Tokyo 2015 WordPressで行うCI入門編 56

Page 57: WordPressで行う継続的インテグレーション入門編

ちょっとやってみたくなってきた?

2015.10.31 @WordCamp Tokyo 2015 WordPressで行うCI入門編 57

Page 58: WordPressで行う継続的インテグレーション入門編

じゃぁどうやってはじめればいいの?

2015.10.31 @WordCamp Tokyo 2015 WordPressで行うCI入門編 58

Page 59: WordPressで行う継続的インテグレーション入門編

1-1.PHPUnit & WP_UnitTestCaseを使う!

2015.10.31 @WordCamp Tokyo 2015 WordPressで行うCI入門編 59

Page 60: WordPressで行う継続的インテグレーション入門編

PHPUnithttps://phpunit.de/• PHPの定番テストフレームワーク。WordPressの本体も

PHPUnitでテストしてる。• 日本語マニュアルが結構しっかりしてる。

https://phpunit.de/manual/3.7/ja/

2015.10.31 @WordCamp Tokyo 2015 WordPressで行うCI入門編 60

Page 61: WordPressで行う継続的インテグレーション入門編

アサーション

答え合わせメソッド。assertEquals($a, $b)だったら$aと$b

が一致したらOK、別のものならNG!とか。これがわかればテストがとりあえず書ける。

アノテーション

テストコードへのコメント。テストを分別したり、テストの環境を設定したり出来る。2015.10.31 @WordCamp Tokyo 2015 WordPressで行うCI入門編 61

Page 62: WordPressで行う継続的インテグレーション入門編

この2つがわかればなんとかなる!マニュアル見ればだいたい書いてある。

2015.10.31 @WordCamp Tokyo 2015 WordPressで行うCI入門編 62

Page 63: WordPressで行う継続的インテグレーション入門編

テストの書き方の例function add( $x, $y ) { return $x + $y;}

class SampleTest extends PHPUnit_Framework_TestCase { public function test_add() { $answer = add( 1, 2 ); $this->assertEquals( $answer, 3 ); }}

2015.10.31 @WordCamp Tokyo 2015 WordPressで行うCI入門編 63

Page 64: WordPressで行う継続的インテグレーション入門編

WP_UnitTestCaseとは...WordPressのコアで使われているテストコード。PHPUnitにWordPress用の便利機能を多数搭載したもの。• 記事・カテゴリー・ユーザー・マルチサイトのブログなどを簡単に作れる!しかもダミーデータも突っ込んでくれる!

• WordPressの用のアサーション等もあって便利!

2015.10.31 @WordCamp Tokyo 2015 WordPressで行うCI入門編 64

Page 65: WordPressで行う継続的インテグレーション入門編

さっきのテストコードをもう一度

2015.10.31 @WordCamp Tokyo 2015 WordPressで行うCI入門編 65

Page 66: WordPressで行う継続的インテグレーション入門編

class SampleTest extends WP_UnitTestCase { public function test_permalink() { register_post_type( 'hoge' ); /*カスタム投稿タイプhogeの投稿を作成。*/

$args = array( 'post_type' => 'hoge' ); $id = $this->factory->post->create( $args ); /*WordPressを投稿にアクセスした状態に*/

$this->go_to( get_permalink( $id ) ); //is_single(), is_singular()のみがtrueなら合格。 $this->assertQueryTrue( 'is_singular', 'is_single' ); //生成した記事のIDと、URLから調べたIDが一致するかどうか $post_id = url_to_postid( get_permalink( $id ) ); $this->assertEquals( $id, $post_id ); } }

2015.10.31 @WordCamp Tokyo 2015 WordPressで行うCI入門編 66

Page 67: WordPressで行う継続的インテグレーション入門編

例:ショートコードのテスト

2015.10.31 @WordCamp Tokyo 2015 WordPressで行うCI入門編 67

Page 68: WordPressで行う継続的インテグレーション入門編

ショートコードの仕様• [greeting language="japanese"] で こんにちは と 表示

• [greeting language="english"] で hello と表示http://www.slideshare.net/inc2734/word-campkansai2015-ci

2015.10.31 @WordCamp Tokyo 2015 WordPressで行うCI入門編 68

Page 69: WordPressで行う継続的インテグレーション入門編

class SampleTest extends WP_UnitTestCase { public function test_languageがjapaneseならこんにちは() {

$greeting = do_shortcode( '[greeting language="japanese"]' ); $this->assertEquals( 'こんにちは', $greeting );

} public function test_languageがenglishならhello() {

$greeting = do_shortcode( '[greeting language="english"]' ); $this->assertEquals( 'hello', $greeting ); }}

2015.10.31 @WordCamp Tokyo 2015 WordPressで行うCI入門編 69

Page 70: WordPressで行う継続的インテグレーション入門編

意外に簡単!!!ですよね...?

2015.10.31 @WordCamp Tokyo 2015 WordPressで行うCI入門編 70

Page 71: WordPressで行う継続的インテグレーション入門編

でも

2015.10.31 @WordCamp Tokyo 2015 WordPressで行うCI入門編 71

Page 72: WordPressで行う継続的インテグレーション入門編

PHPUnitの設定とかちょっとよくわからない。

2015.10.31 @WordCamp Tokyo 2015 WordPressで行うCI入門編 72

Page 73: WordPressで行う継続的インテグレーション入門編

WP-CLI使え!!!

2015.10.31 @WordCamp Tokyo 2015 WordPressで行うCI入門編 73

Page 74: WordPressで行う継続的インテグレーション入門編

WP-CLIでプラグインのひな形を作ると$ wp scaffold plugin <プラグイン名>

2015.10.31 @WordCamp Tokyo 2015 WordPressで行うCI入門編 74

Page 75: WordPressで行う継続的インテグレーション入門編

2015.10.31 @WordCamp Tokyo 2015 WordPressで行うCI入門編 75

Page 76: WordPressで行う継続的インテグレーション入門編

テストに必要なものが準備済み!

2015.10.31 @WordCamp Tokyo 2015 WordPressで行うCI入門編 76

Page 77: WordPressで行う継続的インテグレーション入門編

プラグインのディレクトリに移動して、phpunitを実行するだけ。$ cd ./wp-content/plugins/plugin-name/$ phpunit //テスト実行!

2015.10.31 @WordCamp Tokyo 2015 WordPressで行うCI入門編 77

Page 78: WordPressで行う継続的インテグレーション入門編

既存のプラグインにテストだけ生成も出来る!

$ wp scaffold plugin-tests <プラグイン名>

2015.10.31 @WordCamp Tokyo 2015 WordPressで行うCI入門編 78

Page 79: WordPressで行う継続的インテグレーション入門編

でも。。。

2015.10.31 @WordCamp Tokyo 2015 WordPressで行うCI入門編 79

Page 80: WordPressで行う継続的インテグレーション入門編

• WP-CLIとかPHPUnitとかインストール面倒...

• ローカルでWordPressの動作環境も立てなきゃ...

• 特にWindowsだとだるい!

2015.10.31 @WordCamp Tokyo 2015 WordPressで行うCI入門編 80

Page 81: WordPressで行う継続的インテグレーション入門編

VCCW使おう!!

2015.10.31 @WordCamp Tokyo 2015 WordPressで行うCI入門編 81

Page 82: WordPressで行う継続的インテグレーション入門編

VCCW

• http://vccw.cc

• 宮内さんが開発してる Vagrant環境。立ち上げるだけで、WordPressがインストール済みの仮想マシンが手に入る。最近俺も巻き込まれた。

• WP-CLIもPHPUnitも全部入り!

• プラグイン開発に必要な環境がすべて手に入る!

2015.10.31 @WordCamp Tokyo 2015 WordPressで行うCI入門編 82

Page 83: WordPressで行う継続的インテグレーション入門編

1-2.WordPressの本体のテストもよも

2015.10.31 @WordCamp Tokyo 2015 WordPressで行うCI入門編 83

Page 84: WordPressで行う継続的インテグレーション入門編

• 実際に動くものを読んでいくのが一番わかりやすい。• 自分のプラグインの扱っている分野のテストコードは自分のプラグインにも取り入れやすい。半分くらいパクってます。

• 一度やってみると、だんだん理解が深まってきて他のテストも読み書き出来るようになってくるよ!!!

2015.10.31 @WordCamp Tokyo 2015 WordPressで行うCI入門編 84

Page 85: WordPressで行う継続的インテグレーション入門編

テストの書き方が何となく解ってくるはず! いろいろ書いてみよう!

とりあえず自分の作ったプラグインとかにテストを足してみるとか、簡単なプラグインを作ってみるとか。

2015.10.31 @WordCamp Tokyo 2015 WordPressで行うCI入門編 85

Page 86: WordPressで行う継続的インテグレーション入門編

2.テスト駆動開発するべし

2015.10.31 @WordCamp Tokyo 2015 WordPressで行うCI入門編 86

Page 87: WordPressで行う継続的インテグレーション入門編

そもそもテストとは。プログラムが正しい動作をするかどうか確認するためのもの。言い換えると、プログラムが仕様に適合した動作を行うかどうかのチェック。

ちゃんと書けば、生きた仕様書になる。• 英語読めなくてもPHP読めれば仕様が解る!!!

2015.10.31 @WordCamp Tokyo 2015 WordPressで行うCI入門編 87

Page 88: WordPressで行う継続的インテグレーション入門編

個人的な理解• 仕様 = 問題文• 実装 = 回答• テスト = 答え合わせ

2015.10.31 @WordCamp Tokyo 2015 WordPressで行うCI入門編 88

Page 89: WordPressで行う継続的インテグレーション入門編

回答に合わせて問題文を決めたらダメですよね。あくまで理想論ですよ。理想論。(震え声)

2015.10.31 @WordCamp Tokyo 2015 WordPressで行うCI入門編 89

Page 90: WordPressで行う継続的インテグレーション入門編

テスト駆動開発をするメリット

2015.10.31 @WordCamp Tokyo 2015 WordPressで行うCI入門編 90

Page 91: WordPressで行う継続的インテグレーション入門編

• コードが変わってもテストが通れば、最低限の動作保証になる。

• テストを後付けすると、実装に合わせたテストを書きがち。• ノリでコードを書き始めるより、ノリでテストを書く方が、仕様が定まる。設計をしっかりやるようになる。自分のやりたいこと、作りたいものがはっきり定まる。

• 仕様書を書くよりは、テストコードを書く方が絶対楽しい。

2015.10.31 @WordCamp Tokyo 2015 WordPressで行うCI入門編 91

Page 92: WordPressで行う継続的インテグレーション入門編

3.テスト自動化するべし

2015.10.31 @WordCamp Tokyo 2015 WordPressで行うCI入門編 92

Page 93: WordPressで行う継続的インテグレーション入門編

ここまで散々テストやれとか言ってきたけど

2015.10.31 @WordCamp Tokyo 2015 WordPressで行うCI入門編 93

Page 94: WordPressで行う継続的インテグレーション入門編

毎度毎度実行するのがかったるい

2015.10.31 @WordCamp Tokyo 2015 WordPressで行うCI入門編 94

Page 95: WordPressで行う継続的インテグレーション入門編

めんどくさいものは大抵やり忘れる

2015.10.31 @WordCamp Tokyo 2015 WordPressで行うCI入門編 95

Page 96: WordPressで行う継続的インテグレーション入門編

自動化しよう!• Githubで折角作ってるんだから、小幅な修正はブラウザからやりたいときもある。

• Pull Request貰うのはとてもありがたいけど、いちいちクローンしてテストとかするのかったるい。

コミットを監視してテストを自動実行してくれるサーバー(CIサーバー)欲しい!!2015.10.31 @WordCamp Tokyo 2015 WordPressで行うCI入門編 96

Page 97: WordPressで行う継続的インテグレーション入門編

Travis CIを使おう!

2015.10.31 @WordCamp Tokyo 2015 WordPressで行うCI入門編 97

Page 98: WordPressで行う継続的インテグレーション入門編

Travis CIとは• Gitのコミットを監視して、設定ファイル(.travis.yml)に書かれている内容でテストやビルドやデプロイなどを実行できるWEBサービス。

• Githubとの連携が簡単! プルリクエストにも実行してくれるしその結果もGithubの画面で見れる! しかもOSSならタダ!

• 類似サービスにCircle-CIってのもある。

2015.10.31 @WordCamp Tokyo 2015 WordPressで行うCI入門編 98

Page 99: WordPressで行う継続的インテグレーション入門編

Travis CIでやるメリット• WP-CLIで.travis.ymlのひな形も生成してくれる。• 複数の環境でのテストが簡単に実行できる。WordPressの4.0以降のバージョンでそれぞれPHP5.3以上の全てのバージョンで実行とかやれる。

• HHVMも選択できる。

2015.10.31 @WordCamp Tokyo 2015 WordPressで行うCI入門編 99

Page 100: WordPressで行う継続的インテグレーション入門編

まとめ

2015.10.31 @WordCamp Tokyo 2015 WordPressで行うCI入門編 100

Page 101: WordPressで行う継続的インテグレーション入門編

• WordPressのテストは、PHPUnitとWordPressのコアのテストケースを使うのが便利。

• WP-CLIでひな形作ればだいたいOK.

• 環境構築面倒ならVCCW使っとけば良いよ!

• テスト駆動開発するべし!

• Travis CIはホントに便利!

2015.10.31 @WordCamp Tokyo 2015 WordPressで行うCI入門編 101

Page 102: WordPressで行う継続的インテグレーション入門編

とりあえず、少しずつ始めてみよう。

2015.10.31 @WordCamp Tokyo 2015 WordPressで行うCI入門編 102

Page 103: WordPressで行う継続的インテグレーション入門編

拙くてもテストが無いよりはマシ!

2015.10.31 @WordCamp Tokyo 2015 WordPressで行うCI入門編 103

Page 104: WordPressで行う継続的インテグレーション入門編

よりよい WordPress Lifeを!

2015.10.31 @WordCamp Tokyo 2015 WordPressで行うCI入門編 104

Page 105: WordPressで行う継続的インテグレーション入門編

参考資料• WordPressで行う継続的インテグレーションのススメ

https://www.slideshare.net/horike37/wordpress-50908456

• WordCamp Kansai 2015 CI ハンズオンhttp://www.slideshare.net/inc2734/word-campkansai2015-ci

2015.10.31 @WordCamp Tokyo 2015 WordPressで行うCI入門編 105

Page 106: WordPressで行う継続的インテグレーション入門編

おわり

2015.10.31 @WordCamp Tokyo 2015 WordPressで行うCI入門編 106