最近よく目にするDevOpsについて

書店で技術書コーナーに行き、平積みにされているものや最近よく出版される題材をチェックすると直近のトレンドがわかります。
最近よく目にする言葉に”DevOps”というものがあります。前からも目にしていたものの、ここ最近は特に頻繁に見かけるような気がします。
店頭で本をパラパラ見て、なんとなく開発手法にまつわる言葉だということはわかりました。今回はもう少し詳しく調べてみようと思います。
DevOpsとは
アッパーキャメルケースなので「もしや」と思っていたのですが、DevOpsとは
Development(開発)
Operation(運用)
の頭の語を合わせてたものです。
このことからもわかるように、簡単に説明するとDevOpsとは開発者と運用者が密に協力し合う運用方法となります。
DevOpsを実現させるために必要な技術
DevOpsを実現する大きな目的として、リリースサイクルを速くするということがあります。
開発者の意見が運用者に通りやすく、運用者の意見が開発者に通りやすいという環境により、それは実現されます。
実際に、DevOpsという言葉を生み出したFlickrのエンジニアたちは1日に10回以上のデプロイを実現していたとのことです。
実際にそこまでのデプロイを手動でやるのはあまり現実的ではないので、DevOpsの実現には継続的インテグレーション(もしくは継続的デリバリー)を実行できるツールが必要となります。
継続的インテグレーション(CI)とは、コミットなどを契機にビルド、コンパイル、テスト、インスペクション(採点)を自動化してくれるものです。
CIの代表的なツールにCircleCIやTravisCIなどがあります。
また、CIをさらに拡張した継続的デリバリー(CD)という手法があり、これはビルド、コンパイル、テスト、インスペクション(採点)、テスト環境へのビルドを自動化してくれます。
CDの代表的なツールにJenkinsなどがあります(Jenkinsは設定によってCIにも用いれます)。
更に、本番へのデプロイまで自動化した継続的デプロイメントという手法も存在しますが、ヒューマンチェック無しに本番反映まで実行されてしまうので注意が必要です。
また、開発と運用において環境に差異があると不和が生じてしまうため、サーバー構成管理ツールも必要となります。
サーバー構成管理ツールとしてはDockerやAnsibleなどが知られています。
見込まれる効果
DevOpsによりリリースサイクルが速くなることによって見込まれる効果には様々なものがあります。
俊敏性
サイクルが速いため、顧客のニーズに応えられるため競争優位性を保ち、製品のビジネス価値を高めます。
安全性
CI、CDのツールを用いることでテストやインスペクションが行われ、またデプロイに近い状態まで自動で行えるためヒューマンエラーを防止することができます。
また、万が一顧客からエラー報告があった場合にも迅速に対応することができます。
拡張性
細かい単位でデプロイするので”問題なく動いている”という状態が変更直近まで常に保証されています。そのため、新たな変更も行いやすいです。
ところで
ここまで読んで、開発手法の知識がある方は「アジャイルと同じでは?」と思われたかもしれません。
それもそのはずで、DevOpsは基本的にアジャイルを手法として採用するものだからです。
DevOpsは名の通り、開発と運用の対立が起きないようにがしっかりと手を組み連携することを目的としています。
それを実現するための一つの要素としてアジャイルを取り込んでいる、ということです。
まとめ
今まではプロジェクト発足前にそもそもの運用方針を決めたりする機会がなかったので運用の種類に関することは正直そこまで知らなかったのですが、そもそも知らないことにはその手法を選べませんし、今は「ふーん」で終わってもそれぞれの違いを知ってこそメリットを活かしデメリットをカバーすることもできると思うので、今後も雑食に知識を得ようと思いました。