はじめに
みなさんはPlatform Engineeringという言葉を聞いたことはありますか?
近年急速に注目を浴びつつある技術分野で、Gartner社による2024年の戦略的技術トレンドTop10[1]に入るなど、非常に期待されている考え方です。技術トレンドの多くがAI関連の技術に占められる中でも存在感を発揮していることからも、その関心が伺えます。
では、このPlatform Engineeringとは、一体どのような考え方で、どのようなメリットをもたらしてくれるものなのでしょうか?
本連載では、Platform Engineeringとは何か、そのメリットや実践など、さまざまな観点から解説していきます。前半では理論編として、既に提唱されているソフトウェア開発の重要な考え方(Team Topologies、SRE、プロダクトマネジメント等)との関係を整理していくアプローチを中心にPlatform Enginneringの理解を深めていきます。
後半には実践編として、Internal Developer Portalのハンズオンや、Platform Engineeringを実践している企業の事例紹介なども企画しています。
[1] Gartner Identifies the Top 10 Strategic Technology Trends for 2024
右肩上がりする開発者の認知負荷
まずはPlatform Engineeringが注目される背景から説明しましょう。
近年開発者の間で用いられることが増えてきた言葉として、「認知負荷」があります。たとえば開発者がアプリケーションの開発を行ったとします。アプリケーションをサービスとして公開するためには、インターネットから利用可能になるようデプロイを行う必要がありますね。
デプロイ先として、今であればクラウドを利用するのが一般的でしょう。ですが、クラウドと言ってもたくさんのサービスがあります。AWS、Azure、Google Cloudといったメガクラウドもありますし、Vercelのようなアプリケーションプラットフォーム、Cloudflareなどが提供するエッジコンピューティングのサービスなど、さまざまな選択肢が溢れかえっています。
メガクラウド1つに絞ったとしても、そこにはVMの他にコンテナを動かすサービス、マネージドKubernetes、サーバーレスなど数え切れないほどの選択肢があります。自分のアプリケーションに適したサービスはどれなのか、調べるだけで数日かかってしまいそうです。
頭を悩ませるのはクラウド環境だけではありません。コンテナを作ってデプロイする場合は、手元でコンテナイメージを作成するためのDockerfileを書く必要がありますし、継続的にテストを回していくためのCIパイプライン、デプロイを自動化するCDパイプラインも必要です。
その他、会社によってはセキュリティスキャンも必要とされているでしょうし、他にもあれこれ設定しないといけないものがあるでしょう。
そう、現在の開発者は、アプリケーションを開発するだけでなくこれらの環境にまで気を配る必要があるのです。考えることが多すぎて、学習も頭の切り替えも大変ですね。この大変さのことを、「認知負荷が高い」状態と呼びます。
10年ほど前までは、ここまで認知負荷は高くありませんでした。ですが、クラウドの普及やコンテナをはじめとしたクラウドネイティブ技術の登場、マイクロサービスアーキテクチャの浸透、DevOpsの普及に基づいたエンジニアの担当範囲の拡大などが原因となり、世界中で認知負荷の増大が課題となっているのです。
本来注力すべきことに集中できない認知負荷の高さは、生産性の低下をもたらします。一説によると、開発者は1日のうち1時間以下しかコーディングに時間を割けていないとも言われています[2]。
また、人手不足が深刻化する昨今、開発もクラウドも自動化も得意とするエンジニアの確保は非常に困難です。開発効率以前に、人がおらず何も始められないというリスクがあるのが、昨今のITを取り巻く環境です。