狠狠撸

狠狠撸Share a Scribd company logo
Developers
        Summit                                           15-A-7 #devsumiA




                 ワンクリックデプロイ
                        ~いつまで手でデプロイしてるんですか?~




http://www.?ickr.com/photos/nimasadigh/4921186134/   Ryuzee.com 吉羽龍太郎
13年2月15日金曜日
吉羽 龍太郎
                             Ryutaro YOSHIBA




              アジャイルコーチ
              Ryuzee.com
              Twitter: @ryuzee
13年2月15日金曜日
好评発売中!
               定価:2520円



              http://www.seshop.com/
               product/detail/15395/

              #scrumbcbook
13年2月15日金曜日
はじめに



13年2月15日金曜日
本当に必要なものがわかるか?




13年2月15日金曜日
13年2月15日金曜日
期待のマネジメントに失敗




13年2月15日金曜日
システムの机能の利用割合

                       7%
                13%


                            45%

              16%



                      19%




        Standishの2000年の調査より
13年2月15日金曜日
システムの机能の利用割合

                       7%
                13%               まったく使わない
                                  ほとんど使わない
                            45%
                                  たまに使う
              16%
                                  よく使う
                                  いつも使う
                      19%




        Standishの2000年の調査より
13年2月15日金曜日
あなたの开発はムダだらけ?

     ? 作りすぎのムダ
     ? 手待ちのムダ
     ? 運搬のムダ
     ? 加工のムダ
     ? 在庫のムダ
     ? 動作のムダ
     ? 不良をつくるムダ
13年2月15日金曜日
コストの见积りは正しいか?




     ? 不確実性コーン
13年2月15日金曜日
ウォーターフォール(痴字)

              要件定義                受け入れ試験



                基本設計              総合試験



                 詳細設計           結合試験



                        製造?単体


13年2月15日金曜日
ウォーターフォール(痴字)

              要件定義             受け入れ試験


                    すぎ
               か かり
              基本設計             総合試験
          時 間が       は要
                  頃に
             出 来た     そも
          て、       そも
                化。
              変 詳細設計 ない      結合試験
          求 が      てい
               が あっ    かる
           要件       で分
                 ここ
            こ とが       製造?単体


13年2月15日金曜日
よくみかける光景
              要件定義は順調です

              ○○設計は順調です

              開発は遅れていますが挽回可能です

              結合試験で重大な問題が出ています

              受入れ試験でニーズ不一致が判明

              リリースできません。てへっ
13年2月15日金曜日
よくみかける光景
              要件定義は順調です

              ○○設計は順調です

              多くのリスクが後半になって顕在
              開発は遅れていますが挽回可能です
              化する。顕在化した時点では取り
              結合試験で重大な問題が出ています
                  返しがつかない

              受入れ試験でニーズ不一致が判明

              リリースできません。てへっ
13年2月15日金曜日
アジャイルマニフェスト




     ? 2001年に、ケント?ベック、マーティン?ファウラー、ケ
         ン?シュウェイバーら、17人によって採択された
         Agileソフトウェア開発の原則を指す。




13年2月15日金曜日
アジャイルマニフェスト


    ? プロセスやツールより人と人同士の相互作用を重視する
    ? 包括的なドキュメントより動作するソフトウェアを重視する
    ? 契約上の交渉よりも顧客との協調を重視する
    ? 計画に従うことよりも変化に対応することを重視する



13年2月15日金曜日
アジャイルマニフェスト


    ? プロセスやツールより人と人同士の相互作用を重視する
    ? 包括的なドキュメントより動作するソフトウェアを重視する
    ?顧客満足を最優先し、価値のあるソフトウェアを
      契約上の交渉よりも顧客との協調を重視する

    ?早く継続的に提供します。
      計画に従うことよりも変化に対応することを重視する




13年2月15日金曜日
マーケットに製品を
        早期に投入して
         投資を回収し
       利益に結びつける
         必要性がある
13年2月15日金曜日
Developers
     Summit




     ? MVPとフィードバックループ
     ? ビジネスの成長とプロダクトの成長を同期させる




                         http://www.?ickr.com/photos/pagedooley/2120528888/
13年2月15日金曜日
アジャイルな开発
                        してますか?



http://bit.ly/shZMnK
13年2月15日金曜日
Developers
     Summit

                          アジャイルの範囲




                  今日の話は
                  こちら側




     平鍋健児氏の資料を許可を得て引用 http://blogs.itmedia.co.jp/hiranabe/2012/09/rightwing-and-leftwing-of-agile.html
13年2月15日金曜日
毎日何回も本番环境にデプロイ
          できているか?
      顧客に頻繁に価値を届けられて
            いるか?
13年2月15日金曜日
Developers
        Summit

                1000+ deploys / hour




http://bit.ly/XonkX7
13年2月15日金曜日
Developers
       Summit

                                                   よくある光景
    運用でなんとかすんの
    があんたらの仕事だろ
                                                         てめーもっとちゃ
                                                          んとアプリ作れ




                                                       あの~、ビジネス
                                                        のこと考えてよ

http://www.?ickr.com/photos/makitani/3940687822/
13年2月15日金曜日
Developers
     Summit

                  会場調査

      ?ユニットテストを書いている方は挙手
      ?継続的インテグレーションサーバを使っている方は
      そのまま挙手

      ?結合テストを自動化している方はそのまま挙手
      ?デプロイを自動化している方はそのまま挙手
      ?環境構築を自動化している方はそのまま挙手


13年2月15日金曜日
Developers
     Summit

                  会場調査

      ?ユニットテストを書いている方は挙手
      ?継続的インテグレーションサーバを使っている方は
      そのまま挙手
           最後まで残っていた方は帰って
      ?結合テストを自動化している方はそのまま挙手
               大丈夫です!
      ?デプロイを自動化している方はそのまま挙手
      ?環境構築を自動化している方はそのまま挙手


13年2月15日金曜日
一日にしてならず




http://bit.ly/vPmiFJ
13年2月15日金曜日
No
                       Silver
                       Bullet
http://bit.ly/vj0b0v
13年2月15日金曜日
http://bit.ly/sygcE9

自分たちのプロセス
は自分たちで進化さ
せるしかない




13年2月15日金曜日
Developers
     Summit

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

       技術的負債を少なく保つ




                       http://www.?ickr.com/photos/stuckincustoms/5094583941/
13年2月15日金曜日
継続的デリバリー



13年2月15日金曜日
Developers
     Summit




13年2月15日金曜日
継続的デリバリーの原则

                 ソフトウェアのリ



       1
                 リースやデプロイの
                 プロセスは繰り返し
                 可能であり信頼性が
                 高い必要がある。

13年2月15日金曜日
継続的デリバリーの原则




       2         全てを自動化する




13年2月15日金曜日
継続的デリバリーの原则


                 難解なことや苦痛な


       3         ことを繰り返し行い
                 自動化の方法を考え
                 る


13年2月15日金曜日
継続的デリバリーの原则




       4
                 全てをソースコード
                 管理システムで管理
                 する



13年2月15日金曜日
継続的デリバリーの原则




       5
                 完了は「リリースさ
                 れたこと」を意味す
                 る



13年2月15日金曜日
継続的デリバリーの原则




       6         品質を作りこむ




13年2月15日金曜日
継続的デリバリーの原则




       7
                 すべての人にリリー
                 スプロセスに対して
                 の責任がある



13年2月15日金曜日
継続的デリバリーの原则




       8         継続的に改善する




13年2月15日金曜日
継続的デリバリーの4プラクティス


    ? バイナリは一度だけビルドする
    ? すべての環境にデプロイするのに完全に同一の
         メカニズムを使う

    ? デプロイメントでスモークテストを実施する
    ? 何か問題が起こったらラインを止める

13年2月15日金曜日
テスト自動化



13年2月15日金曜日
テスト自动化の必要性


                    小規模リリースのたびに手動でテス
                   トするとコードベースが大きくなるに
                     つれてテストコストが膨らむ




     ? アジャイル開発においてはテスト自動化は必須
     ? アジャイルかどうかに関係なくソフトウェアのライフサイク
         ルを考慮する必要がある。

13年2月15日金曜日
自动化されたテストの损益分岐点




                ITアーキテクト「機能テストの自動化について考える」?
                                  より引用
              http://www.itarchitect.jp/print/?menu3=24601

13年2月15日金曜日
自动化されたテストの损益分岐点



              テスト自動化にかかるコストよりも
              手動テストのコストがすぐ高くなる




                  ITアーキテクト「機能テストの自動化について考える」?
                                    より引用
                http://www.itarchitect.jp/print/?menu3=24601

13年2月15日金曜日
问题は早めに解决する

                  フェーズ        修正までの時間

                 要求や設計          5分

              コードやユニットテスト       15分

              結合テストやシステムテスト     1時間

                 ベータテスト         2時間

                 リリース後          1日



     ? 早く見つけて速く直す
13年2月15日金曜日
デプロイのたびに
       人手でテストするのは無理




13年2月15日金曜日
テストしていない
                                 ものを目を瞑って
                                 デプロイしてはい
                                   けない


                                 設定ファイル1行だ
                           囁 き   し大丈夫だよね?
                        魔 の
                       悪

http://bit.ly/rAOG9h
13年2月15日金曜日
清水の舞台から
        飛び降りない




http://bit.ly/tnB8i0
13年2月15日金曜日
アジャイルテストの4象限




13年2月15日金曜日
Developers


          自動テストに求められる特性
     Summit




    ? 繰り返し可能 (Repeatable)
    ? 独立性 (Independent)
    ? 自己検証 (Self validation)
    ? 簡単実行 (Easy)

                               http://www.?ickr.com/photos/spackletoe/90811910/
13年2月15日金曜日
Developers


        Webアプリケーションだと...
     Summit




    ? テストの実行時間を短く、依存関係を少なく
    ? 自信のない箇所をテスト
    ? 問題は実装箇所に近いところで見つける
    ? モデル、ヘルパー、コンポーネント単位でのテストを書く
    ? コントローラーのテストを沢山書かざるを得ないのは、Fat
          Controllerや密結合の証

    ? そうなる前にペアプロ、コードレビュー、TDD、リファクタ
          リング


13年2月15日金曜日
完了の定义

    ? 完了の定义を作り、何をもって出荷可能かを定
         める

    ? 全部を短い間隔で出来れば頻繁にリリース可能
               コード              ユニット    カバレッジ
                      チェックイン
              レビュー               テスト     75%

                      受け入れ      クロス
              結合テスト                     静的解析
                       テスト     ブラウザ

         ドキュメント        性能      セキュリティ   デプロイ



13年2月15日金曜日
フィーチャー単位で完了

      フィーチャー   フィーチャー    フィーチャー    フィーチャー    フィーチャー    フィーチャー    フィーチャー

     コードレビュー   コードレビュー   コードレビュー   コードレビュー   コードレビュー   コードレビュー   コードレビュー

      チェックイン   チェックイン    チェックイン    チェックイン    チェックイン    チェックイン    チェックイン

     ユニットテスト   ユニットテスト   ユニットテスト   ユニットテスト   ユニットテスト   ユニットテスト   ユニットテスト

      カバレッジ     カバレッジ     カバレッジ     カバレッジ     カバレッジ     カバレッジ     カバレッジ

       静的解析     静的解析      静的解析      静的解析      静的解析      静的解析      静的解析

       結合テスト    結合テスト     結合テスト     結合テスト     結合テスト     結合テスト     結合テスト

     受け入れテスト   受け入れテスト   受け入れテスト   受け入れテスト   受け入れテスト   受け入れテスト   受け入れテスト

     クロスブラウザ   クロスブラウザ   クロスブラウザ   クロスブラウザ   クロスブラウザ   クロスブラウザ   クロスブラウザ

      ドキュメント   ドキュメント    ドキュメント    ドキュメント    ドキュメント    ドキュメント    ドキュメント

      セキュリティ   セキュリティ    セキュリティ    セキュリティ    セキュリティ    セキュリティ    セキュリティ

         性能      性能        性能        性能        性能        性能        性能

       デプロイ     デプロイ      デプロイ      デプロイ      デプロイ      デプロイ      デプロイ




13年2月15日金曜日
齿笔のプラクティスの利用



                             !



                         !


                             !



                 YAGNI



13年2月15日金曜日
13年2月15日金曜日
継続的インテグレーション




13年2月15日金曜日
颁滨サーバ

    ? プロジェクト初期の段階でコードがなくても構築する
    ? コードのメトリクス取得や静的解析は初期から継続的に実施
         する方が効果がある

    ? 常にグリーン(Jenkinsなら青)の状態を保ち、エラーがある
         状態に慣れない

    ? 常にグリーンに保つにはアトミックな単位での作業、マイグ
         レーションとの連携、チームのコミットに対する態度が欠か
         せない




13年2月15日金曜日
颁滨アンチパターン

    ? 頻繁にバージョン管理システムにコミットしない
    ? テストコードを書かない
    ? テストコードと製品コードを同時にコミットしない
    ? 定時ビルドのみでコミットビルドがない?夜間ビルドしかな
         い

    ? 帰り際にコミットしてそのままCIの結果を見ずに帰る
    ? CIでテストを通すために手作業の準備が必要
    ? メインラインのみで大きなブランチをCI対象にしていない
13年2月15日金曜日
颁滨アンチパターン

     ? 様々な種類のテストをまとめて行っている
     ? ビルドの失敗に気付かない
     ? ビルドに失敗しても放置している
     ? ビルドの失敗に気づいても、修正コード以外のコードをコ
         ミットする

     ? 何も変更していないのにビルドが落ちたり落ちなかったり
     ? 頻繁にビルドが失敗するので、失敗するのが普通だと思う
     ? CIからの通知メッセージが大量すぎる
13年2月15日金曜日
颁滨アンチパターン

     ? CIが落ちても何も通知しない
     ? 颁滨サーバのリソースが貧弱
     ? ビルドが肥大化して結果が出るまでに時間がかかる
     ? 本番環境やステージング環境と大幅に環境が異なる
     ? コードの静的解析をCIで行わずに人手で行う
     ? 颁滨サーバがおかしくなったときに直せる人がいない
     ? ずっとCIでのチェック内容が変わらない、プロセスが変わら
         ない


13年2月15日金曜日
バージョン管理



13年2月15日金曜日
ソースコードのバージョン管理

    ? いわずもがな。全ての起点はここにある
    ? コードの共同所有の原則への理解
    ? このソースコードは本番環境または開発環境な
         どで同じように動作しなければならない

    ? テストを書く習慣、コミット前に他のテストも
         含めて通してからコミットする習慣



13年2月15日金曜日
设定情报のバージョン管理


    ? 環境によって異なる設定値(接続先データベース情報
         など)が書かれた設定ファイルもバージョン管理する

    ? 開発環境用、ステージング環境用、本番環境用などに
         分けて定義し、容易に切り替え可能にする

    ? 本番環境に配置する際に、アプリケーションの各所を
         書き換えなければ動作しないとかアマチュア以下




13年2月15日金曜日
マージって何?


                                                     Excel台帳じゃ
                                                        だめ?

                                                    コンフリクトするとつ
                                                    らいから動かなくても
                                                     コミットしますね!




http://www.?ickr.com/photos/seanmolin/7028040701/
13年2月15日金曜日
バージョン管理は
    開発者のしつけ




               http://bit.ly/utD8aA
13年2月15日金曜日
どの断面でも再現可能か?


http://www.?ickr.com/photos/55310085@N06/8436234163/
13年2月15日金曜日
リリースした际に、前のバージョンに即座に戻
       せるか?これはコードだけでなくデータベース
       等も含む

                          http://bit.ly/tgbmyr
13年2月15日金曜日
マイグレーション



13年2月15日金曜日
データベーススキーマの管理



                             このバージョンはス
              これ試すのにどのSQL適
                             キーマ違うの???
                用すればいいの?




       データベースのスキーマの状態とリリースの状態を関連
       付けることによって再現可能にする

13年2月15日金曜日
既存のアプローチの问题




        ? SQLスクリプトファイルは管理が煩雑
        ? SQLスクリプトは自動実行に向かない
        ? ロールバックやデータ移行の考慮もしづらい
        ? 複数のSQLスクリプトの実行順序が分からない
http://bit.ly/vbtqZc
13年2月15日金曜日
问题の例
     ? SQLの実行順序で状態が変わる
  1.sql                    1.sql→2.sql

   alter table users add
      column lastlogin
   datetime after name;


  2.sql                    2.sql→1.sql

   alter table users add
      column disabled
   boolean default false
        after name;


13年2月15日金曜日
マイグレーション




13年2月15日金曜日
マイグレーション
      $ ls -1
      1301223401_addchangelogs.php
                                                前後関係は、ファイル先頭の
      1313445291_addinformation.php
      1317489252_addpriorities.php              数字の大小で判断される。
      1318776293_addprojects.php
                                                    (規約)
      1318889397_addremainingtimes.php
      1320243212_addresolutions.php
      1321049290_addsprints.php
      1321509396_addschemamigrations.php
      1322392147_?x_project_invalid_default_value.php
      1322446269_add_action_name_to_log.php
      1322993218_addstories.php
      1323001299_addstorycomments.php
      1323449303_addusers.php
      1324059101_addtasks.php
      1325101301_addteammembers.php
      1326548301_addteams.php
      1327491204_addwiki.php


13年2月15日金曜日
マイグレーション実行(例)
       # 最新のバージョンへ更新
       $ php doctrine_cli.php migrate
       # 指定したバージョンへ更新
       $ php doctrine_cli.php migrate 29



         マイグレーションファイルをソースコードとしてバージョ
         ン管理し、CIのビルド定義の中にマイグレーションコマ
         ンドを組み込むことで、自動的にDBの状態を連動させる




13年2月15日金曜日
13年2月15日金曜日
環境構築自動化



13年2月15日金曜日
环境构筑の自动化が必要なわけ

    ? そもそも時間がかかる
    ? 数が増えれば単純作業の繰り返し
    ? 人手による単純作業はミスを誘発
    ? ミスした場合でも検知する仕掛けが本番障害しかない
    ? 手順書がメンテナンスされないことがある
    ? 手順書の手順の妥当性の評価が難しい
    ? 手順の逆転により状態が変わりうる

13年2月15日金曜日
设定やインストールの自动化




        ? いつでもクリーンな動作
                 環境を作れるようにする




http://bit.ly/vMHRjL
13年2月15日金曜日
设定やインストールの自动化


                        この自動化によっ
                        て後はアプリケー
                        ションをデプロイ
                        すればすぐ動作す
                        る状態にする


http://bit.ly/v30Zl7
13年2月15日金曜日
设定やインストールの自动化

                        http://bit.ly/ttwsmT




               本番環境と開発環境の
              各種バージョンをあわせる
13年2月15日金曜日
设定やインストールの自动化



        ? ミドルウェアのバージョンをあげたり、
                パッチを適用する場合も、
                この自動化機構を使って行う




http://bit.ly/tkSfaO
13年2月15日金曜日
Chef / Chef Solo




13年2月15日金曜日
颁丑别蹿の概要
     ? Ruby製のシステム管理ツール
     ? 出来ること
      ? OSのパッケージのインストールや管理
      ? OSの設定やミドルウェアの設定
      ? サービスの起動?停止
      ? クーロンの設定
      ? 特徴
     ? Rubyでジョブや設定を記述する
     ? Chef自体はクライアント/サーバモデル
     ? Chef-soloを使えばローカル単体で動作
     ? Recipeが多数公開されている
13年2月15日金曜日
バージョンを指定
              してパッケージを
              インストールする
              ことも可能




13年2月15日金曜日
多数の搁别肠颈辫别が翱厂厂
               で公開されている




13年2月15日金曜日
13年2月15日金曜日
仮想化と自動化(Vagrant)




13年2月15日金曜日
痴补驳谤补苍迟で厂补苍诲产辞虫

       Sandbox機能を使うことで、ミドルウェアのバージョンアッ
       プの検証?構成の変更の検証?デプロイの試験などを気軽に行
       えるようになる(何度でも変更をRollbackできる)



     $ sudo git clone https://github.com/jedi4ever/sahara.git
     $ cd sahara
     $ sudo rake build
     $ cd pkg
     $ sudo gem install ./sahara-0.0.13.gem



13年2月15日金曜日
クラウドの利用




     ? Stampパターンで自由にインスタンスを複製可能
13年2月15日金曜日
环境构筑自动化の敷居の低下

    ? 仮想マシンを使うことで、何度でも簡単に自動化の試験をお
         こなうことが可能

    ? 環境構築でTDDを行う例も登場
    ? 不要になったインスタンスは削除すれば良く、調達コストは
         極めて低い

    ? 一方で有償ソフトウェアのライセンス管理をどうするかは課
         題の1つ




                        http://www.?ickr.com/photos/stuckincustoms/393494014/
13年2月15日金曜日
デプロイ自動化



13年2月15日金曜日
Developers
     Summit

                         当たり前の話
                          ( ?皿?)???!!




     Day1         Day2     Day3     Day4   DayN




13年2月15日金曜日
Developers
     Summit

                           当たり前の話



                  (^_^;)


                           ( ?皿?)???!!




13年2月15日金曜日
ゼロデプロイ



             プロジェクト最初に、
             (デプロイするものがなくても)
             デプロイを自動化する




http://bit.ly/vd1Nin
13年2月15日金曜日
プロジェクトのあいだ、
                       ずっとデプロイスクリプトを
                       使うことで、
                       プロセスがテストされ続ける



                       開発環境?本番環境問わず、
                       同じ方法でデプロイする




http://bit.ly/u27Oiz
13年2月15日金曜日
デプロイが失败した场合に
                       ロールバックできるように
                       する




http://bit.ly/vFzaU9
13年2月15日金曜日
デプロイが途中で失败
       した場合、その先を手
       動でやらない




                    http://bit.ly/w34bFM
13年2月15日金曜日
Capistrano




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

13年2月15日金曜日
颁补辫コマンド
      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 ?les 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 con?g ?les.



13年2月15日金曜日
13年2月15日金曜日
Webistrano




13年2月15日金曜日
Fabric




13年2月15日金曜日
よくあるデプロイ方法
      メンテ中ページに                           アプリケーションの
                 LBから切り離す     新規環境構築
        差し替える                               デプロイ



      データベースの    アプリケーションの   アプリケーションの
      マイグレーション      デプロイ        デプロイ



     アプリケーションの
                  スモークテスト     スモークテスト
        デプロイ




       スモークテスト    LB対象に戻す     LB切り替え




     メンテ中ページから               データベースの不可逆な変更を避けるよ
         戻す
                             うにアプリケーションを作りこんだ方が
                                   良い場合が多い


13年2月15日金曜日
ビルドパイプライン




              各種テストや静的解析、ステージング環境
                リリース、本番環境リリースなどを
                   一元的に管理できる。




13年2月15日金曜日
Action



13年2月15日金曜日
通常时のリリース

        ? テストが完了してから
                リリースまで1日以内?

        ? テストが完了してから
                リリースまで3日以内?

        ? テストが完了してから
                リリースまで1週間以内?

        ? それ以上かかる?
http://bit.ly/wo4eyD
13年2月15日金曜日
障害発生时のリリース


    ? テストが完了してからリリースまで1日以内?
    ? テストが完了してからリリースまで3日以内?
    ? テストが完了してからリリースまで1週間以内?
    ? それ以上かかる?

                           http://bit.ly/zeFv2G
13年2月15日金曜日
障害时に1日でリリースできるのであれば、
    今のリリースプロセスには組織的なムダがある。


              ワンクリックでデプロイできたとしても
              リリースの意思決定に時間がかかったら
                     無意味!




                                   http://bit.ly/rZyM3H
13年2月15日金曜日
Developers
     Summit

              組織のアジリティを高める




     ? 変化しないとゆるやかに死ぬ
     ? 自分たちで変えていく。できることは沢山あるはず!
                           http://www.?ickr.com/photos/eole/4350200158/
13年2月15日金曜日
まとめ

    ? ビジネスのために継続的に成果を届ける
    ? そのためにはAgileなやり方が必要
    ? テストの自動化は必須
    ? 常に出荷可能な状態に保つ
    ? デプロイや環境構築も自動化
    ? 改善をずっと続ける
13年2月15日金曜日

More Related Content

ワンクリックデプロイ ?いつまで手でデプロイしてるんですか? #devsumiA

  • 1. Developers Summit 15-A-7 #devsumiA ワンクリックデプロイ ~いつまで手でデプロイしてるんですか?~ http://www.?ickr.com/photos/nimasadigh/4921186134/ Ryuzee.com 吉羽龍太郎 13年2月15日金曜日
  • 2. 吉羽 龍太郎 Ryutaro YOSHIBA アジャイルコーチ Ryuzee.com Twitter: @ryuzee 13年2月15日金曜日
  • 3. 好评発売中! 定価:2520円 http://www.seshop.com/ product/detail/15395/ #scrumbcbook 13年2月15日金曜日
  • 8. システムの机能の利用割合 7% 13% 45% 16% 19% Standishの2000年の調査より 13年2月15日金曜日
  • 9. システムの机能の利用割合 7% 13% まったく使わない ほとんど使わない 45% たまに使う 16% よく使う いつも使う 19% Standishの2000年の調査より 13年2月15日金曜日
  • 10. あなたの开発はムダだらけ? ? 作りすぎのムダ ? 手待ちのムダ ? 運搬のムダ ? 加工のムダ ? 在庫のムダ ? 動作のムダ ? 不良をつくるムダ 13年2月15日金曜日
  • 11. コストの见积りは正しいか? ? 不確実性コーン 13年2月15日金曜日
  • 12. ウォーターフォール(痴字) 要件定義 受け入れ試験 基本設計 総合試験 詳細設計 結合試験 製造?単体 13年2月15日金曜日
  • 13. ウォーターフォール(痴字) 要件定義 受け入れ試験 すぎ か かり 基本設計 総合試験 時 間が は要 頃に 出 来た そも て、 そも 化。 変 詳細設計 ない 結合試験 求 が てい が あっ かる 要件 で分 ここ こ とが 製造?単体 13年2月15日金曜日
  • 14. よくみかける光景 要件定義は順調です ○○設計は順調です 開発は遅れていますが挽回可能です 結合試験で重大な問題が出ています 受入れ試験でニーズ不一致が判明 リリースできません。てへっ 13年2月15日金曜日
  • 15. よくみかける光景 要件定義は順調です ○○設計は順調です 多くのリスクが後半になって顕在 開発は遅れていますが挽回可能です 化する。顕在化した時点では取り 結合試験で重大な問題が出ています 返しがつかない 受入れ試験でニーズ不一致が判明 リリースできません。てへっ 13年2月15日金曜日
  • 16. アジャイルマニフェスト ? 2001年に、ケント?ベック、マーティン?ファウラー、ケ ン?シュウェイバーら、17人によって採択された Agileソフトウェア開発の原則を指す。 13年2月15日金曜日
  • 17. アジャイルマニフェスト ? プロセスやツールより人と人同士の相互作用を重視する ? 包括的なドキュメントより動作するソフトウェアを重視する ? 契約上の交渉よりも顧客との協調を重視する ? 計画に従うことよりも変化に対応することを重視する 13年2月15日金曜日
  • 18. アジャイルマニフェスト ? プロセスやツールより人と人同士の相互作用を重視する ? 包括的なドキュメントより動作するソフトウェアを重視する ?顧客満足を最優先し、価値のあるソフトウェアを 契約上の交渉よりも顧客との協調を重視する ?早く継続的に提供します。 計画に従うことよりも変化に対応することを重視する 13年2月15日金曜日
  • 19. マーケットに製品を 早期に投入して 投資を回収し 利益に結びつける 必要性がある 13年2月15日金曜日
  • 20. Developers Summit ? MVPとフィードバックループ ? ビジネスの成長とプロダクトの成長を同期させる http://www.?ickr.com/photos/pagedooley/2120528888/ 13年2月15日金曜日
  • 21. アジャイルな开発 してますか? http://bit.ly/shZMnK 13年2月15日金曜日
  • 22. Developers Summit アジャイルの範囲 今日の話は こちら側 平鍋健児氏の資料を許可を得て引用 http://blogs.itmedia.co.jp/hiranabe/2012/09/rightwing-and-leftwing-of-agile.html 13年2月15日金曜日
  • 23. 毎日何回も本番环境にデプロイ できているか? 顧客に頻繁に価値を届けられて いるか? 13年2月15日金曜日
  • 24. Developers Summit 1000+ deploys / hour http://bit.ly/XonkX7 13年2月15日金曜日
  • 25. Developers Summit よくある光景 運用でなんとかすんの があんたらの仕事だろ てめーもっとちゃ んとアプリ作れ あの~、ビジネス のこと考えてよ http://www.?ickr.com/photos/makitani/3940687822/ 13年2月15日金曜日
  • 26. Developers Summit 会場調査 ?ユニットテストを書いている方は挙手 ?継続的インテグレーションサーバを使っている方は そのまま挙手 ?結合テストを自動化している方はそのまま挙手 ?デプロイを自動化している方はそのまま挙手 ?環境構築を自動化している方はそのまま挙手 13年2月15日金曜日
  • 27. Developers Summit 会場調査 ?ユニットテストを書いている方は挙手 ?継続的インテグレーションサーバを使っている方は そのまま挙手 最後まで残っていた方は帰って ?結合テストを自動化している方はそのまま挙手 大丈夫です! ?デプロイを自動化している方はそのまま挙手 ?環境構築を自動化している方はそのまま挙手 13年2月15日金曜日
  • 29. No Silver Bullet http://bit.ly/vj0b0v 13年2月15日金曜日
  • 31. Developers Summit 製品そのものをAgileな状態に保つ 技術的負債を少なく保つ http://www.?ickr.com/photos/stuckincustoms/5094583941/ 13年2月15日金曜日
  • 33. Developers Summit 13年2月15日金曜日
  • 34. 継続的デリバリーの原则 ソフトウェアのリ 1 リースやデプロイの プロセスは繰り返し 可能であり信頼性が 高い必要がある。 13年2月15日金曜日
  • 35. 継続的デリバリーの原则 2 全てを自動化する 13年2月15日金曜日
  • 36. 継続的デリバリーの原则 難解なことや苦痛な 3 ことを繰り返し行い 自動化の方法を考え る 13年2月15日金曜日
  • 37. 継続的デリバリーの原则 4 全てをソースコード 管理システムで管理 する 13年2月15日金曜日
  • 38. 継続的デリバリーの原则 5 完了は「リリースさ れたこと」を意味す る 13年2月15日金曜日
  • 39. 継続的デリバリーの原则 6 品質を作りこむ 13年2月15日金曜日
  • 40. 継続的デリバリーの原则 7 すべての人にリリー スプロセスに対して の責任がある 13年2月15日金曜日
  • 41. 継続的デリバリーの原则 8 継続的に改善する 13年2月15日金曜日
  • 42. 継続的デリバリーの4プラクティス ? バイナリは一度だけビルドする ? すべての環境にデプロイするのに完全に同一の メカニズムを使う ? デプロイメントでスモークテストを実施する ? 何か問題が起こったらラインを止める 13年2月15日金曜日
  • 44. テスト自动化の必要性 小規模リリースのたびに手動でテス トするとコードベースが大きくなるに つれてテストコストが膨らむ ? アジャイル開発においてはテスト自動化は必須 ? アジャイルかどうかに関係なくソフトウェアのライフサイク ルを考慮する必要がある。 13年2月15日金曜日
  • 45. 自动化されたテストの损益分岐点 ITアーキテクト「機能テストの自動化について考える」? より引用 http://www.itarchitect.jp/print/?menu3=24601 13年2月15日金曜日
  • 46. 自动化されたテストの损益分岐点 テスト自動化にかかるコストよりも 手動テストのコストがすぐ高くなる ITアーキテクト「機能テストの自動化について考える」? より引用 http://www.itarchitect.jp/print/?menu3=24601 13年2月15日金曜日
  • 47. 问题は早めに解决する フェーズ 修正までの時間 要求や設計 5分 コードやユニットテスト 15分 結合テストやシステムテスト 1時間 ベータテスト 2時間 リリース後 1日 ? 早く見つけて速く直す 13年2月15日金曜日
  • 48. デプロイのたびに 人手でテストするのは無理 13年2月15日金曜日
  • 49. テストしていない ものを目を瞑って デプロイしてはい けない 設定ファイル1行だ 囁 き し大丈夫だよね? 魔 の 悪 http://bit.ly/rAOG9h 13年2月15日金曜日
  • 50. 清水の舞台から 飛び降りない http://bit.ly/tnB8i0 13年2月15日金曜日
  • 52. Developers 自動テストに求められる特性 Summit ? 繰り返し可能 (Repeatable) ? 独立性 (Independent) ? 自己検証 (Self validation) ? 簡単実行 (Easy) http://www.?ickr.com/photos/spackletoe/90811910/ 13年2月15日金曜日
  • 53. Developers Webアプリケーションだと... Summit ? テストの実行時間を短く、依存関係を少なく ? 自信のない箇所をテスト ? 問題は実装箇所に近いところで見つける ? モデル、ヘルパー、コンポーネント単位でのテストを書く ? コントローラーのテストを沢山書かざるを得ないのは、Fat Controllerや密結合の証 ? そうなる前にペアプロ、コードレビュー、TDD、リファクタ リング 13年2月15日金曜日
  • 54. 完了の定义 ? 完了の定义を作り、何をもって出荷可能かを定 める ? 全部を短い間隔で出来れば頻繁にリリース可能 コード ユニット カバレッジ チェックイン レビュー テスト 75% 受け入れ クロス 結合テスト 静的解析 テスト ブラウザ ドキュメント 性能 セキュリティ デプロイ 13年2月15日金曜日
  • 55. フィーチャー単位で完了 フィーチャー フィーチャー フィーチャー フィーチャー フィーチャー フィーチャー フィーチャー コードレビュー コードレビュー コードレビュー コードレビュー コードレビュー コードレビュー コードレビュー チェックイン チェックイン チェックイン チェックイン チェックイン チェックイン チェックイン ユニットテスト ユニットテスト ユニットテスト ユニットテスト ユニットテスト ユニットテスト ユニットテスト カバレッジ カバレッジ カバレッジ カバレッジ カバレッジ カバレッジ カバレッジ 静的解析 静的解析 静的解析 静的解析 静的解析 静的解析 静的解析 結合テスト 結合テスト 結合テスト 結合テスト 結合テスト 結合テスト 結合テスト 受け入れテスト 受け入れテスト 受け入れテスト 受け入れテスト 受け入れテスト 受け入れテスト 受け入れテスト クロスブラウザ クロスブラウザ クロスブラウザ クロスブラウザ クロスブラウザ クロスブラウザ クロスブラウザ ドキュメント ドキュメント ドキュメント ドキュメント ドキュメント ドキュメント ドキュメント セキュリティ セキュリティ セキュリティ セキュリティ セキュリティ セキュリティ セキュリティ 性能 性能 性能 性能 性能 性能 性能 デプロイ デプロイ デプロイ デプロイ デプロイ デプロイ デプロイ 13年2月15日金曜日
  • 56. 齿笔のプラクティスの利用 ! ! ! YAGNI 13年2月15日金曜日
  • 59. 颁滨サーバ ? プロジェクト初期の段階でコードがなくても構築する ? コードのメトリクス取得や静的解析は初期から継続的に実施 する方が効果がある ? 常にグリーン(Jenkinsなら青)の状態を保ち、エラーがある 状態に慣れない ? 常にグリーンに保つにはアトミックな単位での作業、マイグ レーションとの連携、チームのコミットに対する態度が欠か せない 13年2月15日金曜日
  • 60. 颁滨アンチパターン ? 頻繁にバージョン管理システムにコミットしない ? テストコードを書かない ? テストコードと製品コードを同時にコミットしない ? 定時ビルドのみでコミットビルドがない?夜間ビルドしかな い ? 帰り際にコミットしてそのままCIの結果を見ずに帰る ? CIでテストを通すために手作業の準備が必要 ? メインラインのみで大きなブランチをCI対象にしていない 13年2月15日金曜日
  • 61. 颁滨アンチパターン ? 様々な種類のテストをまとめて行っている ? ビルドの失敗に気付かない ? ビルドに失敗しても放置している ? ビルドの失敗に気づいても、修正コード以外のコードをコ ミットする ? 何も変更していないのにビルドが落ちたり落ちなかったり ? 頻繁にビルドが失敗するので、失敗するのが普通だと思う ? CIからの通知メッセージが大量すぎる 13年2月15日金曜日
  • 62. 颁滨アンチパターン ? CIが落ちても何も通知しない ? 颁滨サーバのリソースが貧弱 ? ビルドが肥大化して結果が出るまでに時間がかかる ? 本番環境やステージング環境と大幅に環境が異なる ? コードの静的解析をCIで行わずに人手で行う ? 颁滨サーバがおかしくなったときに直せる人がいない ? ずっとCIでのチェック内容が変わらない、プロセスが変わら ない 13年2月15日金曜日
  • 64. ソースコードのバージョン管理 ? いわずもがな。全ての起点はここにある ? コードの共同所有の原則への理解 ? このソースコードは本番環境または開発環境な どで同じように動作しなければならない ? テストを書く習慣、コミット前に他のテストも 含めて通してからコミットする習慣 13年2月15日金曜日
  • 65. 设定情报のバージョン管理 ? 環境によって異なる設定値(接続先データベース情報 など)が書かれた設定ファイルもバージョン管理する ? 開発環境用、ステージング環境用、本番環境用などに 分けて定義し、容易に切り替え可能にする ? 本番環境に配置する際に、アプリケーションの各所を 書き換えなければ動作しないとかアマチュア以下 13年2月15日金曜日
  • 66. マージって何? Excel台帳じゃ だめ? コンフリクトするとつ らいから動かなくても コミットしますね! http://www.?ickr.com/photos/seanmolin/7028040701/ 13年2月15日金曜日
  • 67. バージョン管理は 開発者のしつけ http://bit.ly/utD8aA 13年2月15日金曜日
  • 69. リリースした际に、前のバージョンに即座に戻 せるか?これはコードだけでなくデータベース 等も含む http://bit.ly/tgbmyr 13年2月15日金曜日
  • 71. データベーススキーマの管理 このバージョンはス これ試すのにどのSQL適 キーマ違うの??? 用すればいいの? データベースのスキーマの状態とリリースの状態を関連 付けることによって再現可能にする 13年2月15日金曜日
  • 72. 既存のアプローチの问题 ? SQLスクリプトファイルは管理が煩雑 ? SQLスクリプトは自動実行に向かない ? ロールバックやデータ移行の考慮もしづらい ? 複数のSQLスクリプトの実行順序が分からない http://bit.ly/vbtqZc 13年2月15日金曜日
  • 73. 问题の例 ? SQLの実行順序で状態が変わる 1.sql 1.sql→2.sql alter table users add column lastlogin datetime after name; 2.sql 2.sql→1.sql alter table users add column disabled boolean default false after name; 13年2月15日金曜日
  • 75. マイグレーション $ ls -1 1301223401_addchangelogs.php 前後関係は、ファイル先頭の 1313445291_addinformation.php 1317489252_addpriorities.php 数字の大小で判断される。 1318776293_addprojects.php (規約) 1318889397_addremainingtimes.php 1320243212_addresolutions.php 1321049290_addsprints.php 1321509396_addschemamigrations.php 1322392147_?x_project_invalid_default_value.php 1322446269_add_action_name_to_log.php 1322993218_addstories.php 1323001299_addstorycomments.php 1323449303_addusers.php 1324059101_addtasks.php 1325101301_addteammembers.php 1326548301_addteams.php 1327491204_addwiki.php 13年2月15日金曜日
  • 76. マイグレーション実行(例) # 最新のバージョンへ更新 $ php doctrine_cli.php migrate # 指定したバージョンへ更新 $ php doctrine_cli.php migrate 29 マイグレーションファイルをソースコードとしてバージョ ン管理し、CIのビルド定義の中にマイグレーションコマ ンドを組み込むことで、自動的にDBの状態を連動させる 13年2月15日金曜日
  • 79. 环境构筑の自动化が必要なわけ ? そもそも時間がかかる ? 数が増えれば単純作業の繰り返し ? 人手による単純作業はミスを誘発 ? ミスした場合でも検知する仕掛けが本番障害しかない ? 手順書がメンテナンスされないことがある ? 手順書の手順の妥当性の評価が難しい ? 手順の逆転により状態が変わりうる 13年2月15日金曜日
  • 80. 设定やインストールの自动化 ? いつでもクリーンな動作 環境を作れるようにする http://bit.ly/vMHRjL 13年2月15日金曜日
  • 81. 设定やインストールの自动化 この自動化によっ て後はアプリケー ションをデプロイ すればすぐ動作す る状態にする http://bit.ly/v30Zl7 13年2月15日金曜日
  • 82. 设定やインストールの自动化 http://bit.ly/ttwsmT 本番環境と開発環境の 各種バージョンをあわせる 13年2月15日金曜日
  • 83. 设定やインストールの自动化 ? ミドルウェアのバージョンをあげたり、 パッチを適用する場合も、 この自動化機構を使って行う http://bit.ly/tkSfaO 13年2月15日金曜日
  • 84. Chef / Chef Solo 13年2月15日金曜日
  • 85. 颁丑别蹿の概要 ? Ruby製のシステム管理ツール ? 出来ること ? OSのパッケージのインストールや管理 ? OSの設定やミドルウェアの設定 ? サービスの起動?停止 ? クーロンの設定 ? 特徴 ? Rubyでジョブや設定を記述する ? Chef自体はクライアント/サーバモデル ? Chef-soloを使えばローカル単体で動作 ? Recipeが多数公開されている 13年2月15日金曜日
  • 86. バージョンを指定 してパッケージを インストールする ことも可能 13年2月15日金曜日
  • 87. 多数の搁别肠颈辫别が翱厂厂 で公開されている 13年2月15日金曜日
  • 90. 痴补驳谤补苍迟で厂补苍诲产辞虫 Sandbox機能を使うことで、ミドルウェアのバージョンアッ プの検証?構成の変更の検証?デプロイの試験などを気軽に行 えるようになる(何度でも変更をRollbackできる) $ sudo git clone https://github.com/jedi4ever/sahara.git $ cd sahara $ sudo rake build $ cd pkg $ sudo gem install ./sahara-0.0.13.gem 13年2月15日金曜日
  • 91. クラウドの利用 ? Stampパターンで自由にインスタンスを複製可能 13年2月15日金曜日
  • 92. 环境构筑自动化の敷居の低下 ? 仮想マシンを使うことで、何度でも簡単に自動化の試験をお こなうことが可能 ? 環境構築でTDDを行う例も登場 ? 不要になったインスタンスは削除すれば良く、調達コストは 極めて低い ? 一方で有償ソフトウェアのライセンス管理をどうするかは課 題の1つ http://www.?ickr.com/photos/stuckincustoms/393494014/ 13年2月15日金曜日
  • 94. Developers Summit 当たり前の話 ( ?皿?)???!! Day1 Day2 Day3 Day4 DayN 13年2月15日金曜日
  • 95. Developers Summit 当たり前の話 (^_^;) ( ?皿?)???!! 13年2月15日金曜日
  • 96. ゼロデプロイ プロジェクト最初に、 (デプロイするものがなくても) デプロイを自動化する http://bit.ly/vd1Nin 13年2月15日金曜日
  • 97. プロジェクトのあいだ、 ずっとデプロイスクリプトを 使うことで、 プロセスがテストされ続ける 開発環境?本番環境問わず、 同じ方法でデプロイする http://bit.ly/u27Oiz 13年2月15日金曜日
  • 98. デプロイが失败した场合に ロールバックできるように する http://bit.ly/vFzaU9 13年2月15日金曜日
  • 99. デプロイが途中で失败 した場合、その先を手 動でやらない http://bit.ly/w34bFM 13年2月15日金曜日
  • 100. Capistrano Railsアプリのデプロイに利用されることが多いが、もちろん それ以外にも利用可能。SSHで接続し、サーバに対して色々 な操作を行うことが出来る。 13年2月15日金曜日
  • 101. 颁补辫コマンド 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 ?les 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 con?g ?les. 13年2月15日金曜日
  • 105. よくあるデプロイ方法 メンテ中ページに アプリケーションの LBから切り離す 新規環境構築 差し替える デプロイ データベースの アプリケーションの アプリケーションの マイグレーション デプロイ デプロイ アプリケーションの スモークテスト スモークテスト デプロイ スモークテスト LB対象に戻す LB切り替え メンテ中ページから データベースの不可逆な変更を避けるよ 戻す うにアプリケーションを作りこんだ方が 良い場合が多い 13年2月15日金曜日
  • 106. ビルドパイプライン 各種テストや静的解析、ステージング環境 リリース、本番環境リリースなどを 一元的に管理できる。 13年2月15日金曜日
  • 108. 通常时のリリース ? テストが完了してから リリースまで1日以内? ? テストが完了してから リリースまで3日以内? ? テストが完了してから リリースまで1週間以内? ? それ以上かかる? http://bit.ly/wo4eyD 13年2月15日金曜日
  • 109. 障害発生时のリリース ? テストが完了してからリリースまで1日以内? ? テストが完了してからリリースまで3日以内? ? テストが完了してからリリースまで1週間以内? ? それ以上かかる? http://bit.ly/zeFv2G 13年2月15日金曜日
  • 110. 障害时に1日でリリースできるのであれば、 今のリリースプロセスには組織的なムダがある。 ワンクリックでデプロイできたとしても リリースの意思決定に時間がかかったら 無意味! http://bit.ly/rZyM3H 13年2月15日金曜日
  • 111. Developers Summit 組織のアジリティを高める ? 変化しないとゆるやかに死ぬ ? 自分たちで変えていく。できることは沢山あるはず! http://www.?ickr.com/photos/eole/4350200158/ 13年2月15日金曜日
  • 112. まとめ ? ビジネスのために継続的に成果を届ける ? そのためにはAgileなやり方が必要 ? テストの自動化は必須 ? 常に出荷可能な状態に保つ ? デプロイや環境構築も自動化 ? 改善をずっと続ける 13年2月15日金曜日