アジャイルのような開発手法が広まってきた近年、「DevOps」という言葉もよく知られるようになりました。
DevOpsという言葉には厳密な定義は存在しないため、人によってとらえ方が異なり、漠然としたイメージを持つ人もいるかもしれません。
本記事では、DevOpsの考え方や具体的な取り組み方などについて、わかりやすく解説します。
1. DevOpsとは
DevOps(デブオプス)とは、開発チーム(Development)と運用チーム(Operations)が協力しあってシステムを開発・運用することでビジネスの価値を高めるための様々な取り組みを示す概念です。
2. DevOpsの目的と組織文化、考え方
DevOpsは何のために生まれたのでしょうか。目的と組織文化、考え方について見ていきましょう。
2.1 DevOpsの目的
DevOpsの目的は「開発者と運用者が協力しあってユーザーに迅速かつ継続的にプロダクトやサービスの提供を行うこと」です。
DevOpsが生まれた背景には、IT業界の発展に伴うソフトウェア開発期間の短縮や、変更点の増加があります。短期間で多くの変更に対応しなければならない状況の中で、次々と開発を進めて新サービスを展開したい開発側と、安定したサービス稼働を維持したい運用側が対立しがちになりました。
そこで、開発側と運用側の問題を解消するため、DevOpsの考え方に基づいてDevOps実現のための様々な取り組みを実施することで、ビジネスの価値を高めようとする動きが出てきました。
2.2 DevOpsの考え方
DevOpsは、写真共有サービス「Flickr」のエンジニアが提唱した次のような考え方が基本にあります。
【DevOpsの考え方】
◆ Respect
お互いに相手を尊重すること。思いやりをもって接することで、スムーズなコミュニケーションにつながる
◆ Trust
システムに関わる全てのメンバーを信頼すること
◆ Healthy attitude about failure
失敗に対して相手を責めず健全な態度をとること
◆ Avoiding Blame
相手を非難しないこと。ミスはどうしても起こりうることなのでそれを非難しないようにする
DevOpsの実現のためにはこの考え方をしっかりとチームメンバー全員が理解し、ひとりひとりが意識を合わせて目標に向かって行動することが大切です。
3. DevOpsに役立つ代表的なツール
DevOpsに役立つ代表的なツールをまとめました。各ツールには様々な特徴があり、開発するソフトウェアによって使用するツールや、複数ツールの組み合わせなどを検討するといいでしょう。
ツールの種類 | 具体的な
ツール |
説明 |
---|---|---|
仮想化ツール | ・Docker | アプリケーションの実行環境の仮想化や、実行環境を自動的に構成を行います。 軽量で使い捨ての開発環境が準備できるため、いつでも都度作り直してサーバーの再構築が可能です |
構成管理ツール | ・Ansible
・Chef |
サーバーやインフラ周りの構成を管理・制御します。構築・テスト・運用などのオペレーションを自動化することで効率化が図れ、作業時間が短縮されます |
CI/CDツール | ・Jenkins
・CircleCI |
ソースコードのビルドやテストを自動で実行します |
モニターツール | ・Zabbix
・Nagios |
サーバーやアプリケーションの監視を自動で行います |
コミュニケーションツール | ・Slack | 開発チームと運用チームの円滑なコミュニケーションを実現するために、チャットツールを利用してオープンな状況でのやり取りを行います |
テスト自動化ツール | ・Selenium | 単体テスト、結合テスト、アプリケーションテストなどの自動化により、テストの品質向上や人的・システムリソースの有効活用が可能となり、ソフトウェアの品質向上につながります |
ソースコード/バージョン管理ツール | ・GitHub
・git |
ソフトウェアの利便性の向上に伴い、頻繁な変更や追加機能などへの対応が増え複雑化する中で、ソースコードやバージョン管理は欠かせません |
4. DevOpsとアジャイル開発、継続的デリバリーとの違い
DevOpsが開発チームと運用チームの協力体制であるのに対して、アジャイル開発と継続的デリバリーは具体的な開発手法です。
◆ アジャイル開発
小単位で実装とテストを繰り返して開発を進める開発手法
◆ 継続的デリバリー
コード変更が発生すると自動的に実稼働環境へのリリース準備が実行される開発手法
DevOpsはアジャイルのムーブメントから生まれたもので、いまではDevOpsの一環がアジャイルともいえます。
現在のDevOpsは、アジャイルだけでなく、クラウド導入や軽量型のアーキテクチャの導入を進めていくことで拡張性や運用性、保守性を担保しています。
DevOpsの最大の狙いは、継続的デプロイメント※1と継続的デリバリーを実現し、本番環境へのリリースタイミングの決定をビジネス側が行えるようにすることです。
※1継続的デプロイメント:全ての変更が自動的に本番環境にデプロイ(展開)されていること
5. DevOpsの具体的な取り組み
図はDevOpsを実現するプロセスの流れの一例です。
具体的な取り組みとしては、短期間のサイクルで製品をリリースし、サービスを稼働させたままユーザーからのフィードバックを取り入れて、開発プランから実装、テスト、デプロイまでの一連の流れを自動化し、スピーディーに追加機能や改善を行います。 各プロセスの実行に適した様々なツールを用いることで効率よく進めていくことが可能です。
次項では各プロセスの内容についての簡単な説明と、DevOps実現のためによく用いられるツールについて解説します。
5.1 DevOpsのプロセス
DevOpsのプロセスには大きく6つの段階があります。
◆ プラン(PLAN)
開発するアプリケーションについての要件や、インフラ周りやモニタリングなど、各プロセスの実行計画などを決めます。
◆ ビルド(BUILD)
開発されたソースコードをもとに、実行可能なファイルの作成や配布パッケージを作成するプロセスです。このビルドに関する一連の工程を自動化で行うことが多いです。
◆ 継続的インテグレーション(CONTINUOUS INTEGRATION)
継続的インテグレーションとは「日々開発したソースコードなどを構成管理ファイルにコミットし、ビルドやテストを自動的に実行すること」です。「CI」とも呼ばれます。
頻繁にビルドやテストを実行することで、バグの早期発見、ソフトウェアの品質向上、ソフトウェアリリースの時間短縮などを実現します。
◆ デプロイ(DEPLOY)
デプロイとは、簡単に言うと「使える状態にする」ことで、ビルドによって実行可能になったファイルを動かせる状態にします。
継続的インテグレーションを実施し、問題がなければビルドしたアプリケーションを本番環境に自動的にデプロイします。
◆ OPERATE(オペレーション)
アプリケーションのアクセス数や応答時間などのパフォーマンス、サーバーの状態などを監視します。「モニター」とも呼ばれるプロセスです。
【監視する主な項目】
• サーバーのCPU使用率、メモリ使用率、プロセス数、エラー数
• アプリケーションのプロセスの確認、アクセス数、応答時間
◆ 継続的フィードバック(CONTINUOUS FEEDBACK)
ユーザー向けにカスタマイズ可能なサービスデスクを構成するなどの方法で、ユーザーからのフィードバックを継続的に受け取れるようにします。
継続的フィードバックを得ることで、システムへの要望や変更をすぐ把握し、開発プロセスに反映させられます。
5.2 DevOpsを実現する上でのエンジニアの役割
DevOpsを実現するには、エンジニアによる開発・運用サイクルの円滑化が重要です。そのためにはビルドやデプロイ、テストなどを短いスパンで継続的に行える仕組み(継続的デリバリー環境)を整える必要があります。
6. DevOpsエンジニアになるには?学習ロードマップ
6.1 プログラミング言語を学ぶ
DevOpsエンジニアは自動化のためにプログラミングのスキルを必要とします。以下のような言語のうち、一つ以上習得することが望ましいです。
• Python:
シンプルで扱いやすいスクリプト言語
• Ruby:
柔軟性の高さが特徴のスクリプト言語
• Node.js:
JavaScriptの実行環境。JavaScriptを用いてサーバー開発やアプリ開発を実現する
• Go:
複雑なシステムの開発に向いているコンパイル言語
• Rust:
メモリ消費量が少なく、ハイパフォーマンスを実現するコンパイル言語
• C:
汎用プログラミング言語
• C++:
Cの後発言語
6.2 異なるOSのコンセプトを理解する
DevOpsエンジニアにはインフラ構築の知識も欠かせません。システム管理者に依存せず、自らOS周りの部分について判断できるよう、以下のようなサーバー管理の知識を習得する必要があります。
• プロセス管理
• スレッドと並行性
• ソケット
• I/O管理
• 仮想化
• メモリストレージとファイルシステム
DevOpsエンジニアがインフラ構築の知識を持つことで、ハイクオリティなサービスを迅速にエンドユーザーに提供するというDevOpsの目的達成につながります。
6.3 サーバー管理について学習する
DevOpsでのシステム構築では、LinuxのOSが採用されることが多いです。もしLinuxを扱ったことがない場合、サーバー管理の手法を学ぶため、複数のLinuxディストリビューションを実際に扱ってみるとよいでしょう。
また、ターミナルにおけるコマンドの知識を習得することも必要となります。代表的なコマンドを知っておきましょう。
• su:他のユーザーに成り代わるときに利用
• ps:プロセスの状態を確認
• netstat:ネットワーク接続の状態を確認
6.4 ネットワークとセキュリティについて学ぶ
次のような基本的なネットワークとセキュリティの知識を身に付けることが必要です。
• HTTPS
• FTP
• SSL
• TLS
近年は情報セキュリティに注目が集まっています。セキュリティが低いと顧客情報流出等の重大事故につながる可能性があるため、安全性の高いソフトウェアをDevOpsプロセスの初期段階からシステムに組み込むことが求められます。
DevOpsエンジニアは高い柔軟性やスピード感を保ちながら、セキュリティに関して配慮することが大切です。
6.5 プロキシやロードバランサを理解しセットアップする方法を学ぶ
開発プロセスの自動化について学ぶには、サーバーにセットアップされているものや備わっている機能を理解する必要があります。
そのため、以下のような知識が必要です。
• プロキシ
• ロードバランサ
• ミドルウェア
6.6 インフラのコード化を学ぶ
DevOpsでは、インフラ構築のコード化が非常に重要です。コード化することで工程を自動化でき、正確性やスピードの向上を実現できます。
コード化の代表的なツールとして、インフラのプロビジョニングツール(インフラの構成管理を自動で行なうツール)である「Chef」が挙げられます。このツールを利用すれば、日本語による手順書の用意や手動による作業が不要でインフラの構成管理が可能です。
【よく使われるツール】
• Ansible
• Salt
• Puppet
• Docker
6.7 CI/CDツールを学ぶ
CI/CDツールを学ぶことで、DevOpsの目的の一つであるリリース速度の向上を実現できます。
• 継続的インテグレーション(CI):ビルドからテスト環境への配置を自動化
• 継続的デリバリー(CD):継続的インテグレーションを拡張し、ビルドからテスト実行までを自動化
代表的なツールが「Jenkins」です。Jenkinsは、Javaが動く環境であればOSの種類関係なく動作します。利用者も多く、日本語での情報も手に入りやすいことが特徴です。
6.8 ソフトウェアとインフラの監視を学ぶ
DevOpsエンジニアには、監視に関する知識や運用経験が求められます。
DevOpsエンジニアは、ソフトウェアとインフラの監視体制を整える段階で、モニタリングする項目や改善の優先順位、使用する監視ツールを判断する必要があるのです。
たとえば、Seleniumによってテストを自動的に実行し、Nagiosやdatadogなどの監視ツールにてモニタリングするなどの方法が挙げられます。各ツールに個性があるため、どの監視ツールを使うのかについて検討できるよう知識を身につけておくことが大切です。
6.9 クラウドプロバイダについて学ぶ
DevOpsエンジニアはどのクラウドプロバイダを選ぶべきか判断できる知識を身につけておく必要があります。
【代表的なクラウドプロバイダ】
• AWS
• MicrosoftAzure
• GCP
2022年現在、システムの運用はオンプレミス環境ではなくクラウド環境でのサービス利用が主流です。IDCの市場予測によると、国内パブリッククラウドサービスの年間平均成長率(CAGR:Compound Annual Growth Rate)は2019年~2024年の期間では18.7%で推移しています。また2024年の市場規模は2019年比2.4倍の2兆644億円になると予測されています。
将来的にもDevOpsエンジニアがクラウドプロバイダを扱う可能性は高いため、各クラウドプロバイダの特徴や扱い方を学んでおきましょう。
7. DevOpsエンジニアが最低限身につけるべきスキルは何?
DevOpsエンジニアとして最低限必要なスキルはどれなのでしょうか。特に重要度の高いスキルについて本項に記載します。
7.1 自動化ツールの知識・経験
自動化ツールについての知識や経験は最低限身につけるべきスキルの1つです。
DevOpsは作業量が膨大となる傾向にあり、手作業ではミスが避けられません。正確性を高めるために自動化ツールは必須と言えるでしょう。
例えば以下のように自動化ツールを活用することで、効率的に作業を遂行できます。
• GitHubにプルリクエストが来たらCIサーバーで自動テストを行う
• 問い合わせがあったらSlackに自動通知する
7.2 インフラの構成管理
DevOpsエンジニアには、インフラの構成管理に関する知識及びツールを使いこなすスキルが求められます。
インフラの構成情報のバージョン管理をすれば、インフラの中身を可視化して効率の良いシステム運用を実現できるでしょう。
7.3 コミュニケーション
ここまで技術面にフォーカスしてきましたが、DevOpsの本質は文化的連動にあります。サイロ化した組織を、ツールなどを適切に活用することでコミュニケーションの円滑化を図っていくことが、DevOpsエンジニアの担うべき大きな役割の一つです。DevOpsエンジニアには、ソフト面のスキルも求められます。
8. DevOpsエンジニアが取得するべき資格は何?
どのような資格を取得することで、DevOpsエンジニアとしてのスキルが証明されるのでしょうか。DevOpsエンジニアが取得すべき資格について、紹介します。
8.1 AWS認定 DevOpsエンジニア-プロフェッショナル
代表的なものとして、AWS環境におけるシステムの運用管理経験を持つDevOpsエンジニアをターゲットにした「AWS認定 DevOpsエンジニア-プロフェッショナル」があります。
試験の概要は以下の通りです。
形式 | 選択式 |
---|---|
受験料 | 30,000円 |
試験時間 | 180分 |
受験方法 | テストセンターでの受験、またはオンラインでの受験 |
参照:AWS公式サイト
DevOpsに関する業務経験があれば比較的取り組みやすい資格ですが、試験範囲が広く、ボリュームも多いため、難易度は高めです。試験対策として知識を補完するため、AWSの研修コースを受講するとよいでしょう。
9. まとめ
DevOpsはうまく実現できれば、開発も運用も効率よく行え、ユーザーにより良いサービスを迅速に提供できるメリットあります。
開発チームと運用チームの垣根を越えて、双方が効率よく業務に取り組むためには、組織全体で全員が同じ目標に向かって、「何のためのDevOpsなのか?」その目的をはっきりと理解しておくことが大切です。
その心構えを軸として、DevOpsを実際の開発と運用に取り入れられるレベルに持っていくために、最初は少しずつDevOpsの仕組みを理解しながら、導入するツールの知識なども身に着けていくとよいでしょう。
当サイトプロエンジニアのコンサルタントが厳選したおすすめのフリーランス案件特集はこちら
特集ページから案件への応募も可能です!
実際にフリーランスエンジニアとして活躍されている方のインタビューはこちら