DevOpsに大切な考え方を調べてみた

DevOpsを実施する上で大切な概念

自動化

  • DevOpsでは、ソフトウェア開発ライフサイクルを可能な限り自動化することを目指す
  • できる限り自動化することによって、、、
    • 新しい機能を開発する時間が増える
    • 人間の手作業を減らすことで人的ミスが削減できる
    • チームメンバーに余裕が生まれ、より価値ある業務に従事できる

コラボレーション

  • DevOpsを行う上でコラボレーションは前提となる重要なこと。
  • 明確で定期的なコミュニケーションがなければ実現できない。
  • dev(開発)、ops(運用)、その他との垣根を無くすよう務める

継続的改善

  • 組織全体で常にスピードと質の向上、無駄の排除を目指す。
  • DevOpsではより優れた新しい方法を発見し続けることが重視されている。
  • DevOpsでは以下の2つを奨励する文化を育てる必要がある
    • 続的に試行しながらリスクを引き受けて失敗から学ぶこと
    • 成熟には繰り返しと実践が必須だと理解すること

DevOpsを見る時の5つの観点

  • Culture(文化): 互いを尊重信頼し失敗や挑戦を好む文化があるか
  • Automation(自動化): 反復的な手作業を排除し、自動化を構築しているか
  • Lean(無駄がない): 無駄をなくすために継続的に改善が行われているか
  • Measurement(計測): 様々なデータを収集し、フィードバックに繋げているか
  • Sharing(共有): 各担当の間でスムーズなやりとりができるようにしているか

コラボレーションのために大切な4つの文化

  • Respect:相手を一人の人間として扱い、能力や功績を称えあう
  • Trust:互いに信頼し合い、役割に応じて仕事を任せる
  • Healthy attitude about failure:失敗は起こりえるものなので相手を責めない
  • Avoiding Blame:相手を非難するのでなく、同じ失敗が起こさないように建設的な議論を行う

DevOpsに有効なツール

  • 自動化されたインフラストラクチャ(Automated infrastructure)
    • インフラの構築を自動化する。
    • AnsibleやChef、Dockerなどがある
  • バージョン管理システムの共有(Shared version control)
  • ワンステップによるビルドとデプロイ(One step build and deploy)
    • 手順書などを使い、手動でビルドやデプロイをするのではなく、ビルドやデプロイを自動化する。
    • ツールやサービスにはJenkinsやCapistranoなどがある
  • フィーチャーフラグ(Feature flags)
    • コード中の機能の有効/無効を設定ファイルで管理する
    • 例えばある特定のタイミングにだけ有効にしたい機能のためにわざわざリリースを行う必要がなくなる
  • メトリクスの共有(Shared metrics)
    • 取得したメトリクスの結果をダッシュボードでお互いに共有する。
    • New RelicやApplication Insightsなどのサービスがある
  • IRCインスタントメッセンジャーBotIRC and IM robots)
    • 自動的にビルドやデプロイのログ、アラート内容を投稿する仕組みを作ることで情報をお互いに共有する
    • SlackやHipChatなどのチャットツールを用いるとリアルタイムに情報を共有しやすい

参考

www.atlassian.com

www.creationline.com

www.buildinsider.net