SRE、DevOps、プラットフォームエンジニアリングの違い
Observability Shanika WickramasingheSRE、DevOps、プラットフォームエンジニアリングは、今日のソフトウェア開発の世界における重要な概念です。この3つの領域ごとに、その管理を担当する専任チームが置かれ、各チームがソフトウェア開発の異なる側面に注力しながら、一連の業務を遂行し、パフォーマンス要件を測定するためのツールとメトリクスを使用しています。
この記事では、SRE、DevOps、プラットフォームエンジニアリングについて、類似点と相違点などを説明します。そして特に重要な点として、最新ソフトウェアの開発、デリバリー、保守に関するプロセスを効率化するうえで各チームが果たす役割について触れます。
SREの概要
サイトリライアビリティエンジニアリング(SRE)は、ソフトウェアシステムの信頼性の向上と維持に焦点を当てたプラクティスです。そのための手段として、SREではソフトウェアツールを使用し、アプリケーション監視や信頼性確保のためのタスクを自動化します。
グーグル社は2003年、大規模で複雑な自社のソフトウェアシステムの管理に関連する課題の解決策としてSREを実装しました。SREは、チームのコラボレーション、生産性、カスタマーエクスペリエンスを向上させ、大きなメリットをもたらします。SREチームの業務には次のようなものがあります。
- アプリケーション監視
- 緊急時の対応
- 変更管理
- アプリケーションの可用性、効率、パフォーマンスに関する各基準の確保
SREチームは、ライフサイクル全体を通じて開発チームと緊密に連携し、ソフトウェアパイプラインや自動化されたジョブのバグを修正するなど、基盤システムに関連する問題を解決します。また、定型的なタスクを自動化して、開発者が生産性を高められるよう支援します。
DevOpsの概要
多くの方にとって、DevOpsは組織における大きなカルチャーシフトの象徴なのではないでしょうか。従来、開発チームと運用チームは別々に機能していましたが、このようなサイロ化されたカルチャーは、ソフトウェアの品質の低下やソフトウェアデリバリーの遅延といった問題をたびたび引き起こしていました。DevOpsは、2つのチームのタスクを統合することで、開発チームと運用チームがサイロ化された状況を打破します。
DevOpsチームは、ソフトウェア開発プロセスの自動化と効率化に協力して取り組みます。また、コラボレーション、コミュニケーション、ソフトウェアデリバリーの速度と品質を向上させることで、チームに大きなメリットをもたらします。DevOpsエンジニアの業務には次のようなものがあります。
- コミュニケーションとコラボレーションへの注力
- プロセスの自動化
- システム監視
- システムパフォーマンスの最適化
- 問題のトラブルシューティング
プラットフォームエンジニアリングの概要
プラットフォームエンジニアリングは、クラウドネイティブ時代となった今、一躍注目されている手法です。プラットフォームエンジニアリングが目指すのは、ソフトウェア開発ライフサイクル全体の運用ニーズをカバーするツールチェーンとワークフローを構築し、インフラ機能のセルフサービス化を実現することです。
プラットフォームエンジニアとプラットフォームエンジニアリングチームは、ビルドツール、バージョン管理システム、テストフレームワークの自動化などの開発に注力します。また、CI/CD、アラート、デプロイのワークフローなど、一部のワークフローの構築にも携わります。こうした取り組みによって、ソフトウェア開発者はソフトウェアをより効率的に構築、デリバリーできるようになります。プラットフォームエンジニアの業務には次のようなものがあります。
- ツールチェーンやワークフローの開発
- インフラのセキュリティとコンプライアンスの確保
- インフラの信頼性とスケーラビリティの管理
- ベストプラクティスとプラットフォームの使用方法に関する開発者向けトレーニングの提供
SREとDevOpsのプラクティスが十分に浸透していないために生じている問題を解決すること、それがプラットフォームエンジニアリングの目的であるといってよいでしょう。
DevOps、SRE、プラットフォームエンジニアリングの違い
ここまで、この3つの概念について簡単に説明してきました。SREとDevOpsはもともと対照的な考え方ではありません。一方、プラットフォームエンジニアリングは、SREとDevOpsでよく見られる課題や不十分な実装による問題に対処するために生まれました。
ここからは、これらの概念についてもう少し詳しく見ていきます。
SREとDevOps:比較と違い
SREとDevOpsの類似点は何でしょうか?SREチームとDevOpsチームには共通点が多くあります。
- 自動化を重視:SREとDevOpsはともに、自動化、コミュニケーション、コラボレーションを大事にします。どちらのチームも監視、システムパフォーマンスの最適化、問題のトラブルシューティングなどに責任を負っています。
- コミュニケーションとコラボレーション:SREとDevOpsのどちらにおいても、開発チームと運用チーム間のコミュニケーションとコラボレーションを促進することが基本原則として奨励されます。このことは、高品質で信頼性の高いソフトウェアデリバリーにつながります。
- ツール:SREチームとDevOpsチームは、本番環境の監視とトラブルシューティングを担当します。両チームともSplunk、Grafana、NewRelicなどのログ分析ツールや監視ツールを頻繁に使用して問題を特定し、ソフトウェアシステムのパフォーマンスを向上させます。
- メトリクス:SREチームもDevOpsチームも、アプリケーションやシステムの動作を反映するメトリクスを監視します。それぞれ別のメトリクスを監視している場合でも、一部のメトリクスは両方のチームに役立ちます。たとえば、応答時間、エラー率、その他の障害に関するメトリクスは、ユーザーに影響が及ぶ前に問題を検出して解決するのに有用です。
- 継続的な改善:SREとDevOpsはどちらも、信頼性、効率、パフォーマンスを向上させるために継続的に改善するにはどうすべきかに焦点を当てています。その一環として、両チームともフィードバックループ、定期的な振り返り、段階的な改善などに取り組み、運用業務とデリバリーパイプラインの進化に力を入れます。
その一方で、SREとDevOpsには次のような非常に明確な違いがあります。
主な焦点
両者の間には、もちろん大きな違いもいくつかあります。そのひとつは、焦点の幅広さの違いです。DevOpsがソフトウェアの開発プロセス全体に焦点を当てているのに対し、SREはシステムの信頼性とスケーラビリティにのみ焦点を当てています。システムの信頼性は多くの異なる領域に影響を与える可能性があるため、焦点の範囲が絞られているとはいえ、SREは実際には大きな役割を果たします。
作り出そうとしているカルチャー
DevOpsは、開発チームと運用チームのサイロ化を解消し、協力的でサイロのないカルチャーを築きます。他方、SREの主な焦点は、信頼性と説明責任のカルチャーを確立することにあります。
インシデント対応
DevOpsチームは、ソフトウェア開発やテストの自動化、プロアクティブな監視といったタスクを通じて、インシデントの発生を未然に防ぐことを重視します。一方、SREチームは、インシデントの根本原因を調査し、再発を防ぐための対策の実施に軸足を置きます。
メトリクス
DevOpsチームはデプロイの頻度、変更のリードタイム、平均解決時間(MTTR)、変更の失敗率などのDORAメトリクスを重視します。対照的に、SREチームはレイテンシー、トラフィック、アップタイム、エラー率、サービスレベル契約(SLA)などのメトリクスに重点を置きます。
DevOpsとプラットフォームエンジニアリング:類似点と相違点
- 自動化:DevOpsとプラットフォームエンジニアリングはどちらも自動化を重要な手段としています。プラットフォームエンジニアリングでは、CI/CD、アラート、デプロイワークフローで自動化を活用するのに対し、DevOpsでは、テスト、CI/CD、監視、アラート、インシデント対応で自動化を利用します。
- コミュニケーションとコラボレーション:DevOpsとプラットフォームエンジニアリングでは、開発チームと運用チーム間のコミュニケーションとコラボレーションを促進することで、高品質で信頼性の高いソフトウェアデリバリーに努めます。
- インフラ管理:両チームともインフラ管理を重視しますが、DevOpsエンジニアがインフラ全体を管理するのに対し、プラットフォームエンジニアが管理するのは、プラットフォームレイヤーのみです。このレイヤーに、アプリケーションの開発とデリバリーを支える基盤となるソフトウェアやツールがデプロイされます。
プラットフォームエンジニアリングはDevOpsエンジニアリングの進化形であると主張する向きもありますが、両者は何よりも主な焦点が異なっており、日々のタスクを実行するために使用するツールも違います。
主な焦点
DevOpsチームは、タスクの自動化、コミュニケーション、コラボレーションを通じて、アプリケーションの技術的な機能をできるだけ早く高い品質でデリバリーすることを優先します。一方、プラットフォームエンジニアリングチームは、開発チームの運用ニーズを把握し、そうしたニーズに円滑に応えるためのプラットフォーム、ツールチェーン、ワークフローを構築することに重点を置いています。つまり、プラットフォームエンジニアリングでは開発そのものではなく、ソフトウェア開発に使うプラットフォームを構築して保守することに注力します。
ツール
DevOpsツールは、ソフトウェアの開発、デプロイ、管理を効率化しながら、監視とアラートを自動化するのに役立ちます。例としては、Jenkins、GitLabなどの継続的インテグレーションと継続的デリバリー(CI/CD)ツールや、Slack、JIRAといったコラボレーションおよびコミュニケーションのためのツールなどがあります。対して、プラットフォームエンジニアリングツールは、インフラリソースのプロビジョニング、デプロイ、管理を自動化します。たとえば、Kubernetes、Terraform、Ansible、AWS CodePipeline、gitStreamなどが挙げられます。
SREとプラットフォームエンジニアリングの比較
SREとプラットフォームエンジニアリングには、次のような類似点があります。
- 自動化:たとえば、どちらの分野もInfrastructure as Code (IaC)ツールを使用して、インフラリソースのプロビジョニングと管理を自動化します。
- 可用性、信頼性、スケーラビリティを重視:SREとプラットフォームエンジニアリングは、監視やアラートといった共通のタスクを通じて、可用性、信頼性、スケーラビリティを確保します。これは、開発チームやエンドユーザーに影響が及ぶ前に問題を検出して解決するのに役立ちます。また、SRE、プラットフォームエンジニアリングのどちらも、スケーラブルなアーキテクチャの設計と実装を行います。
- コミュニケーションとコラボレーション:SREとプラットフォームエンジニアリングのいずれにおいても、開発者、テスト担当者、製品管理チーム、プロジェクト管理チームなど、多くのチーム間のコラボレーションが欠かせません。
次に、違いについて見てみましょう。
主な焦点
SREチームは、監視、トラブルシューティング、インシデント対応などのタスクを通じて、主にシステムの信頼性とスケーラビリティに焦点を合わせています。一方、プラットフォームエンジニアリングチームは、ソフトウェア開発に必要なツールチェーンとワークフローの構築に優先的に取り組み、インフラ機能をセルフサービス化します。
ツール
SREチームは、New Relic、Prometheus、Grafanaなどの監視ツールやアラートツールと、PagerDutyなどのインシデント管理ツールを多用します。これに対し、プラットフォームエンジニアリングチームは、コンテナオーケストレーションツール、Crossplaneなどのインフラ管理ツール、インフラプロビジョニングツールといった、インフラツールの管理を担当します。
メトリクス
SREチームは、レイテンシー、トラフィック、アップタイム、エラー率に関連するメトリクスの監視に注力し、システムの信頼性と可用性の確保に努めます。対照的に、プラットフォームエンジニアリングチームは次のようなメトリクスを測定します。
- リードタイム、デプロイの頻度などのインフラの生産性
- MTTR、変更の失敗率などの安定性
- リソースの割り当てなどの効率に関するメトリクス(インフラを効率的に管理するため)
SRE、DevOps、プラットフォームエンジニアリングの連携
これらの業務には、果たすべき独自の責任がそれぞれあるものの、確かに作業には重複するところがあります。ソフトウェアの開発やデリバリーをスムーズに進め、本番システムを問題なく稼動させるために現在では、SRE、DevOps、プラットフォームエンジニアリングはいずれも相互に関連するようになっています。
これら3つの職務ではいずれも、開発者、運用チーム、ステークホルダー間の緊密なコラボレーションとコミュニケーションを促進し、相互のニーズに対応することで、全員がビジネス要件、目標、問題について認識を合わせられるようにします。
- サイトリライアビリティエンジニアはDevOpsエンジニアと緊密に連携して、開発、テスト、デプロイのタスクの大半が自動化されるように努めます。また、CI/CDパイプラインを最適化することによって、開発の迅速化と効率化にも取り組みます。
- DevOpsエンジニアはプラットフォームエンジニアと協力して、開発を支え、スムーズにデプロイするために必要なインフラ、ワークフロー、ツールを確保します。両者は協力して、開発チームの要件を満たす柔軟でスケーラブルなプラットフォームを構築します。
- プラットフォームエンジニア、DevOpsエンジニア、サイトリライアビリティエンジニアは、インシデント対応とインシデント後の分析にも協力して対応します。インシデント対応を主導するのはサイトリライアビリティエンジニアですが、プラットフォームエンジニアとDevOpsエンジニアは、根本原因の特定、問題の修正や再発を防ぐための対策の実施を支援します。
- SREチームはプラットフォームエンジニアと協力して、信頼性、拡張性、安全性に優れたインフラを確立します。さらに、問題をより迅速に特定して対応するために必要な監視ツールとアラートツールの実装も担当します。
- サイトリライアビリティエンジニア、プラットフォームエンジニア、DevOpsエンジニアは協力して、Infrastructure as Code (IaC)のベストプラクティスを実装します。その目標は、インフラのリソースをプロビジョニングして管理することで、スケーラビリティを向上させ、ミスを減らし、一貫性を維持することです。
- DevOpsエンジニア、サイトリライアビリティエンジニア、プラットフォームエンジニアは、ナレッジを共有するためのイニシアチブとクロストレーニングを行って、コラボレーションと学びのカルチャーを育みます。このようにすることで、チームメンバー間の結束が深まり、力を合わせて複雑な課題に対処し、開発と運用の変革を推進できるようになります。
まとめ
現在のペースの速いソフトウェア開発環境では、よりスムーズな開発とデプロイ、本番システムの改善のためのさまざまな要件を満たすために、SREチーム、DevOpsチーム、プラットフォームエンジニアリングチーム間のコラボレーションが求められます。SREチームの主な焦点はソフトウェアシステムの信頼性の向上にあるのに対し、DevOpsチームは運用チームとの緊密なコラボレーションを通じてソフトウェアの開発とデプロイを効率化します。
他方、プラットフォームエンジニアリングチームは、開発チームに必要なツールチェーンとワークフローを提供することで、インフラを円滑に利用できるようにします。自動化と監視は、3つの職務すべてに共通するタスクであり、使用するツールも似ています。
したがって、3者の役割は明確に分かれているものの、その責任は状況によって重複する、といえるでしょう。
関連記事

サイトリライアビリティエンジニア(SRE)の面接を準備する方法

Splunk Database Monitoringでデータベースパフォーマンスの問題をより迅速に解決
