Platform Engineeringとは何か
Platform Engineeringとは、最近よく聞かれている言葉と思っています。
実際Meet Upであったり、PlatformEngineeringKaigiといったカンファレンスも開催されていて、結構色々なところや耳目を集めるようになった、このPlatform Engineeringについて簡単に解説していけたらと思います。
このPlatform Engineerng、小難しい言葉で書くと、「クラウドネイティブ時代においてソフトウェア開発組織にセルフサービスの機能を提供するためのツールチェーンやワークフローを設計・構築する技術分野」らしい。よくわからないですよね。
簡単に言えば、開発チーム全体で使える内部開発プラットフォーム(Internal Developer Platform (IDP)
)を社内に整備して、インフラや開発ツールをサービスのように提供することで開発者の生産性を高める取り組みを指すことが多いです。
そしてこうしたプラットフォームを社内のプロダクトとして扱い、開発者体験(Developer Experience, DX)を向上させる点に特徴があります。
なぜPlatform Engineeringが出てきた背景
Platform Engineeringという概念が本格的に登場したのはここ数年のことです。
特に注目を集める大きなきっかけはGartnerでハイプサイクルで取り上げられたのがきっかけだろうと思います。
ルーツ
大手テック企業では2010年代初頭から、開発者がインフラをセルフサービスで扱える内部ツールやポータルを整備していました。例えばNetflixやAmazonでは、開発者自身が仮想マシンをプロビジョニングできるポータルなど、内部向けのプラットフォームが早くから導入されていたようです。(出典: developers.redhat.com)
こうした取り組みは、社内の開発効率を劇的に高め、後に一般化するプラットフォームエンジニアリングの原型となりました。
開発手法における背景
2010年代後半になると、クラウドやマイクロサービスの普及によって状況が大きく変化します。2015年頃にはKubernetesの登場もあって、多くの企業が従来のモノリシックなシステムからクラウドネイティブなマイクロサービスアーキテクチャへと移行し始めました(出典:orkohunter.net)。
その結果、開発者はコードを書くことに加え、設計・デプロイ・スケーリング・運用までソフトウェアライフサイクル全体に責任を負う場面が増えました(出典:orkohunter.net)。
開発チームに求められる知識領域が爆発的に広がり、このままでは開発者の負荷(認知的負荷)が高くなりすぎるという課題が顕在化したのです。
こうした課題に対する解決策として「内部プラットフォーム(IDP)」を専門に構築・提供する考え方が注目され始めました。2018年にはエバン・ボッチャー氏(Martin Fowlerのサイトに寄稿)が「効果的なデジタルプラットフォームがいかにソフトウェアの提供スピードをスケールさせるか」について言及し、自己サービス型のインフラや標準化されたツール群を備えた内部プラットフォームの重要性を説きました(出典:martinfowler.com)
この中でプラットフォームは単なる技術基盤ではなく、「開発チームが高速に製品機能を届けるために活用できる内部向け製品」であると位置付けられています
Team Topologiesの影響
2019年には、マシュー・スケルトン氏とマヌエル・パイス氏の著書『Team Topologies』がプラットフォームエンジニアリングの概念を後押ししました。同書では、開発チームと別にプラットフォームチームという専門チームを設け、社内向けのプラットフォームを「製品」として提供する組織構造が提唱されています。彼らはDevOps導入の現場でしばしば見られるアンチパターン(責務の不明確さによる停滞)に言及し、それを解消する手段としてプラットフォームチームの必要性を強調しました
つまり「プラットフォームをプロダクトとして扱い、専任チームが継続的に改良していく」という発想が、この時期に明確に打ち出されたのです(出典:uffizzi.com)
以上の流れから、2010年代後半~2020年代にかけてプラットフォームエンジニアリングという考え方が確立しました。大手企業の成功事例や、有識者による理論的支柱(内部プラットフォームの5つの柱)を背景に、多くの組織がこのアプローチを採用し始めています。
まとめ
Platform Engineeringが出てきた背景とその説明をしていきました。
Platform Engineeringとは内部プラットフォームを構築して、それをプロダクトとして扱うことで開発者体験を向上していくことであると、私は認識しています。
そしてその背景にはソフトエンジニアリングの開発手法の発展やコンテナやKubernetesを代表とするクラウドネイティブなツールが背後にあることがわかりました。