DevOpsってなに?

アジャイルもろくに理解していないのにDevOpsについて調べてみた

こんにちは、こんばんは、おはようございます。ばーいなです。
いやー、花見シーズン終わりましたね。
訳あって、新しい財布が欲しいばーいなです。
今回はDevOps(デブオプス)について紹介します。

DevOpsとは

DevOps(デブオプス)は、ソフトウェア開発手法の一つ。開発 (Development) と運用 (Operations) を組み合わせたかばん語であり、開発担当者と運用担当者が連携して協力する(さらに両担当者の境目もあいまいにする)開発手法をさす。厳密な定義は存在しておらず、抽象的な概念に留まっている。ソフトウェアのビルド、テスト、そしてリリースの文化と環境を以前よりも迅速に、頻繁に、確実に発生する確立を目指している。

引用元: wikipedia

と記載があります。

DevOpsの登場

「DevOps」という単語は2009年のオライリー主催のイベント「Velocity 2009」において、Flickrのエンジニアにより初めて公の場で用いられ、注目されるようになりました。

DevOpsを実現するためには

DevOpsというのは上記にも記載があるように開発手法です。
開発担当の要望は基本的に、「ユーザーのためや時代のトレンドに合わせて新しい機能を追加すること」であり、運用担当の要望は「システムの安定稼働を優先すること」なので対立してしまうこともしばしば。そこで、両者の対立関係を解消するため、DevOpsという概念が生まれました。
DevOpsはアジャイルをさらに推し進め、ソフトウェア開発ライフサイクルから無駄を取り除くことに焦点を当てています。
そのためには様々な自動化ツールの導入も必要不可欠となっています。
以下に例をいくつか紹介します。

Agile(アジャイル)

アジャイル(Agile)とは、直訳すると「素早い」「機敏な」「頭の回転が速い」という意味です。
反復 (イテレーション) と呼ばれる短い開発期間単位を採用することで、リスクを最小化しようとする開発手法の一つです。

アジャイル開発と言っても、手法には以下のような種類があります。

  • スクラム(Scrum)
  • XP(eXtreme Programing, エクストリームプログラミング)
  • ASD(Adaptive Software Development)
  • LSD(Lean Software Development, リーンソフトウェア開発)
  • アジャイルモデリング(Agile Modeling)
  • FDD(Feature Driven Development, ユーザ機能駆動開発)
  • DSDM(Dynamic System Development Methodology)
  • クリスタル・クリア(Crystal Clear Method)

継続的インテグレーション(Continuous Integration, CI)

バージョン管理システムにソースコードをコミットしたタイミングで自動的にソースコードのビルドとテストを実行することで、バグを早期に検出する手法。
本番環境でソフトウェアの更新を早期に検証するため、リリースにかかる時間を短縮できる。

バージョン管理システム

  • Git
  • Mercurial
  • Bazaar
  • Monotone

CIツール

  • Jenkins
  • Travis CI
  • Codeship
  • Bamboo
  • Circle CI

継続的デリバリー(Continuous Delivery, CD)

全ての変更に対していつでも本番リリースが可能な状態を保証していることを意味します。
自動化されたフローによってソースコードがコミットされるたびに、更新のビルド、テスト、 ステージングを行います。

継続的デプロイメント(Continuous Deployment, CD)

継続的デプロイメントはアプリケーションを本番環境に自動的にリリースします。本番環境に移す前のパイプラインのステージでは手動でのチェックはないので、継続的デプロイメントは主に、入念に設計されたテスト自動化を活用します。

CDツール

  • Docker
  • Vagrant
  • Ansible
devops

最後に

私はこの業界、開発手法といえばウォーターフォールがメインで、 リリース後はPV数、SEOの動向によりPDCAを回し、要件確定→実装→テスト→リリースを繰り返すアジャイル的な開発をしていました。
リリース時、やっぱりバグはつきもので、当時のリリース手法は画像含め何千というファイルを特定のディレクトリに配置してリリース用のバッチをぶっ叩くというものでした。「画面真っ白なった…」「どのファイルが原因?」「ログ追う前に切り戻せ!」というのが何度かありましたな~。
リリース手法が悪いというよりもファイル数が問題。リリース準備も大変。
そういえばあの頃、バージョン管理システムも導入してなくてリリースファイル名はエクセルで管理。普通にバックアップファイルを「****.php_bk」とかで残してたな…。
その後git flow、jenkinsなど導入したのですが。
管理画面とかの改修するときには運用チームにも使い方とか説明してましたね。
運用「教えられたとおりやったけどファイルが表示されませんけどー」
私「今調べます…」
なんてやりとりもあったり。
そうなるとやはりDevOpsのように開発、運用一体となり、アジャイルのようにこまめな開発、CI/CDのような自動化ツールの導入はするべきなのだなと改めて思いました。

作者情報

フロントエンドってなんかオシャレだなと感じてきたバックエンドエンジニア。
日サロじゃないよ、地黒だよ。
酒は飲んでも飲まれるな。