アジャイルのような開発手法が広まってきた近年、「DevOps」という言葉もよく知られるようになりました。
DevOpsという言葉には厳密な定義は存在しないため、人によってとらえ方が異なっていり、漠然としたイメージを持つ人もいるかもしれません。
本記事では、DevOpsの考え方や具体的な取り組み方などについて、わかりやすく解説します。
目次
3.1.1 プラン(PLAN)
3.1.2 ビルド(BUILD)
3.1.3 継続的インテグレーション(CONTINUOUS INTEGRATION)
3.1.4 デプロイ(DEPLOY)
3.1.5 OPERATE(オペレーション)
3.1.6 継続的フィードバック(CONTINUOUS FEEDBACK)
3.2.1 仮想化ツール
3.2.2 構成管理ツール
3.2.3 CI/CDツール
3.2.4 モニターツール
3.2.5 コミュニケーションツール
3.2.6 テスト自動化ツール
3.2.7 ソースコード/バージョン管理ツール
1. DevOpsとは何のこと?
DevOpsという言葉には明確な定義がないものの、下記のような意味合いで広く知られています。
DevOps(デブオプス)とは、開発チーム(Development)と運用チーム(Operations)が協力しあってシステムを開発・運用することでビジネスの価値を高めるための様々な取り組みを示す概念です。
では、そもそもDevOpsのような考え方は何のためにうまれたのでしょうか?
1.1 DevOpsの目的
DevOpsの目的は、環境によっても違ってはきますが、
「開発者と運用者が協力しあってユーザーに迅速かつ継続的にプロダクトやサービスの提供を行う」ことです。
そもそも、DevOpsがうまれた背景には、IT業界の発展に伴いソフトウェア開発期間の短縮、様々な変更などへの柔軟な対応の必要性などが増加したことがあります。
それにより、次々と開発を進めて新サービスを展開したい開発側と、安定したサービス稼働を維持したい運用側が対立しがちになり、様々な問題も生じやすくなってきました。
そこで、DevOpsの考え方に基づき、開発側と運用側の問題を解消し、DevOps実現のための様々な取り組みを実施することで、ビジネスの価値を高めようという動きが出てきました。
DevOpsの考え方と、具体的な取り組みについては次項に述べます。
2.DevOpsの考え方
DevOpsは写真共有サービス「Flickr」のエンジニアが提唱した次のような考え方が基本にあります。
【DevOpsの考え方】
◆ Respect
お互いに相手を尊重すること。思いやりをもって接することで、スムーズなコミュニケーションにつながる
◆ Trust
システムに関わる全てのメンバーを信頼すること
◆ Healthy attitude about failure
失敗に対して相手を責めず健全な態度をとること
◆ Avoiding Blame
相手を非難しないこと。ミスはどうしても起こりうることなのでそれを非難しないようにする
DevOpsの実現のためにはこの考え方をしっかりとチームメンバー全員が理解し、ひとりひとりが意識を合わせて目標に向かって行動することが大切です。
3. DevOpsの具体的な取り組み
図はDevOpsを実現するプロセスの流れの一例です。
具体的な取り組みとしては、短期間のサイクルで製品をリリースし、サービスを稼働させたままユーザーからのフィードバックを取り入れて、開発プランから実装、テスト、デプロイまでの一連の流れを自動化し、スピーディーに追加機能や改善を行います。
各プロセスの実行に適した様々なツールを用いることで効率よく進めていくことが可能です。
次項では各プロセスの内容についての簡単な説明と、DevOps実現のためによく用いられるツールについて解説します。
3.1 DevOpsのプロセス
3.1.1 プラン(PLAN)
開発するアプリケーションについての要件や、インフラ周りやモニタリングなど、各プロセスの実行計画などを決めます。
3.1.2 ビルド(BUILD)
開発されたソースコードをもとに、実行可能なファイルの作成や配布パッケージを作成するプロセスです。
このビルドに関する一連の工程を自動化で行うことが多いです。
3.1.3 継続的インテグレーション(CONTINUOUS INTEGRATION)
継続的インテグレーションとは、「日々開発したソースコードなどを構成管理ファイルにコミットし、ビルドやテストを自動的に実行すること」です。
頻繁にビルドやテストを実行することで、バグの早期発見、ソフトウェアの品質向上、ソフトウェアリリースの時間短縮などが可能になります。
継続的インテグレーションは、CONTINUOUS INTEGRATIONを略し「CI」とよく呼ばれます。
また、ビルドやテストだけでなく、リリースのプロセス全体を自動化する、継続的デリバリー(CONTINUOUS DELIVERY)という手法もあります。
3.1.4 デプロイ(DEPLOY)
デプロイとは、簡単に言うと「使える状態にする」ということであり、ビルドによって実行可能になったファイルを動かせる状態にします。
継続的インテグレーションを実施し、問題がなければビルドしたアプリケーションを本番環境に自動的にデプロイします。
3.1.5 OPERATE(オペレーション)
ここではサーバーと、アプリケーションのアクセス数や応答時間などのパフォーマンスを監視する「モニター」とも呼ばれるプロセスです。
監視データの蓄積による負荷を増やしすぎないことを考慮しつつ、監視する対象を決めます。
導入初期は、ある度項目を絞り、必要最低限にしておきます。
【監視する主な項目】
◆ サーバーのCPU使用率、メモリ使用率、プロセス数、エラー数
◆ アプリケーションのプロセスの確認、アクセス数、応答時間
3.1.6 継続的フィードバック(CONTINUOUS FEEDBACK)
ユーザー向けにカスタマイズ可能なサービスデスクを構成することなどにより、ユーザーからのフィードバックを継続的に受け取れるようにします。
これにより、システムへの要望や変更をすぐ把握し、開発プロセスに反映させることができます。
3.2 DevOps実現のために用いられるツール
DevOpsを効率よく実現するために多くのツールが使われています。
各ツールには様々な特徴があり、開発するソフトウェアによって使用するツール、また、複数ツールの組み合わせなどを検討し見極める必要があります。
3.2.1 仮想化ツール
◆ Docker
アプリケーションの実行環境の仮想化や、実行環境を自動的に構成を行います。
軽量で使い捨ての開発環境が準備できるためいつでも都度作り直してサーバーの再構築が可能です。
また、本番環境と同じものを開発環境に再現できるため、開発環境でテストや動作確認を行い、そのまま本番環境へ反映することもできます。
3.2.2 構成管理ツール
サーバーやインフラ周りの構成を管理・制御します。
構築・テスト・運用などのオペレーションを自動化することで効率化が図れ、作業時間が短縮されます。
3.2.3 CI/CDツール
ソースコードのビルドやテストを自動で実行します。
3.2.4 モニターツール
サーバーやアプリケーションの監視を自動で行います。
3.2.5 コミュニケーションツール
◆ Slack
開発チームと運用チームの円滑なコミュニケーションを実現するために、チャットツールを利用してオープンな状況でのやり取りを行います。
3.2.6 テスト自動化ツール
◆ Selenium
単体テスト、結合テスト、アプリケーションテストなどの自動化により、テストの品質向上や人的・システムリソースの有効活用が可能となり、ソフトウェアの品質向上につながります。
3.2.7 ソースコード/バージョン管理ツール
ソフトウェアの利便性の向上に伴い、頻繁な変更や追加機能などへの対応が増え複雑化する中で、ソースコードやバージョン管理は欠かせません。
4. まとめ
DevOpsはうまく実現できれば、開発も運用も効率よく行え、ユーザーにより良いサービスを迅速に提供できるメリットあります。
開発チームと運用チームの垣根を越えて、双方が効率よく業務に取り組むためには、組織全体で全員が同じ目標に向かって、「何のためのDevOpsなのか?」その目的をはっきりと理解しておくことが大切です。
その心構えを軸として、DevOpsを実際の開発と運用に取り入れられるレベルに持っていくために、最初は少しずつDevOpsの仕組みを理解しながら、導入するツールの知識なども身に着けていくとよいでしょう。