- 開発を加速させる文化・プラクティスを知る - キーワードを広く - 深くは解説しない
DevOps生産性向上チーム宮田 淳平1
View Slide
この講義の目的▌開発を加速させる文化・プラクティスを知る⚫ キーワードを広く⚫ 深くは解説しない2
DevOpsとは3
よくある目標の対立4開発 運用どんどんリリースしたい!安定運用!壁
なにが問題なのか?▌高速リリースは運用と協力しないとできない⚫ トラブル対応ばかりになって開発が進まなくなってしまう▌安定運用は開発チームの協力がないと実現できない⚫ サービス側を修正しないとその場しのぎの対応になりがち5
6https://www.slideshare.net/jallspaw/10-deploys-per-day-dev-and-ops-cooperation-at-flickr
共通のゴール7開発 運用素早く安全なリリースを繰り返してビジネスゴールを達成する!
DevOpsの広がり▌開発と運用だけの話ではない▌DevOpsQA, DevSecOps, BizDevOps, などなど▌ビジネスゴールの達成を加速させることが本質8
組織構造の話?▌だけではない▌共通のビジネスゴールの達成を加速させるためには、プロセスや技術的なプラクティスも重要9
結局DevOpsって?▌厳密な定義はない▌生産性を上げるための⚫ 組織文化⚫ プロセス⚫ 技術的プラクティス▌ぐらいの認識でいい11
DevOpsを支える3つの道12
13https://cybozu.co.jp/company/job/recruitment/business/
なにを開発すれば世界一使われるグループウェアになるか?14
わからない!▌顧客にもわからない▌さらに市場は変化していく15
ではどうするか?1. 仮説を立てる2. 顧客に価値を届ける3. フィードバックを受け取る4. 1.〜3.を繰り返す16
仮説検証の繰り返しを効果的にするには?17
3つの道18
第1の道:フローの高速化19▌顧客に価値を届けるフローを高速化するhttps://itrevolution.com/the-three-ways-principles-underpinning-devops/
第2の道:フィードバックの強化20▌素早いフィードバックフローの実現https://itrevolution.com/the-three-ways-principles-underpinning-devops/
第3の道:継続的な学習と実験21▌フィードバックループの継続的な短縮と強化https://itrevolution.com/the-three-ways-principles-underpinning-devops/
第1の道:フローの高速化22
リリース速度が遅いと?▌顧客に価値を届けるのが遅れる▌急激な変化に対応できない▌1回のリリースにできるかぎり詰め込もうとしてリスクが高まる⚫ トラブル時に切り戻しづらくなる⚫ 原因調査も辛い▌モチベーション的にも辛い23
WIPの制限▌WIP = 進行中の作業、仕掛り▌完了しないと顧客に提供する価値はゼロ⚫ 完了とはリリースして顧客からなにかしらのフィードバックが得られるまで▌マルチタスクは作業効率が落ちる▌大きな手戻りのリスクが発生する▌他の作業待ちのときに新しい仕事を始めたくなるけど、それよりも遅れの原因を解決したほうがよい24
バッチサイズを小さくする▌バッチサイズが大きいと⚫ フローが長くなる⚫ WIPが多くなる⚫ 問題発生時のリスクが大きい⚫ 手戻りが大きい⚫ 原因特定が大変▌タスクを分割する25
カンバン▌作業を可視化して遅れや停滞を把握する26https://commons.wikimedia.org/wiki/File:Simple_Task_Kanban.jpg
チーム間の作業の受け渡しを減らす▌受け渡しが多いと⚫ 作業が滞留する原因になりがち⚫ 情報のコンテキストが失われがち▌チーム間で作業の受け渡しが発生しないようにする⚫ 自動化⚫ クロスファンクショナルなチーム編成27
第2の道:フィードバックの強化28
フィードバックが遅いと?▌顧客に発生する問題が大きくなる▌対応コストが増える29
発生と同時に問題を知る▌自動ビルド、インテグレーション、テスト▌モニタリング30
組織的に問題解決に当たる▌問題の拡大を防ぐ、学習して再発防止をする▌トヨタのアンドン31https://commons.wikimedia.org/wiki/File:Andon_Otomasyon_Panosu2.jpg
上流で品質を担保する▌問題の発見が遅れるほど対応工数が増える▌後の工程を意識して品質を作り込む⚫ テストしやすさ⚫ 運用しやすさ32
レビューとペアプロ▌チーム外に承認をもらうプロセスよりもチーム内のレビューのほうがパフォーマンスが上がりやすい⚫ タスクに近い人のほうが問題をよく知っている▌ペアプロは個別に作業したときよりエラーが減るという研究結果⚫ チーム内のノウハウ共有も捗る▌最近は3人以上のモブプロもよく行われている33
第3の道:継続的な学習と実験34
継続的に改善しないと?▌徐々に問題が増えていく▌問題が致命的になってから対応すると手遅れになりがち⚫ 本来のタスクが止まるリスク35
失敗を非難しない文化▌優秀な組織はそうでない組織よりも多くの失敗を経験している▌インシデントが発生しても純粋な原因解明と振り返りを行う⚫ ポストモーテム▌情報が積極的に共有されるようになる36
日常業務を改善する習慣をつくる▌20%ルール、ハックウィークなど▌仕事にもっとも近いところにいる人々に問題を継続的に見つけて改善する権限を与える▌技術的負債の返済を評価することを示す37
DevOpsを支える技術的プラクティス38
自動化のメリット▌Consistency▌Faster Action▌Time Saving
Consistency▌人手で複雑な作業手順を繰り返すのは厳しい▌一貫性のない手順はなにかしらの問題につながる▌自動化によって一貫性が保たれる
Faster Action▌機械は人間には不可能なタイミングと速度で実行できる⚫ 1日1万件のテストも余裕だし24時間365日いつでも大丈夫▌問題の早期発見・早期対応はコスト削減につながる
Time Saving▌コスト削減は自動化で特に強調されるバリュー▌誰でも実行できるように自動化されるとより効果が高い▌自動化とそのメンテナンスにもコストはかかるので注意
自動化のポイント▌極力人間のActionが入らないようにする⚫ 人間が実行ボタンを押すよりも特定の操作にフックして実行する方が望ましいことが多い▌誰でも使えるようにする⚫ 利益の最大化⚫ 属人化すると負債になりやすい
自動化する時間がない?▌自動化しないから時間がない▌効果を実感しやすいところから少しずつ継続的に改善していく
自動テスト▌手動テストが増えると⚫ デプロイ頻度が下がる⚫ バッチサイズが大きくなる▌しかし、手動テストを単純に自動化すればいいというものではない⚫ ソフトウェアに問題がないのにテストが落ちる(false positive)45
テストピラミッドhttps://watirmelon.blog/testing-pyramids/
継続的インテグレーション (Continuous Integration)▌一日に何回もリポジトリにコードをチェックインする▌毎回テストを含む自動ビルドが実行される
CIのメリット▌問題の早期発見▌頻繁にチェックインされるようになれば差分が大きくならない⚫ 問題発生時の原因調査が楽▌Success/Failの可視化によるコミュニケーション促進▌毎回の変更が自動テストで保証される安心感
49https://martinfowler.com/bliki/ContinuousIntegrationCertification.html
継続的デリバリー (Continuous Delivery)▌CIの発展形▌常に信頼できるリリースができる状態を保つ▌リリースに必要な検証をデリバリーパイプラインで実現する
https://en.wikipedia.org/wiki/Continuous_delivery
継続的デリバリーのメリット▌ビジネス側の都合のいいタイミングでリリースできる▌リリースのコストやリスクを抑える▌リリースまでのフローがパイプラインで可視化される⚫ どこで問題が起きているかもすぐ分かる
リリースとデプロイの分離▌デプロイ:指定された環境に指定されたバージョンのソフトウェアをインストールすること▌リリース:すべての顧客、または一部の顧客に対して機能を利用可能な状態にすること▌デプロイは開発と運用の責任、リリースはビジネス側の責任
ブルーグリーンデプロイメントhttps://martinfowler.com/bliki/BlueGreenDeployment.html
カナリアリリースhttps://martinfowler.com/bliki/CanaryRelease.html
まとめ56
これから▌共通のビジネスゴール達成のために3つの道を進んでいく⚫ フローの高速化⚫ フィードバックの強化⚫ 継続的な学習と実験▌講義で話したことはごく一部⚫ 業務をする上でもっと知りたくなってきたら参考資料を読んでみてください57
参考資料▌『The DevOps ハンドブック 理論・原則・実践のすべて』▌『Site Reliability Engineering』▌『継続的デリバリー』58