C++幼女先輩

プログラミング成分多め

Dev-Ops

なんとなく 調べながらメモをかく 駄文

Dev-Opsとは

Dev: デベロッパー。つまりプログラマなどの開発者
Ops: オペレータ。つまり運用

昔から両者は立場、考え方が違い衝突をしていた
開発者は、新機能の実装を早くリリースしたいが
運用者は、不具合の可能性のある新機能には慎重で既存の不具合修正を優先してほしい

開発者は、不具合の修正や新機能の1タスクが終わるたびにリリースしてほしいが
運用者は、バージョン管理や運用ミスを考え、数週間まとめてリリースしたい

不具合が発生した場合
開発者は運用のミスを疑い
運用者は開発のミスを疑う

開発者はオペレーターマニュアルを書き、運用はその通りに実行する

など、昔から色々と問題があった

一見いがみ合っているようだが、立場が違うだけで目的は同じ
ユーザーに喜んで使ってもらいたい。サービスを良くしたい

目的が同じなら、仲良くなれるはずだ

https://www.slideshare.net/jallspaw/10-deploys-per-day-dev-and-ops-cooperation-at-flickr

インフラ構築の自動化

昔は、インストールマニュアルというものがあり、その手順通りインストールしていた
当然 インストールの工数や人為的ミスがおこる
Chef、Puppet、Ansible、Docker など

バージョン管理システム共有

運用がソース管理システムを使わず、開発がビルドしたファイルのみを扱っていた時代もある
今では運用もGitなどを見て、コミットメッセージを見たり、任意のバージョンでビルドして確かめたり
コードレビューに参加したりすることも当たり前になってきている
Gitなど

ワンステップデプロイ

過去においては、手順書をみてサーバへのデプロイを手動で行っていた
当然 工数と人為的ミスが増える
現在では Jenkins、Capistrano

フューチャーフラグ

新機能、特別なイベントなどを設定ファイルでON/OFFする
新機能のデプロイを 設定ファイルの変更のみで出来る

メトリクス

過去においては開発者はあまり サーバー負荷の数値などに関心がなかった
運用が行う仕事だと思っていたからだ
運用がメトリクスを見て、サーバ負荷の問題を開発に報告してから調べはじめる
だが、今の時代は常に開発者もメトリクスを見て一刻も早く気付くべきだ
NewRelic、ApplicationInsights 等

チャット&チャットBOT

Slack、HipChat等のツールを使い
デプロイ、アラートのログを共有したり
自動化できるところは自動化していきたい

そしてその後は精神論

リスペクト

ステレオタイプで考えるな(プログラマがみんなルーズじゃない)
他人の経験や意見を尊敬する
NOとだけ言わない
隠さない

信頼

OpsはDevの機能追加を信用し、DevはOpsのインフラ変更を信用する なd

失敗にたいして健全に

失敗は誰しもがおこす。ミスを責めない

非難を避ける

失敗を責めない
同じ失敗がおこらないよう、建設的な考えをすべき

まとめ

過去においては DevとOpsは立場が違い対立することもあった
そのこと自体は、お互いにけん制しあいミスを防ぐのに役立ってた面があるかもしれないが
今の流行りは、DevとOpsが仲良く協力的になる事

Opsはソース管理を使ったり、コードレビューを行ったり、過去のバージョンを自分でビルドし調査したり
もっと Devに歩み寄る

Devはメトリック等を自分たちも関心をもち、Opsに歩み寄る

自動化できる部分は積極的に自動化し、工数と人為的なミスを減らす

よく使われるツールとしては
構成ツール:Docker、Chef、Vagrant、Ansible、Puppet・・・
ソース管理:Git(Github、Gitlab)
CI:Jenkins、CirculerCI
チャット:Slack、HipChat
メトリクス:NewRelic、ApplicationInsights

そして 人間間の リスペクト、信頼、非難しないなどがとても重要

それに加え、リーン性、計測なども重要視されている

DevとOpsは仲良くなる。むしろ 仕事や立場がオーバーラップする
時代の流れはそうなっているようだ