記事
チュートリアル
インタラクティブ ガイド
DevOps エンジニアとは?
DevOps エンジニアは、開発と運用の両方にわたるスキルに加えて、サイロ化されたチーム間の分裂を埋めるのに役立つ対人スキルも備えていなければなりません。
Tom Hall
DevOps アドボケート & 実践者
開発と運用が別々に機能するサイロ化された構造に組織が根ざしている場合、DevOps の実施には組織の徹底的な見直しを伴うことがよくあります。DevOps をうまく実施するには、適正な人、文化、ツールが必要です。しかし、アトラシアンの 2020 年 DevOps 動向調査によると、DevOps を実施する上で最もよくあるハードルの 1 つは、従業員のスキルの不足です。
DevOps の再構築を実施するための重要な役割の 1 つは、DevOps エンジニアです。この人物は、開発と運用の両方にわたる幅広いスキル セットを備えている必要があります。また、サイロ化されたチーム間の分断を埋めるための対人スキルも必要です。
DevOps エンジニアとは?
DevOps エンジニアは IT ジェネラリストであり、コーディング、インフラストラクチャ管理、システム管理、DevOps ツールチェーンなど、開発と運用の両方に関する幅広い知識を持っている必要があります。DevOps エンジニアは、コラボレーションが活発な環境を構築するために、社内の部門の垣根を越えて作業できる対人スキルも備えている必要があります。
DevOps エンジニアは、一般的なシステム アーキテクチャ、プロビジョニング、管理について十分に理解している必要があるだけでなく、ソース管理の使用、コード レビューの提供と受領、ユニット テストの記述、アジャイル原則の知識など、従来の開発者ツールセットとプラクティスの経験も必要です。
役割と責任
DevOps エンジニアの役割はその組織々々によって異なりますが、リリース エンジニアリング、インフラストラクチャのプロビジョニングと管理、システム管理、セキュリティ、DevOps アドボカシーの組み合わせが必要になります。
ソリューションを見る
チーム全体の DevOps ツール
トレーニング コース
アトラシアン DevOps の基本事項を学ぶ
リリース エンジニアリングには、アプリケーション コードの構築とデプロイに必要な作業が含まれます。正確なツールとプロセスは、コードが記述されている言語、パイプラインが自動化されている程度、実稼働のインフラストラクチャがオンプレミスかクラウドかなど、多くの変数によって大きく異なります。リリース エンジニアリングでは、CI/CD ツールの選択、プロビジョニング、メンテナンス、または特注のビルド/デプロイ スクリプトの作成とメンテナンスが伴うことがあります。
インフラストラクチャのプロビジョニングとシステム管理には、アプリケーションをホストするために必要なサーバー、ストレージ、ネットワーク リソースのデプロイとメンテナンスが含まれます。オンプレミスのリソースを持つ組織の場合は、さらにデータ センター内の物理サーバー、ストレージ デバイス、スイッチ、仮想化ソフトウェアの管理が含まれることがあります。通常、ハイブリッドまたは完全にクラウドベースの組織の場合は、同じコンポーネントの仮想インスタンスのプロビジョニングと管理が含まれます。
DevOps アドボカシーはよく過小評価されたり完全に見過ごされたりしますが、DevOps エンジニアにとって最も重要な役割であることは間違いありません。DevOps 文化への移行は、エンジニアリング チーム メンバーを分裂させて混乱を招く可能性があります。DevOps エンジニアは、DevOps の対象分野のエキスパートとして、組織全体に DevOps の方法を伝えて教育する責任がその肩にかかっています。
DevOps エンジニアの重要なスキル 9 つ
DevOps エンジニアに必要な技術スキルは、チームの構造、テクノロジー、使用しているツールセットによって異なります。ただし、どんな場合でも強力なコミュニケーションとコラボレーションのスキルは不可欠です。また、DevOps エンジニアがデリバリー パイプラインのすべてのコンポーネントをしっかりと理解すること、利用可能なツールやサービスの長所と短所を知ることも重要です。
1. コミュニケーションとコラボレーション
DevOps エンジニアは、チーム、マネージャー、顧客とのコミュニケーションやコラボレーションを効果的に進めていくことが重要です。これらのいわゆる「ソフトスキル」はよく見過ごされて過小評価されますが、DevOps の成功はバリュー ストリーム全体にわたるフィードバックの質と量に大きく左右されます。
2. システム管理
DevOps エンジニアは、サーバーのプロビジョニングと管理、データベースのデプロイ、セキュリティの監視、システムへのパッチ適用、内外部のネットワーク接続の管理など、システム管理に関する経験が得られます。
3. DevOps ツールの使用経験
DevOps の実践には適切なツールの使用が不可欠であるため、DevOps エンジニアはさまざまなツールを理解して使用できるようになる必要があります。これらのツールは、インフラストラクチャと構築から、製品またはサービスの監視と運用まで、DevOps のライフサイクル全体で活用します。
4. 構成管理
DevOps エンジニアは多くの場合、Chef、Puppet、Ansible などの 1 つ以上の構成管理ツールの経験があることが期待されます。多くの組織では、新しいシステムのデプロイや既に実行中のシステムへのセキュリティ パッチの適用などのシステム管理タスクを自動化するために、これらのツールまたは同様のツールを採用しています。
5. コンテナーとコンテナー連携
Docker が普及させたテクノロジーであるコンテナー化では、アプリケーションとそのランタイム環境のコードが同じイメージにバンドルされます。これによって、従来の構成管理ツールの必要性が下がります。同時に、コンテナーの管理には特有の課題が伴うため、「コンテナー連携」(例: Docker Swarm または Kubernetes) と呼ばれるツール クラスの経験が DevOps エンジニアに必要なスキルになります。
6. 継続的インテグレーションと継続的デプロイ
継続的インテグレーションと継続的なデリバリー (CI/CD) は、ソフトウェア開発に対する DevOps アプローチのコア プラクティスであり、実現するために利用できるツールは多数あります。CI/CD ツールまたはツール セットの最も基本的な機能は、ソフトウェアの構築、テスト、デプロイのプロセスを自動化することです。
通常、DevOps エンジニアは 1 つ以上の CI/CD ツールの設定とデプロイに関する経験が必要なほか、通常、これらのツールを効果的に使用するために開発組織の他のメンバーと緊密に協力する必要があります。
7. システム アーキテクチャとプロビジョニング
DevOps エンジニアは、オンプレミスかクラウドかを問わず、コンピューター エコシステムを設計、プロビジョニング、管理する能力を備えている必要があります。IaC (コードとしてのインフラストラクチャ) を理解することが重要です。これは、DevOps ソフトウェア開発のベスト プラクティスをクラウド インフラストラクチャ リソースの管理に適用する IT 管理プロセスです。DevOps エンジニアは、AWS (Amazon Web Services)、AWS CloudFormation、または Terraform によって、クラウドでシステム インフラストラクチャをモデル化する方法を理解する必要があります。
8. コーディングとスクリプティングの熟知
従来のシステム管理者の多くは、繰り返しタスクを自動化するためのシェル スクリプトの作成経験があります。DevOps エンジニアは、自動化スクリプトの記述だけでなく、高度なソフトウェア開発プラクティスのほか、コード レビューやソース管理の利用など、アジャイル開発プラクティスを実装する方法を理解している必要があります。
9. 共同管理スキル
チーム間のコラボレーションは、効果的な DevOps 戦略の基本的な構成要素です。そこに特定の組織構造は関係ありません。エンジニアリング チームが役割別のみのグループでも、機能の開発、品質保証、DevOps などのチームに分かれていても、DevOps エンジニアはコーチや同僚として、多くのさまざまな人々とともに組織全体で作業する必要があります。
たとえば、DevOps への投資で得られる最も価値のある見返りの 1 つは、開発者に迅速なフィードバックを提供できることです。DevOps エンジニアは、テスト手法の速度、有効性、結果を向上させるために、QA (手動のテスター、またはテストの自動化を記述する開発者) と連携しなければならないことがよくあります。
同時に、アプリケーション コードの構築とデプロイのプロセスを改善するために、開発者は DevOps エンジニアのサポートを必要とすることがあります。
DevOps チーム: その他の役割と責任
DevOps エバンジェリスト
組織全体で DevOps プラクティスを推進して発展させる、DevOps のエキスパートです。通常、DevOps エバンジェリストは強力な技術的バックグラウンドを持っていますが、この役割が重視することは個人間のコミュニケーションとプロセスの改善です。
リリース マネージャー/変更諮問委員会
DevOps に移行していない組織、または移行の初期段階にある組織には、変更諮問委員会 (CAB) と呼ばれる別のグループ、またはリリース マネージャーという個人の役割があることがあります。
このような役割の目的は、本番環境にリリースされる新しいアプリケーション ソフトウェアが品質基準とセキュリティ基準を満たし、適切な管理者から承認を得ていることを確認することです。
これらの役割は、ソフトウェア リリースのリスクが高い場合に特に重要でした。ただし、自動テストやダーク デプロイなどの戦略を使用する場合、これらの役割は (廃れたとはいわないまでも) それほど重要ではありません。
自動化エキスパート
すべての DevOps エンジニアには、自動化に関する専門知識が必要です。しかし、組織が別の自動化エキスパートや自動化エンジニアの役割を用意することもまったくないわけではありません。CI/CD ツールの管理や、自動テスト スイートの開発とメンテナンスに集中的に取り組んでいるスタッフが担当する場合もあります。
ソフトウェア開発者
ほとんどの場合、ソフトウェア開発者という肩書は、フロントエンドまたはバックエンドのアプリケーション コード、またはその両方を記述する個人に与えられます。アジャイル思考が台頭する以前は「コンピューター プログラマー」と呼ばれてきた人々です。
品質保証
品質保証 (QA) チームには、ソフトウェアの障害を見つける責任があります。QA エンジニアはこれまで、新しいアプリケーション コードを手動でテストすることに重点を置いて、新しいアプリケーション コードがすぐに壊れないこと (スモーク テスト)、既存の機能を壊さないこと (リグレッション テスト)、他の新機能と競合しないこと (統合テスト) を確認するためのテストを行っていました。
組織では、手動テスターを SDET (テスト担当のソフトウェア開発エンジニア) の役割で補ったり、置き換えたりすることが増えています。SDET は、新しいアプリケーション コードを本番環境にリリースする前にテストすることに重点を置いています。ただし、ソフトウェアを手動でテストするのではなく、主にテスト自動化コードを記述します。
セキュリティ エンジニア
セキュリティとコンプライアンスの懸念事項を計画と開発の各プロセスに完全に統合するという概念を採用していない組織では、多くの場合、個人またはチームがセキュリティの責任を負います。これではセキュリティを後から考えることになり、設計、構築、デプロイ後のソフトウェアのセキュリティ保護は、セキュリティを念頭に置いて設計するよりもずっと困難なため、多くの場合アンチパターンとされます。
単一の役割にとどまらない
DevOps の実践には、文化の変化、新しい管理原則、テクノロジー ツールの使用が必要です。DevOps エンジニアは DevOps 変革の中心であり、この変化をスムーズに進めるために幅広いスキルを備えていなければなりません。さらに、ほとんどの組織で、DevOps を実装してソフトウェア開発ライフサイクルを改善するためには、DevOps エンジニアが 1 人だけいればよいわけではなく、互いに緊密に連携するジェネラリストとスペシャリストが必要です。DevOps エンジニアは DevOps で見込まれることをすべて実現するため、サイロ化を解消してさまざまなエキスパート間やツールチェーン間でコラボレーションを促進します。
アトラシアンの Open DevOps は、チームがソフトウェアの開発と運用に必要なものをすべて提供します。大手ベンダーや Marketplace アプリとの統合によって、チームに必要な DevOps ツールチェーンを構築できます。チームは、ベンダーが希望する働き方ではなく、チームが希望する働き方をするべきだと私たちは考えています。今すぐ試してみましょう。
この記事を共有する
次のトピック
おすすめコンテンツ
次のリソースをブックマークして、DevOps チームのタイプに関する詳細や、アトラシアンの DevOps についての継続的な更新をご覧ください。