Slide 1

Slide 1 text

$BLF1)1+FOLJOT ʹΑΔΞδϟΠϧ։ൃ 2012/11/3 #phpmatsuri Ryutaro YOSHIBA

Slide 2

Slide 2 text

٢Ӌཾଠ࿠ Ryutaro  YOSHIBA アジャイルコーチ Web: http://www.ryuzee.com     Twitter:  @ryuzee 認定スクラムプロフェッショナル 認定スクラムマスター 認定スクラムプロダクトオーナー Microsoft  MVP  for  Visual  Studio  ALM

Slide 3

Slide 3 text

No content

Slide 4

Slide 4 text

No content

Slide 5

Slide 5 text

SSccrruumm BBoooott CCaammpp

Slide 6

Slide 6 text

No content

Slide 7

Slide 7 text

http://bit.ly/LtunLe 2013/1/15-­‐16  at  Akihabara  UDX     Scrum  Alliance   Regional  Gathering  Tokyo  2013  

Slide 8

Slide 8 text

ΑΖ͘͠ ͓ئ͍͠·͢

Slide 9

Slide 9 text

εϥΠυ͸ޙͰެ։͠ ·͢ͷͰɺஞ࣍ϝϞΛ औΔͷ͸ແҙຯͰ͢ɻ

Slide 10

Slide 10 text

໿εϥΠυ͋Δ ͷͰ-5ฒʹͿͬͱ͹ ͍͖ͯ͠·͢Ͷʜ

Slide 11

Slide 11 text

1.なぜAAggiillee開発か

Slide 12

Slide 12 text

No content

Slide 13

Slide 13 text

顧客が説明した要件 顧客が本当に必要 だった物

Slide 14

Slide 14 text

ैདྷܕͷ։ൃϞσϧ 要件定義 受⼊入テスト 基本設計 総合テスト 詳細設計 結合テスト 実装・単体テスト V字モデル ͕͔͔࣌ؒΓ͗ͯ͢ɺग़དྷ ͨࠒʹ͸ཁٻ͕มԽɻͦ΋ ͦ΋ཁ͕͍݅͋ͬͯͳ͍͜ ͱ͕͜͜Ͱ෼͔Δ

Slide 15

Slide 15 text

ैདྷͷ΍ΓํͰ͋Γ͕ͪͳ࿩ 要件定義は順調です ○○設計は順調です 開発は遅れてますが、挽回可能です 結合試験で重⼤大な問題が出ています 受⼊入試験でニーズ不不⼀一致が判明 多くのリスクが後半に顕在化 http://www.flickr.com/photos/kwazar/2289418010/ リリースできません。てへっ

Slide 16

Slide 16 text

付加価値を 高めない 各種現象や 結果を ムダ と呼ぶ

Slide 17

Slide 17 text

ü 作り過ぎのムダ ü 手待ちのムダ ü 運搬のムダ ü 加工のムダ ü 在庫のムダ ü 動作のムダ ü 不良をつくるムダ

Slide 18

Slide 18 text

γεςϜͷػೳͷར༻ׂ߹ 4455 %% 1199 %% 1166 %% 1133 %% 77 %% Standishの2000年年の調査より   いつも使う よく使う たまに使う ほとんど使わない まったく使わない

Slide 19

Slide 19 text

6644%% の機能は、使われない http://bit.ly/olku51

Slide 20

Slide 20 text

ΞδϟΠϧϚχϑΣετ 11..  プロセスやツールより人と人同士の相互 作用を重視する。 22..  包括的なドキュメントより動作するソフ トウェアを重視する。 33..  契約上の交渉よりも顧客との協調を重視 する。 44..  計画に従うことよりも変化に対応する ことを重視する。 顧客満足を最優先し、 価値のあるソフトウェアを 早く継続的に提供します。

Slide 21

Slide 21 text

マーケットに製品 を早期に投入�して 投資を回収し利益 に結びつける必要 性がある

Slide 22

Slide 22 text

AAggiilleeな開発 してますか? h-p://bit.ly/shZMnK

Slide 23

Slide 23 text

ձ৔ௐࠪ •  全員起⽴立立してください •  ユニットテストを書いていない⽅方は着席 •  結合テストを⾃自動化していない⽅方は着席 •  継続的インテグレーションサーバを使っていな い⽅方は着席 •  デプロイを⾃自動化していない⽅方は着席 •  環境構築を⾃自動化していない⽅方は着席 最後まで起立されている方は 帰って大丈夫ですw

Slide 24

Slide 24 text

http://bit.ly/vPmiFJ 一日にしてならず

Slide 25

Slide 25 text

http://bit.ly/vj0b0v NNoo SSiillvveerr BBuulllleett† 

Slide 26

Slide 26 text

http://bit.ly/sygcE9 自分たちのプロセス は自分たちで進化さ せるしかない!

Slide 27

Slide 27 text

製品そのものを AAggiilleeな状態に 保つ

Slide 28

Slide 28 text

技術的負債を 少なく保つ

Slide 29

Slide 29 text

2.SSccrruummとは

Slide 30

Slide 30 text

4DSVNͱ͸ʁ 可能な限り価値の高いプロダク トを生産的かつ創造的に届ける ためのもの

Slide 31

Slide 31 text

野中郁次郎郎⽒氏 ジェフ・ サザーランド⽒氏

Slide 32

Slide 32 text

hhttttpp:://// wwwwww..ssccrruumm..oorrgg// ssccrruummgguuiiddeess// 参考リソース

Slide 33

Slide 33 text

複雑で変化の激しい 問題に対応するための 仕事の進め方

Slide 34

Slide 34 text

プロダクトバックログ 製品の機能をストーリー形式で記載 プロダクトオーナーが優先順位を付け、プラ ンニングポーカーで相対⾒見見積もり。 項⽬目の追加はいつでも⾃自由だが実施有無や優 先順位はPOが決める。 チーム  (6±3⼈人) プロダクトの開発を⾏行行う。 製品の成功に向けて最⼤大限 の努⼒力力をコミットする スクラムマスター スクラムプロセスがうまく いくようにする。 外部からチームを守る プロダクトオーナー 製品に対して責任をもち機能 に優先順位を付ける ステークホルダー 製品の利利⽤用者、出資者、管理理職 などの利利害関係者。鶏と称す スプリントバックログ そのスプリント期間中に⾏行行う タスクのリスト スプリント 最⼤大4週間までのタイムボックス 各スプリントの⻑⾧長さは同⼀一。この間は外部 からの変更更を受け⼊入れない スプリントレビュー スプリント中の成果である 動作するソフトウェアをデモ する レトロスペクティブ スプリントの中での改善事項 を話合い次に繋げる 複 数 回 ス プ リ ン ト を 繰 り 返 す 出荷可能な 製品の増分 スプリント計画会議 プロダクトバックログを再度度分析・評価し、 そのスプリントで開発するプロダクトバック ログアイテムを選択する。また選択した項⽬目 をタスクにばらす 完了了の定義 何をもって「完了了」とするかを 定義したリスト 毎⽇日の繰り返し デイリースクラム 毎⽇日チームが以下の3つの質問に答える ・昨⽇日やったこと ・今⽇日やること ・困っていること バーンダウンチャート スプリントタスクの「推定残り時間」を 更更新してグラフにプロットする タスク 時間で⾒見見 積もり

Slide 35

Slide 35 text

ಉ͡ϖʔεͰ 正 #1 #2 #3 #N #1 #2 #3 #N 誤

Slide 36

Slide 36 text

େࣄͳ΋ͷ͸ઌʹʂ 欲しいものを リストにして 順位をつける。 順位は状況に よって変わる。 1番⽬目にほしい 2番⽬目にほしい 3番⽬目にほしい 4番⽬目にほしい 5番⽬目にほしい 呍 呍 呍 99番⽬目にほしい 100番⽬目にほしい

Slide 37

Slide 37 text

ग़ՙՄೳʁ 部品だけでは出荷できない 小さくても使えるものを作る

Slide 38

Slide 38 text

ग़ՙՄೳʁ ここまでできれば 終わりだと思って たんだけど… これもあれもでき てないじゃない?

Slide 39

Slide 39 text

ϞϊΛ࡞Δ http://bit.ly/N4I8LV チームで進める

Slide 40

Slide 40 text

੒Ռ෺ͷසൟͳ֬ೝ 1番⽬目にほしい 2番⽬目にほしい 3番⽬目にほしい 4番⽬目にほしい 5番⽬目にほしい 呍 呍 呍 99番⽬目にほしい 100番⽬目にほしい よし頼んだ通りなのでOKです。 完了了だ! あれ、ここクリックすると遷移先 が違うね。これは未完了了 あ、こうなるのか。頼んだ通りだ から完了了だけど、次のスプリント で機能追加しようか! この感じだと、秋ごろリ リースかな。次のスプリ ントはこの内容でどう?

Slide 41

Slide 41 text

ϑΟʔυόοΫϧʔϓ 短いスプリント単位で 頻繁に確認と調整を行い 製品をよりよくする もちろん仕事の やり方ももっと うまくできるはず

Slide 42

Slide 42 text

܁Γฦ͢ʜ タイムボックスを繰り返して ü PPOOがほしいものから順に ü 出荷可能な製品を届け続ける ü うまく届けられるように改�善 し続ける #1 #2 #3 #N

Slide 43

Slide 43 text

SSccrruummで技術面が大事ではな いなんて一言もいってない

Slide 44

Slide 44 text

ڞ௨ཧղ 完了の定義を作り、何をもっ て出荷可能かを定める。 コード レビュー チェックイン ユニット テスト カバレージ ドキュメント セキュリティ 性能 デプロイ 技術面も当然大事 →XXPPと組み合わせる などなど

Slide 45

Slide 45 text

3.XXPPとテスト自動化

Slide 46

Slide 46 text

91rݸͷϓϥΫςΟε 反復 メタファー 作業空間 ふりかえり テスト駆動開発 ペアプロ リファクタリング コードの   共同所有 継続的インテグ レーション YAGNI 責任 擁護 四半期毎の   見直し ミラー 持続可能な   ペース ストーリー作成 リリース計画 受け入れテスト 短期リリース

Slide 47

Slide 47 text

h-p://bit.ly/QqTATG Kent  Beck

Slide 48

Slide 48 text

ITアーキテクト「機能テストの⾃自動化について考える」   より引⽤用 http://www.itarchitect.jp/print/?menu3=24601 テスト自動化の損益分岐点 は相当早期にある感覚

Slide 49

Slide 49 text

4DSVNʴ91 ü  Scrumではフレームワークの定義のみで、テスト ⾃自動化については触れられていない.しかしアジャ イル開発においてはテスト⾃自動化は必須 ⼩小規模リリー スのたびに⼿手 動でテストす るとコード ベースが⼤大き くなるにつれ てテストコス トが膨らむ ⾃自動化しないとソフトウェア規模に応じて、テスト⼯工数の占め る割合が増加してき価値への投資が減少する アジャイルかウォーターフォールかという話では なく、現代のソフトウェアのライフサイクルを考 慮すると、テスト自動化は当然の流れと言える

Slide 50

Slide 50 text

デプロイするたびに人手 で全体をテストするのは 無理 http://bit.ly/shZMnK

Slide 51

Slide 51 text

テ ス ト し て い な い も の を 目 を 瞑 っ て デ プ ロ イ し て は い け な い http://bit.ly/rAOG9h

Slide 52

Slide 52 text

清水の舞台から 飛び降りない http://bit.ly/tnB8i0

Slide 53

Slide 53 text

ΞδϟΠϧͰͷ඼࣭ͷ࡞Γ͜Έ 4DSVNͷ৔߹ Cancel Gift  wrap Return スプリント 2~∼4週間 返品 スプリントゴール スプリント バックログ 出荷可能な製品の 積み上げ プロダクトバックログ クーポン ギフト包装 クーポン キャンセル 24時間 単体テスト、結合テスト、 受け⼊入れテストがスプリン ト単位(もしくはリリース単 位)で⾏行行われる.

Slide 54

Slide 54 text

【⾃自動と⼿手動】 機能テスト ストーリーテスト プロトタイプ シミュレーション 【⼿手動】※1 探索索的テスト シナリオテスト ユーザビリティテスト ユーザー受⼊入テスト アルファ版、ベータ版 【⾃自動化】 単体テスト コンポーネントテスト 【ツール】 パフォーマンステスト 負荷テスト セキュリティテスト 第1象限 第2象限 第3象限 第4象限 技術⾯面(技術的品質) ビジネス⾯面(ビジネス的品質) チ ー ム を ⽀支 援 製 品 を 批 評 ςετͷ৅ݶ ※1  ATDD等では⾃自動化

Slide 55

Slide 55 text

【⾃自動と⼿手動】 機能テスト ストーリーテスト プロトタイプ シミュレーション 【⼿手動】 探索索的テスト シナリオテスト ユーザビリティテスト ユーザー受⼊入テスト アルファ版、ベータ版 【⾃自動化】 単体テスト コンポーネントテスト 【ツール】 パフォーマンステスト 負荷テスト セキュリティテスト 第1象限 第2象限 第3象限 第4象限 技術⾯面(技術的品質) ビジネス⾯面(ビジネス的品質) チ ー ム を ⽀支 援 製 品 を 批 評 πʔϧɾख๏ͷϚοϐϯά ྫ TDD PHPUnit PMD,  CPD  … Jmeter WebScarab RatProxy  … Selenium Behat RobotFramework… CI推奨 CI推奨 CI必須 ⼀一部CI可能

Slide 56

Slide 56 text

ςετࣗಈԽͷਐΊํ プロダクトバックログ テスト⾃自動化バックログ スプリント バックログ レガシーコードにおい て、製品コードの開発 をとめて自動化のみへ 投資するのは現実的に 難しいので、投資割合 をきめて、予めバック ログに組み込むことが 望ましい

Slide 57

Slide 57 text

໰୊मਖ਼ʹ͔͔Δ࣌ؒ フェーズ 修正までの時間 要求や設計 5分 コードやユニットテスト 15分 結合テストやシステムテスト 1時間 ベータテスト 2時間 リリース後 1⽇日

Slide 58

Slide 58 text

1)16OJUԽ •  〜~CakePHP  1.3 SimpleTest •  CakePHP  2〜~          PHPUnit •  デファクトのライブラリへ変更更 •  テストを作りやすい •  xdebugとの連携が容易易でCoverageの取得がし やすい •  ̶—log-‐‑‒junitオプションによる結果のXML出⼒力力が 可能でJenkinsと連携しやすい

Slide 59

Slide 59 text

#BLFͰςετϑΝΠϧࣗಈੜ੒

Slide 60

Slide 60 text

h-p://www.flickr.com/photos/clintjcl/4298588359 #BLFΛపఈతʹར༻͠·͘Δ

Slide 61

Slide 61 text

ςετͷྫ 他の箇所はbakeコマ ンドによる⾃自動⽣生成。 実際のテストの記述に 集中できる

Slide 62

Slide 62 text

ςετΛબ୒࣮ͯ͠ߦ

Slide 63

Slide 63 text

·ͱΊͯςετΛ࣮ߦ ⼀一括実⾏行行⽤用のテストクラスを作成する

Slide 64

Slide 64 text

·ͱΊͯςετΛ࣮ߦ テストを記述するときに@groupを使えばさらに便便利利

Slide 65

Slide 65 text

1)16OJU༻ઃఆϑΝΠϧͷར༻ <filter>            lib        app/Test        app/Vendor        app/Lib     filter>

Slide 66

Slide 66 text

ςετ͠΍͘͢࡞Δඞཁ h-p://www.flickr.com/photos/spackletoe/90811910/

Slide 67

Slide 67 text

² ςετͷ࣮ߦ࣌ؒΛ୹͘ɺґଘؔ܎Λগͳ͘ ² ࣗ৴ͷͳ͍ՕॴΛςετ ² ໰୊͸࣮૷Օॴʹ͍ۙͱ͜ΖͰݟ͚ͭΔ ² Ϟσϧɺϔϧύʔɺίϯϙʔωϯτ୯ҐͰͷς ετΛॻ͘ ² ίϯτϩʔϥʔͷςετΛ୔ࢁॻ͔͟ΔΛಘͳ ͍ͷ͸ɺ'BU$POUSPMMFS΍ີ݁߹ͷূ ² ͦ͏ͳΔલʹϖΞϓϩɺίʔυϨϏϡʔɺ5%%ɺ ϦϑΝΫλϦϯά

Slide 68

Slide 68 text

h-p://www.flickr.com/photos/Omothymorgan/75593157/ खൈ͖ͷ'JYUVSF͸ͬ͠΃ฦ͋͠Γ app.user   app.user2   app.user3   app.user4   app.user_test_foo   app.user_test_bar   app.role   app.role2   app.role_test_foo_and_bar   app.group   app.group2   …….

Slide 69

Slide 69 text

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

Slide 70

Slide 70 text

No content

Slide 71

Slide 71 text

ܧଓతΠϯςάϨʔγϣϯ

Slide 72

Slide 72 text

http://bit.ly/soiCFy 継続的インテグ レーションの導入� と利用促進の7ス テップ

Slide 73

Slide 73 text

1 ビルドサーバを 用意する http://bit.ly/rVAW90 ˗࢒ΓϞϊͷ͠ΐ΅͍΋ͷ͸࢖͏ͳ

Slide 74

Slide 74 text

http://bit.ly/rubXiA 2 夜間ビルドを 行う ˗ෆे෼͕ͩͳ͍ΑΓ͸Ϛγ

Slide 75

Slide 75 text

3 夜間ビルド+ コミット時の ユニットテスト http://bit.ly/s3W9aF ˗ฏۉతͳঢ়ଶ

Slide 76

Slide 76 text

4 メトリクスの取得 http://bit.ly/rYN42H ˗औಘͷ໨త͕ͳ͍ͱແҙຯʜ

Slide 77

Slide 77 text

5 テストに対する信 頼性と依存性の確 立 http://bit.ly/rOloeO ˗͜Ε͕ͳ͍ͱෆ҆ͳঢ়ଶ

Slide 78

Slide 78 text

http://bit.ly/sP6BvN 6 自動化された受け 入�れテスト+デプ ロイ自動化 ˗Ұؾ௨؏ͷ؀ڥ

Slide 79

Slide 79 text

7 継続的なデプロイ http://bit.ly/uc3x59 ˗։ൃϓϩηεͷ੒ख़Խ

Slide 80

Slide 80 text

$*αʔόͷߏங •  プロジェクト初期の段階でコードがなくても構 築する •  コードのメトリクスや静的解析は初期から継続 的に実施する⽅方が効果がある •  常にグリーン(Jenkinsなら⻘青)の状態を保ち、エ ラーがある状態に慣れない •  常にグリーンに保つにはアトミックな単位での 作業、マイグレーションとの連携、チームのコ ミットに対する態度度が⽋欠かせない

Slide 81

Slide 81 text

$*Ξϯνύλʔϯ •  頻繁にSCMにコミットしない •  テストコードを書かない •  テストコードと製品コードを同時にコミットし ない •  定時ビルドのみでコミットビルドがない・夜間 ビルドしかない •  帰り際にコミットしてそのままCIの結果を⾒見見ず に帰る •  CIでテストを通すために⼿手作業の準備が必要 •  メインラインのみで⼤大きなブランチをCI対象に していない

Slide 82

Slide 82 text

$*Ξϯνύλʔϯ •  様々な種類のテストをまとめて⾏行行っている •  ビルドの失敗に気付かない •  ビルドに失敗しても放置している •  ビルドの失敗に気づいても、修正コード以外の コードをコミットする •  何も変更更していないのにビルドが落落ちたり落落ち なかったりする •  頻繁にビルドが失敗しているので、失敗するの が普通だと思う •  CIからの通知メッセージが⼤大量量すぎる •  CIが落落ちても何も通知しない

Slide 83

Slide 83 text

$*Ξϯνύλʔϯ •  CIサーバのリソースが貧弱 •  ビルドが肥⼤大化して結果が出るまでに時間がか かる •  本番環境やステージング環境と⼤大幅に環境が異異 なる •  コードの静的解析をCIで⾏行行わずに⼈人⼿手で⾏行行う •  CIサーバがおかしくなったときに直せる⼈人がい ない •  ずっとCIでのチェック内容が変わらない、プロ セスが変わらない

Slide 84

Slide 84 text

$BLF1)1༻ʹ+FOLJOTΛઃఆ xUnit  Plugin テスト結果のjunit互換xmlを取り込む Checkstyle  plugin PHP_̲CodeSnifferのチェック結果を取 り込む Javadoc  Plugin phpDocumentorの結果を取り込む PMD  Plugin PHPMDのチェック結果を取り込む Clover  Plugin カバレッジの計算結果を取り込む DRY  Plugin コピペ分析の結果を取り込む

Slide 85

Slide 85 text

Ϗϧυͷఆٛ ワークスペースに移動して、コマンドラインでのテス トを同じことをするようにシェルスクリプトを記述。

Slide 86

Slide 86 text

ΧόϨʔδΛࣗಈूܭ

Slide 87

Slide 87 text

ΧόϨοδ͕ҰఆҎԼʹͳͬͨΒ ϏϧυΛ6/45"#-&ʹ͢Δ

Slide 88

Slide 88 text

Ϗϧυ͕ίέͨΒޫͱԻͰ௨஌ h-p://bit.ly/VHe7VW ArduinoとJenkins  APIの連携

Slide 89

Slide 89 text

1)1@$PEF4OJGGFS

Slide 90

Slide 90 text

$BLF1)1༻ʹઃఆ͢Δ CakePHP⽤用のコーディング規約の導⼊入 pear  channel-‐‑‒discover  pear.cakephp.org pear  install  cakephp/CakePHP_̲CodeSniffer 実⾏行行(概要) phpcs  -‐‑‒-‐‑‒report=summary    -‐‑‒-‐‑‒ standard=CakePHP  -‐‑‒-‐‑‒extensions=php  ./app 実⾏行行(詳細) phpcs  -‐‑‒-‐‑‒report=checkstyle  -‐‑‒-‐‑‒report-‐‑‒ checkstyle=./reports/checkstyle.xml  \ -‐‑‒-‐‑‒extensions=php  ./app

Slide 91

Slide 91 text

+FOLJOTͱ૊Έ߹ΘͤΔ ビルド定義 cd  ${WORKSPACE}  &&  phpcs  -‐‑‒-‐‑‒report=checkstyle  \ -‐‑‒-‐‑‒report-‐‑‒checkstyle=${WORKSPACE}/reports/checkstyle.xml  \ -‐‑‒-‐‑‒standard=CakePHP  -‐‑‒-‐‑‒extensions=php  \ -‐‑‒-‐‑‒ignore=Vendor/*,Plugin/*  ./app  ||  id

Slide 92

Slide 92 text

QIQ%PDVNFOUPS h-p://pear.phpdoc.org/

Slide 93

Slide 93 text

QIQDQE   h-ps://github.com/sebasOanbergmann/phpcpd

Slide 94

Slide 94 text

1)1.% h-p://phpmd.org/

Slide 95

Slide 95 text

h-p://jenkins-­‐php.org/

Slide 96

Slide 96 text

No content

Slide 97

Slide 97 text

5.マイグレーション

Slide 98

Slide 98 text

%#εΩʔϚͷόʔδϣϯ؅ཧ データベースのスキーマの状態とリリース の状態を関連付けることによって再現可能 にする

Slide 99

Slide 99 text

طଘͷΞϓϩʔνͷ໰୊ ü  sqlスクリプトファイルは管理理が煩雑 ü  sqlスクリプトは⾃自動実⾏行行に向かない ü  ロールバックやデータ移⾏行行の考慮もしづらい ü  複数のsqlスクリプトの実⾏行行順序の制御が難しい http://bit.ly/vbtqZc

Slide 100

Slide 100 text

໰୊ͷྫ SQLの実⾏行行順序によって状態が変わってしまう alter  table  users  add   column  lastlogin   datetime  after  name; alter  table  users  add   column  disabled   boolean  default  false   after  name; 1.sql 2.sql 1→2の順に実⾏行行すると…. 2→1の順に実⾏行行すると….

Slide 101

Slide 101 text

$BLF%$.JHSBUJPO $  cd   $  git  submodule  add  git://github.com/ CakeDC/migrations.git  app/Plugin/Migrations $  vi  app/Config/bootstrap.php

Slide 102

Slide 102 text

ϚΠάϨʔγϣϯ࣮ߦ $  Console/cake  Migrations.migration  run Cake  Migration  Shell -‐‑‒-‐‑‒-‐‑‒-‐‑‒-‐‑‒-‐‑‒-‐‑‒-‐‑‒-‐‑‒-‐‑‒-‐‑‒-‐‑‒-‐‑‒-‐‑‒-‐‑‒-‐‑‒-‐‑‒-‐‑‒-‐‑‒-‐‑‒-‐‑‒-‐‑‒-‐‑‒-‐‑‒-‐‑‒-‐‑‒-‐‑‒-‐‑‒-‐‑‒-‐‑‒-‐‑‒-‐‑‒-‐‑‒-‐‑‒-‐‑‒-‐‑‒-‐‑‒-‐‑‒-‐‑‒-‐‑‒-‐‑‒-‐‑‒-‐‑‒-‐‑‒-‐‑‒-‐‑‒-‐‑‒-‐‑‒-‐‑‒-‐‑‒-‐‑‒-‐‑‒-‐‑‒-‐‑‒-‐‑‒-‐‑‒-‐‑‒-‐‑‒-‐‑‒-‐‑‒-‐‑‒-‐‑‒-‐‑‒ Available  migrations:    [1351374894]  1351374894_̲add_̲items                not  applied -‐‑‒-‐‑‒-‐‑‒-‐‑‒-‐‑‒-‐‑‒-‐‑‒-‐‑‒-‐‑‒-‐‑‒-‐‑‒-‐‑‒-‐‑‒-‐‑‒-‐‑‒-‐‑‒-‐‑‒-‐‑‒-‐‑‒-‐‑‒-‐‑‒-‐‑‒-‐‑‒-‐‑‒-‐‑‒-‐‑‒-‐‑‒-‐‑‒-‐‑‒-‐‑‒-‐‑‒-‐‑‒-‐‑‒-‐‑‒-‐‑‒-‐‑‒-‐‑‒-‐‑‒-‐‑‒-‐‑‒-‐‑‒-‐‑‒-‐‑‒-‐‑‒-‐‑‒-‐‑‒-‐‑‒-‐‑‒-‐‑‒-‐‑‒-‐‑‒-‐‑‒-‐‑‒-‐‑‒-‐‑‒-‐‑‒-‐‑‒-‐‑‒-‐‑‒-‐‑‒-‐‑‒-‐‑‒-‐‑‒ Please,  choose  what  version  you  want  to  migrate  to.  [q]uit  or   [c]lean.     >  1351374894 -‐‑‒-‐‑‒-‐‑‒-‐‑‒-‐‑‒-‐‑‒-‐‑‒-‐‑‒-‐‑‒-‐‑‒-‐‑‒-‐‑‒-‐‑‒-‐‑‒-‐‑‒-‐‑‒-‐‑‒-‐‑‒-‐‑‒-‐‑‒-‐‑‒-‐‑‒-‐‑‒-‐‑‒-‐‑‒-‐‑‒-‐‑‒-‐‑‒-‐‑‒-‐‑‒-‐‑‒-‐‑‒-‐‑‒-‐‑‒-‐‑‒-‐‑‒-‐‑‒-‐‑‒-‐‑‒-‐‑‒-‐‑‒-‐‑‒-‐‑‒-‐‑‒-‐‑‒-‐‑‒-‐‑‒-‐‑‒-‐‑‒-‐‑‒-‐‑‒-‐‑‒-‐‑‒-‐‑‒-‐‑‒-‐‑‒-‐‑‒-‐‑‒-‐‑‒-‐‑‒-‐‑‒-‐‑‒-‐‑‒ Running  migrations:    [1351374894]  1351374894_̲add_̲items            >  Creating  table  items. All  migrations  have  completed. コマンド1つで最新のバージョンに更更新したり、 特定のバージョンに戻すことができる マイグレーションファイルをソースコードとしてバージョ ン管理理し、CIのビルド定義の中にマイグレーションコマン ドを組み込むことで、⾃自動的にDBの状態を連動させる

Slide 103

Slide 103 text

6.デプロイ自動化

Slide 104

Slide 104 text

プロジェクト最初に、 ((デプロイするものが なくても))デプロイを 自動化する http://bit.ly/vd1Nin

Slide 105

Slide 105 text

プロジェクトのあ いだ、ずっとデプ ロイスクリプトを 使うことで、プロ セスがテストされ 続ける 開発環境・本番環 境問わず、同じ方 法でデプロイする http://bit.ly/u27Oiz

Slide 106

Slide 106 text

デプロイが失敗した場 合にロールバックでき るようにする http://bit.ly/vFzaU9

Slide 107

Slide 107 text

デプロイが途中で失敗 した場合、その先を手 動でやらない http://bit.ly/w34bFM

Slide 108

Slide 108 text

$BQJTUSBOP Railsアプリのデプロイに利利⽤用されることが多いが、もちろんそ れ以外にも利利⽤用可能。SSHで接続し、サーバに対して⾊色々な操作 を⾏行行うことが出来る。

Slide 109

Slide 109 text

No content

Slide 110

Slide 110 text

DBQίϚϯυ cap  deploy                               #  Deploys  your  project. cap  deploy:check                   #  Test  deployment  dependencies. cap  deploy:cleanup               #  Clean  up  old  releases. cap  deploy:pending               #  Displays  the  commits  since  your  last  deploy. cap  deploy:pending:diff     #  Displays  the  `̀diff'  since  your  last  deploy. cap  deploy:rollback             #  Rolls  back  to  a  previous  version  and  restarts. cap  deploy:rollback:code   #  Rolls  back  to  the  previously  deployed  version. cap  deploy:setup                   #  Prepares  one  or  more  servers  for  deployment. cap  deploy:symlink               #  Updates  the  symlink  to  the  most  recently  deployed  ... cap  deploy:update                 #  Copies  your  project  and  updates  the  symlink. cap  deploy:update_̲code       #  Copies  your  project  to  the  remote  servers. cap  deploy:upload                 #  Copy  files  to  the  currently  deployed  version. cap  deploy:web:disable       #  Present  a  maintenance  page  to  visitors. cap  deploy:web:enable         #  Makes  the  application  web-‐‑‒accessible  again. cap  develop                             #  Set  the  target  stage  to  `̀develop'. cap  invoke                               #  Invoke  a  single  command  on  the  remote  servers. cap  multistage:prepare       #  Stub  out  the  staging  config  files. cap  production                       #  Set  the  target  stage  to  `̀production'. cap  shell                                 #  Begin  an  interactive  Capistrano  session.

Slide 111

Slide 111 text

8FCJTUSBOP

Slide 112

Slide 112 text

$BLF1)1Ͱ΋$BQJTUSBOPͷར༻ Capcake使わなくてもOK

Slide 113

Slide 113 text

No content

Slide 114

Slide 114 text

7.環境構築自動化

Slide 115

Slide 115 text

ͳͥ؀ڥߏஙͷࣗಈԽ͕ඞཁʁ ü そもそも時間がかかる ü 数が増えれば単純作業の繰り返し ü ⼈人⼿手による単純作業はミスを誘発 ü ミスした場合でも検知する仕掛けが本番障 害しかない ü ⼿手順書がメンテナンスされないことがある ü ⼿手順書の⼿手順の妥当性の評価が難しい ü ⼿手順の逆転により状態が変わりうる

Slide 116

Slide 116 text

ϛυϧ΍ઃఆΠϯετʔϧͷࣗಈԽ いつでも クリーンな 動作環境を作れ るようにする http://bit.ly/vMHRjL

Slide 117

Slide 117 text

ϛυϧ΍ઃఆΠϯετʔϧͷࣗಈԽ この自動化に よって後はア プリケーショ ンをデプロイ すればすぐ動 作する状態に する http://bit.ly/v30Zl7

Slide 118

Slide 118 text

ϛυϧ΍ઃఆΠϯετʔϧͷࣗಈԽ 本番環境と開発環境の各種 バージョンをあわせる http://bit.ly/ttwsmT

Slide 119

Slide 119 text

ϛυϧ΍ઃఆΠϯετʔϧͷࣗಈԽ ミドルウェアのバージョ ンをあげる場合も、この 自動化機構を使って行う

Slide 120

Slide 120 text

Ծ૝ԽͱࣗಈԽʢ7BHSBOUʣ

Slide 121

Slide 121 text

7BHSBOUͷΠϯετʔϧͱىಈ $  sudo  gem  install  vagrant   $  sudo  vagrant  box  add  lucid32  h-p:// files.vagrantup.com/lucid32.box   $  sudo  vagrant  init   $  sudo  vagrant  up   わずか4ステップで、仮想イン スタンスが起動する!!!!

Slide 122

Slide 122 text

7BHSBOUϑΝΠϧͰͷઃఆ Vagrantファイルで、ベース ボックス名やVirtualBoxの GUI表⽰示の有無、インスタン ス名、メモリ容量量、⾃自動実⾏行行 するChefのRecipeなどを指 定できる

Slide 123

Slide 123 text

7BHSBOUͷϓϥάΠϯͰͷ֦ு SaharaによるSandbox機能の導⼊入 $  sudo  git  clone  h-ps://github.com/jedi4ever/sahara.git   $  cd  sahara   $  sudo  rake  build   $  cd  pkg   $  sudo  gem  install  ./sahara-­‐0.0.7.gem   Sandbox機能を使うことで、ミドルウェアの バージョンアップの検証や、構成の変更更の検 証を気軽に⾏行行えるようになる。

Slide 124

Slide 124 text

$IFG$IFGTPMP

Slide 125

Slide 125 text

$IFGͱ͸ʁ •  Ruby製のシステム管理理ツール •  出来ること –  OSのパッケージのインストールや管理理 –  OSの設定やミドルウェアの設定 –  サービスの起動・停⽌止 –  クーロンの設定 •  特徴 –  Rubyでジョブや設定を記述する –  Chef⾃自体はクライアント/サーバモデル –  Chef-‐‑‒soloを使えばローカル単体で動作 –  Recipeが多数公開されている

Slide 126

Slide 126 text

$IFGͷΞʔΩςΫνϟ 詳しくは⽇日経Linux3⽉月号参照w

Slide 127

Slide 127 text

バージョンを指定し てパッケージをイン ストールすることも 可能

Slide 128

Slide 128 text

8.継続的デリバリー

Slide 129

Slide 129 text

ܧଓతσϦόϦʔ 継続的デリバリーとは、ソフトウェア全体のライ フサイクルを通じて常にソフトウェアが本番環境 にリリース可能であるということを意味する。 すなわちどのビルドもボタン一発で、完全に自動 化されたリリースプロセスを通じてリリースする。 それによってビジネス側がビジネス状況に応じて リリース判断できるようになる。 繰り返し型の 開発 継続的 インテグレーション 継続的 デプロイ 継続的デリバリー

Slide 130

Slide 130 text

ܧଓతσϦόϦʔ 繰り返し型の 開発 継続的 インテグレーション 継続的 デプロイ 継続的デリバリー Scrum u 要求に順位付け u タイムボックス による制御 u 検査と適⽤用によ る継続的改善 u 透明性の確保 u ⾃自⼰己組織型チー ム u 技術的プラク ティスの定義な し Scrum+XP u xUnit等による テスト⾃自動化 u テスト駆動開発 u コーディング規 約 u ペアプロ等 u 常時出荷可能な 品質を保持 u 主に技術的プラ クティスから構 成される Lean u Just  in  Timeで 顧客が必要なも のを必要なとき に。 u サイクルタイム を測定し改善す る。 u ビジネス活動そ のもの u 全体最適

Slide 131

Slide 131 text

Ϗϧυ σϓϩΠ ύΠϓϥΠϯ

Slide 132

Slide 132 text

Ϗϧυ σϓϩΠ ύΠϓϥΠϯ •  SCMへのコミットをトリガーにする •  開発者のリズムを維持するために、最初にユ ニットテストや⼀一部のスモークテストを⾏行行い素 早く開発者にフィードバックする •  時間のかかる結合テストや受け⼊入れテストは、 前⼯工程が正常だった場合のみに⾏行行う •  これによってムダな時間を使わないようにする •  ユーザビリティテストや探索索的テストのうち⾃自 動化できないものもプロセスとしてはパイプラ イン上に定義 •  最後にデプロイできれば、デプロイパイプライ ン

Slide 133

Slide 133 text

毎日何回も本番環境にデプロイで きているか? 顧客に頻繁に価値を届けられてい るか?

Slide 134

Slide 134 text

௨ৗͷϦϦʔε ü テストが完了してから リリースまで11日以内? ü テストが完了してから リリースまで33日以内? ü テストが完了してから リリースまで11週間以内? ü それ以上かかる? h-p://bit.ly/wo4eyD

Slide 135

Slide 135 text

ো֐࣌ͷϦϦʔε ü テストが完了してからリリースまで11日以内? ü テストが完了してからリリースまで33日以内? ü テストが完了してからリリースまで11週間以内? ü それ以上かかる? h-p://bit.ly/zeFv2G

Slide 136

Slide 136 text

障害時に11日でリリース できるのであれば、 今のリリースプロセスに は組織的なムダがある

Slide 137

Slide 137 text

ܧଓతσϦόϦʔͷݪଇ ソフトウェアのリ リースやデプロイ のプロセスは繰り 返し可能であり信 頼性が高い必要が ある。 1

Slide 138

Slide 138 text

ܧଓతσϦόϦʔͷݪଇ 全てを自動化 する 2

Slide 139

Slide 139 text

ܧଓతσϦόϦʔͷݪଇ 難解なことや苦 痛なことを繰り 返し行い自動化 の方法を考える 3

Slide 140

Slide 140 text

ܧଓతσϦόϦʔͷݪଇ 全てをソース コード管理シス テムで管理する 4

Slide 141

Slide 141 text

ܧଓతσϦόϦʔͷݪଇ 完了は「リリー スされたこと」 を意味する 5

Slide 142

Slide 142 text

ܧଓతσϦόϦʔͷݪଇ 品質を作りこむ 6

Slide 143

Slide 143 text

ܧଓతσϦόϦʔͷݪଇ すべての人にリ リースプロセス に対しての責任 がある 7

Slide 144

Slide 144 text

ܧଓతσϦόϦʔͷݪଇ 継続的に改�善 する 8

Slide 145

Slide 145 text

·ͱΊ ü ϏδωεͷͨΊʹܧଓతʹ੒ՌΛσϦόϦ͢Δ ü ͦͷͨΊʹ͸"HJMFͳ΍Γํ͕ඞཁ ü $BLF1)1͸"HJMFͳ΍Γํʹ͍͋ͬͯΔ ü ςετͷࣗಈԽ͸ඞਢ ü +FOLJOTΛ࢖ͬͯৗʹग़ՙՄೳͳঢ়ଶʹอͭ ü σϓϩΠ΍؀ڥߏங΋ࣗಈԽ ü վળΛ܁Γฦ͢