参考記事
https://www.buildinsider.net/enterprise/devops/01
名にはともあれ最初は読み方から学びましょう。
読み方は「デブオプス」。
DevOpsはツールベンダーやユーザーコミュニティが多角的な視点で解釈することで依然はっきりとした「DevOpsとはこう!」といった厳密な定義は存在していない。
そんな中でもわかりやすく解説していただけている記事を参考にしながら自分が後から見てしっかり理解できるレベルに咀嚼してアウトプットしていきます。
##そもそもDevOpsとはなんなのか。
一言でいうと、
「開発・運用するソフトウェア/システムでビジネス価値向上を目指して確実かつ迅速にエンドユーザーに届け続ける」
という概念そのもの。
もう少し噛み砕くと。
ソフトウェアやシステムを創造するうえで、
・開発=開発チーム(Development)
・運用=運用チーム(Operations)
ざっくり分けると上記2つのチームに分かれる。
この2つのチームが協調性をもってビジネスとしての価値向上を目指すことはもちろん。
そのビジネスの価値を確実により迅速にエンドユーザーへ届けることを指した概念なのです。
この概念自体の原典であるプレゼンテーションが下記のURLからご覧いただけます。
https://www.slideshare.net/jallspaw/10-deploys-per-day-dev-and-ops-cooperation-at-flickr
##DevOpsで生じる問題。
開発・運用の2つのチームはそもそもそれぞれの役割が違う為、対立が起こりやすい。
この対立構造は上記のプレゼンテーションでも触れられています。
"Devの役割が“システムに新しい機能を追加する”である一方、Opsの役割は“システムの安定稼働”である。
そのため、Devが新しい機能を追加したくても、Opsはシステムの安定稼働のために変更を加えたがらない、
という対立構造が作られてしまっていた。"
つまりは同じミッションである「システムによってビジネスの価値をより高めるだけでなく、そのビジネスの価値をより確実かつ迅速にエンドユーザーに届け続ける」を掲げているにも関わらずそれぞれの手段が対立しているためにお互いのミッション達成に悪影響を及ぼしている。
この問題を解決する為にツールと組織文化の観点から以下のような解決方法を提示しています。
###【ツール】
① 自動化されたインフラストラクチャ(Automated infrastructure)
インフラの構築を自動化する。よく使われるツールにはAnsibleやChef,Dockerなど。
② バージョン管理システムの共有(Shared version control)
GitやMercurialなどの同じバージョン管理システムをDevとOpsで共有する。
③ ワンステップによるビルドとデプロイ(One step build and deploy)
手順書などを使い、手動でビルドやデプロイをするのではなく、ビルドやデプロイを自動化する。
よく使われるツールやサービスにJenkinsやCapistranoなどがある。
④ フィーチャーフラグ(Feature flags)
コード中の機能の有効/無効を設定ファイルで管理する。
⑤ メトリクスの共有(Shared metrics)
取得したメトリクスの結果をダッシュボードでお互いに共有する。
よく使われているサービスにはNew RelicやApplication Insightsなど
⑥ IRCとインスタントメッセンジャーのBot(IRC and IM robots)
SlackやHipChatなどのチャットツールに自動的にビルドやデプロイのログ、
アラート内容を投稿する仕組みを作ることで情報をお互いに共有する。
###【組織文化】
Ⓐ お互いを尊重する(Respect)
一緒に働く相手のことを心から思いやる。相手を一人の人間として扱い、能力や功績を評価する。
Ⓑ お互いを信頼する(Trust)
自分以外の人は優秀で、正しいことをすると信じる。信じて仕事を任せる。
Ⓒ 失敗に対して健全な態度をとる(Healthy attitude about failure)
新しいことに挑戦すれば自ずと失敗は起こってしまうもの。
失敗は起こるものであり、相手のミスだと責めるものではない。
Ⓓ 相手を非難しない(Avoiding Blame)
相手に非があると断じて言葉で責めるのではなく、次に同じ問題が起こらないように建設的な批判を行う。
ここまで提唱されている案を多々記載してきましたが、すでに冒頭にてDevOpsを一言で表したとおり方向性としては
「開発・運用するソフトウェア/システムでビジネス価値向上を目指して確実かつ迅速にエンドユーザーに届け続ける」
を目指すために提唱された概念そのもの。
開発・運用の両方面から足りないところや未熟な部分を改善していきましょうよ。という事。
ただ、ここで取り上げた「ツールと組織文化」の他にも様々なパターンで要素分けされたいくつかのDevOpsの考え方が提唱されている。※詳細は参考記事を参照願います。
では、これまで「DevOpsとはこういうもの」といった視点で見てきましたが、次回は逆にDevOpsについて誤認しているケースを見ながらより立体的に理解できるようにしていきたいと思います。