コンテンツにスキップ

2026年のプラットフォームエンジニアリング:チームが実際に使う内部開発者プラットフォームの構築

· 4 min read · automation
devopsplatform-engineeringbackstagedeveloper-experiencekubernetesinfrastructure

プラットフォームエンジニアリングは、Gartnerのバズワードから運用上の現実へと変貌しました。2026年までに、大規模なソフトウェアエンジニアリング組織の80%が、アプリケーションデリバリーのための再利用可能なサービス、コンポーネント、ツールを提供する専任のプラットフォームチームを持つようになるでしょう。成功している組織は、単にインフラを構築しているだけではなく、自社の開発者が実際に使いたいと思う製品を構築しています。

成功するInternal Developer Platformと、高価な棚ぼた製品との違いは一つに集約されます:プラットフォームを開発者を顧客とする製品として扱うことです。これは、導入率を測定し(単なる利用ではなく)、チーム全体で自発的な採用を獲得し、開発者ワークフローにおける摩擦を絶え間なく削減することを意味します。

このガイドでは、モダンなプラットフォームエンジニアリングの実践的なアーキテクチャを扱います — 何を構築すべきか、どのツールを使うか、チームをどう構成するか、そしてプラットフォームが実際に機能しているかをどう測定するかについてです。

プラットフォームエンジニアリングが存在する理由

プラットフォームエンジニアリングが解決する問題は明快です:組織がスケールするにつれて、開発者がやるべきこと(フィーチャーの出荷)と対処しなければならないこと(インフラ、セキュリティ、コンプライアンス、オブザーバビリティ)の間のギャップが広がり、最終的に運用の複雑さの重みで生産性が崩壊します。

プラットフォームなしでは、新しいサービスをデプロイするための典型的な開発者ワークフローは次のようになります:

  1. ランタイムを選択する(コンテナ?サーバーレス?VM?)
  2. Dockerfileを書く(安全であることを祈りながら)
  3. CI/CDをセットアップする(パイプライン、シークレット、環境の設定)
  4. インフラをプロビジョニングする(Terraform?CloudFormation?コンソールをクリック?)
  5. ネットワーキングを設定する(Ingress、ロードバランサー、DNS、TLS証明書)
  6. モニタリングをセットアップする(どのツール?ログはどこに?どのアラート?)
  7. シークレット管理を処理する(Vault?環境変数?最善を祈る?)
  8. セキュリティ要件に対応する(スキャニング、ポリシー、コンプライアンスチェック)
  9. ドキュメントを書く(たぶん)
  10. 変更レビュープロセスを通過する(いつかは)

各ステップには、ほとんどのアプリケーション開発者がする必要のない意思決定が含まれています。プラットフォームチームの仕事は、これらの意思決定をセルフサービス機能にエンコードし、開発者が「コードがある」から「プロダクションで稼働中」まで、セキュリティ、コンプライアンス、運用標準が自動的に満たされるガードレール付きでスキップできるようにすることです。

プラットフォームがあれば、同じワークフローは次のようになります:

  1. サービスカタログからテンプレートを選ぶ
  2. 空欄を埋める(サービス名、チーム、ティア)
  3. コードをプッシュする
  4. CI/CD、モニタリング、ネットワーキング、セキュリティが組み込まれた状態でデプロイされる

これが価値提案です:認知負荷を軽減しながら組織の標準を強制する、キュレートされたセルフサービス体験です。

Internal Developer Platformのアーキテクチャ

適切に構造化されたIDPには5つのレイヤーがあり、それぞれが異なる目的を果たします:

レイヤー1:開発者ポータル(インターフェース)

開発者ポータルはプラットフォームのショーフロントです。開発者がサービスを発見し、ドキュメントを読み、新しいプロジェクトを作成し、デプロイメントのステータスを表示する場所です。Backstageは元々Spotifyが構築し、現在はCNCFのインキュベーションプロジェクトであり、IDPを導入した組織の中で約89%の市場シェアを持っています。

ポータルは以下を提供します:

  • ソフトウェアカタログ:すべてのチームが所有するすべてのサービス、API、ライブラリ、インフラコンポーネントのレジストリ。
  • テンプレート(Golden Path):組織のベストプラクティスをエンコードした事前設定済みのプロジェクトスキャフォールド。
  • TechDocs:ポータルで直接レンダリングされるDocumentation-as-Code。
  • プラグインエコシステム:CI/CD、モニタリング、クラウドプロバイダー、セキュリティツールとの拡張可能な統合。
# catalog-info.yaml — Backstageにサービスを登録する
apiVersion: backstage.io/v1alpha1
kind: Component
metadata:
  name: payment-service
  description: Handles payment processing and billing
  annotations:
    github.com/project-slug: myorg/payment-service
    backstage.io/techdocs-ref: dir:.
    pagerduty.com/service-id: P1A2B3C
  tags:
    - python
    - payments
    - tier-1
  links:
    - url: https://grafana.internal/d/payments
      title: Grafana Dashboard
      icon: dashboard
spec:
  type: service
  lifecycle: production
  owner: team-payments
  system: billing
  providesApis:
    - payments-api
  dependsOn:
    - component:user-service
    - resource:payments-db

レイヤー2:Golden Path(舗装された道)

Golden Pathはプラットフォームの最もインパクトのある機能です。開発者が意思決定をする必要がないように、インフラを通る意見のある事前設定済みのパスです。キーワードは「意見のある」です — Golden Pathは「この会社ではPython APIサービスをこのように構築する」と述べ、ゼロからプロダクションまでに必要なすべてを提供します。

良いGolden Pathには以下が含まれます:

  • 標準のディレクトリ構造を持つプロジェクトスキャフォールド
  • 事前設定済みのCI/CDパイプライン
  • セキュリティ標準に基づいて構築されたDockerfile
  • Kubernetesマニフェストまたはデプロイメント設定
  • モニタリングダッシュボードとアラートルール
  • パイプラインに統合されたセキュリティスキャニング
  • ドキュメントテンプレート
# template.yaml — Python API用のBackstage Software Template
apiVersion: scaffolder.backstage.io/v1beta3
kind: Template
metadata:
  name: python-api-service
  title: Python API Service
  description: |
    Create a production-ready Python API service with FastAPI,
    Docker, CI/CD, monitoring, and security scanning pre-configured.
  tags:
    - python
    - fastapi
    - recommended
spec:
  owner: team-platform
  type: service

  parameters:
    - title: Service Information
      required:
        - name
        - owner
        - description
      properties:
        name:
          title: Service Name
          type: string
          pattern: '^[a-z][a-z0-9-]*$'
          description: Lowercase alphanumeric with hyphens
        description:
          title: Description
          type: string
          maxLength: 200
        owner:
          title: Owner Team
          type: string
          ui:field: OwnerPicker
          ui:options:
            allowedKinds: [Group]

    - title: Infrastructure
      properties:
        tier:
          title: Service Tier
          type: string
          enum: [tier-1, tier-2, tier-3]
          enumNames:
            - "Tier 1 — Business critical (99.9% SLA)"
            - "Tier 2 — Important (99.5% SLA)"
            - "Tier 3 — Internal tooling (best effort)"
          default: tier-2
        database:
          title: Database
          type: string
          enum: [none, postgresql, redis, both]
          default: none

  steps:
    - id: scaffold
      name: Generate Project
      action: fetch:template
      input:
        url: ./skeleton
        values:
          name: ${{ parameters.name }}
          owner: ${{ parameters.owner }}
          description: ${{ parameters.description }}
          tier: ${{ parameters.tier }}
          database: ${{ parameters.database }}

    - id: publish
      name: Create Repository
      action: publish:github
      input:
        repoUrl: github.com?owner=myorg&repo=${{ parameters.name }}
        description: ${{ parameters.description }}
        defaultBranch: main
        protectDefaultBranch: true
        requireCodeOwnerReviews: true

    - id: register
      name: Register in Catalog
      action: catalog:register
      input:
        repoContentsUrl: ${{ steps.publish.output.repoContentsUrl }}
        catalogInfoPath: /catalog-info.yaml

    - id: create-argocd-app
      name: Setup Deployment
      action: argocd:create-application
      input:
        appName: ${{ parameters.name }}
        repoUrl: ${{ steps.publish.output.remoteUrl }}
        path: k8s/overlays/production

レイヤー3:インフラオーケストレーション

ポータルとテンプレートの背後には、実際にインフラをプロビジョニングし管理するレイヤーが必要です。2026年のベースラインスタックは:

  • Kubernetes:コンテナオーケストレーション用(EKS、GKE、AKS、またはセルフマネージド)
  • TerraformまたはOpenTofu:インフラプロビジョニング用
  • ArgoCDまたはFlux:GitOpsベースのデプロイメント用
  • Crossplane:Kubernetesネイティブのインフラ管理用

Crossplaneは特別な注目に値します。プラットフォームチームがインフラをKubernetesカスタムリソースとして公開できるからです。開発者がTerraformを書く代わりに、データベースを要求するYAMLマニフェストを提出し、CrossplaneがクラウドプロバイダーのAPIを通じてプロビジョニングします。

# Crossplaneを通じてPostgreSQLデータベースを要求する
apiVersion: database.platform.example.com/v1alpha1
kind: PostgreSQLInstance
metadata:
  name: payment-service-db
  namespace: team-payments
spec:
  parameters:
    storageGB: 50
    version: "16"
    tier: production  # 適切なインスタンスクラスにマッピング
    backup:
      enabled: true
      retentionDays: 30
  compositionRef:
    name: aws-postgresql  # プラットフォームチームがこのCompositionを管理
  writeConnectionSecretToRef:
    name: payment-db-credentials
    namespace: team-payments

開発者は必要なものを記述してデータベースを要求します。プラットフォームチームのCrossplane Compositionが方法を処理します — どのクラウドプロバイダー、どのインスタンスタイプ、どのネットワーク設定、どのバックアップポリシー。組織がAWSからGCPに移行する場合、プラットフォームチームがCompositionを更新し、開発者は一行も変更しません。

レイヤー4:CI/CDとデリバリー

デリバリーレイヤーは、コードコミットからプロダクションデプロイメントまでのパスを自動化します。モダンなプラットフォームは、チームがゼロから構築するのではなく継承する標準化されたパイプラインを提供します。

# .github/workflows/platform-pipeline.yaml
# Golden Pathテンプレートから継承 — チームはパイプラインコードではなく設定でカスタマイズ
name: Platform Standard Pipeline

on:
  push:
    branches: [main]
  pull_request:
    branches: [main]

jobs:
  quality-gates:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - name: Security Scan (SAST)
        uses: platform/security-scan@v3
        with:
          severity-threshold: high
          fail-on-vulnerability: true

      - name: Dependency Audit
        uses: platform/dependency-audit@v2
        with:
          policy: organizational-standards

      - name: Unit Tests
        run: make test

      - name: Container Build & Scan
        uses: platform/container-build@v4
        with:
          registry: registry.internal
          scan-policy: strict

  deploy-staging:
    needs: quality-gates
    if: github.ref == 'refs/heads/main'
    runs-on: ubuntu-latest
    steps:
      - name: Deploy to Staging
        uses: platform/gitops-deploy@v3
        with:
          environment: staging
          auto-promote: false  # プロダクションへの手動プロモーションが必要

  deploy-production:
    needs: deploy-staging
    runs-on: ubuntu-latest
    environment: production  # 承認が必要
    steps:
      - name: Deploy to Production
        uses: platform/gitops-deploy@v3
        with:
          environment: production
          strategy: canary
          canary-percentage: 10
          promotion-criteria:
            error-rate-threshold: 0.1%
            latency-p99-threshold: 500ms

レイヤー5:オブザーバビリティとフィードバック

最後のレイヤーはフィードバックループを閉じます。プラットフォームを通じてデプロイされたすべてのサービスは、組織標準に設定されたモニタリング、ロギング、アラーティングを自動的に取得します。

# Golden Pathテンプレートにより自動生成
# monitoring/alerts.yaml
groups:
  - name: payment-service-slo
    rules:
      - alert: HighErrorRate
        expr: |
          sum(rate(http_requests_total{service="payment-service",status=~"5.."}[5m]))
          /
          sum(rate(http_requests_total{service="payment-service"}[5m]))
          > 0.001
        for: 5m
        labels:
          severity: critical
          tier: "1"
          team: payments
        annotations:
          summary: "ペイメントサービスのエラー率が0.1%を超過"
          runbook: "https://portal.internal/docs/runbooks/payment-service/high-error-rate"

      - alert: HighLatency
        expr: |
          histogram_quantile(0.99,
            sum(rate(http_request_duration_seconds_bucket{service="payment-service"}[5m])) by (le)
          ) > 0.5
        for: 5m
        labels:
          severity: warning
          tier: "1"
          team: payments

プラットフォームの成功を測定する

プラットフォームエンジニアリングの成熟度における重要な転換は、利用の測定から導入の測定への移行です。利用は人々がプラットフォームと対話していることを示します。導入は、代替手段がある中でプラットフォームを使うことを選択していることを示します。

主要メトリクス

導入率:新しいサービスの何パーセントがプラットフォームのGolden Pathを通じて作成されているか、手動と比較して?目標:12ヶ月以内に80%以上。

最初のデプロイメントまでの時間:新しい開発者が最初の変更をプロダクションにデプロイするまでにどのくらいかかるか?成熟したプラットフォームでは、1日未満であるべきです(オンボーディングを含む)。

プラットフォーム迂回率:チームがどのくらいの頻度でプラットフォームを回避しているか?すべての迂回は、プラットフォームが実際のニーズを満たしていないシグナルです。例外リクエストを追跡してください。

認知負荷の削減:四半期ごとに開発者を調査してください。質問:「インフラ対フィーチャー作業に費やす時間はどのくらいですか?」トレンドが絶対数より重要です。

平均復旧時間(MTTR):プラットフォーム上に構築されたサービスは、標準化されたモニタリング、ランブック、デプロイメントロールバックメカニズムがあるため、インシデントからより早く復旧するべきです。

# platform_metrics.py — プラットフォームの健全性メトリクスを追跡・報告
from dataclasses import dataclass
from datetime import datetime, timedelta

@dataclass
class PlatformMetrics:
    total_services: int
    platform_services: int  # Golden Pathを通じて作成
    manual_services: int    # プラットフォーム外で作成
    bypass_requests: int    # 今四半期にリクエストされた例外
    avg_first_deploy_hours: float
    developer_satisfaction: float  # アンケートによる1-10スケール

    @property
    def adoption_rate(self) -> float:
        """プラットフォームを使用しているサービスの割合。"""
        if self.total_services == 0:
            return 0.0
        return (self.platform_services / self.total_services) * 100

    @property
    def bypass_rate(self) -> float:
        """チームがプラットフォームを回避する頻度。"""
        if self.total_services == 0:
            return 0.0
        return (self.bypass_requests / self.total_services) * 100

    def health_report(self) -> str:
        """プラットフォーム健全性サマリーを生成。"""
        status = "healthy" if self.adoption_rate > 80 else "needs attention"
        return (
            f"Platform Health: {status}\n"
            f"  Adoption Rate: {self.adoption_rate:.1f}%\n"
            f"  Bypass Rate: {self.bypass_rate:.1f}%\n"
            f"  Avg First Deploy: {self.avg_first_deploy_hours:.1f} hours\n"
            f"  Developer Satisfaction: {self.developer_satisfaction:.1f}/10\n"
            f"  Total Services: {self.total_services} "
            f"({self.platform_services} platform, "
            f"{self.manual_services} manual)"
        )

プラットフォームチームの構成

プラットフォームチームは、名前を変えたインフラチームではありません。この区別は重要です。なぜなら、採用から優先順位付けまでのすべてに影響するからです。

インフラチームはシステムを構築・維持します。顧客はマシンです。成功メトリクスは稼働率です。

プラットフォームチームは開発者向けの製品を構築します。顧客は人間です。成功メトリクスは導入率です。これは、プラットフォームエンジニアにプロダクト思考、ユーザーリサーチスキル、そして比例する価値なしに複雑さを追加するフィーチャーに「ノー」と言う能力が必要であることを意味します。

中規模組織(開発者200-500人)の典型的なプラットフォームチーム構成:

  • Platform Product Manager(1名):ロードマップを管理し、開発者フィードバックに基づいて優先順位付けし、導入メトリクスを追跡。
  • Platform Engineer(3-5名):プラットフォームコンポーネントを構築・維持 — Backstageプラグイン、Golden Pathテンプレート、Crossplane Composition、CI/CDパイプラインテンプレート。
  • Developer Advocate(1-2名):チームのオンボーディング、ドキュメント作成、社内ワークショップの実施、フィードバックの収集。
  • SRE/Reliability(1-2名):プラットフォーム自体の信頼性を確保し、Kubernetesクラスターを管理し、プラットフォームインフラのインシデントレスポンスを処理。

よくある間違い

**開発者と話さずに構築する。**プラットフォームが失敗する最大の理由は、プラットフォームチームが開発者が実際に必要とするものではなく、必要だと思うものを構築することです。ユーザーにインタビューしてください。作業を観察してください。時間を失っている箇所を測定してください。

**導入を獲得するのではなく義務化する。**チームをプラットフォームに強制しなければならないなら、プラットフォームが十分良くないということです。最高のプラットフォームは開発者体験で勝利します — 代替手段よりも速く、簡単で、信頼性が高いのです。

**早すぎる過度な抽象化。**最も一般的なサービスタイプのGolden Pathを一つから始めてください。正しく作ってください。そして拡張してください。初日からあらゆるユースケースをサポートしようとするプラットフォームは、結局どれも十分にサポートできません。

**エスケープハッチを無視する。**開発者にはGolden Pathが合わない場合にカスタマイズする能力が必要です。プラットフォームが出口のない塀で囲まれた庭なら、チームは個々の制限を回避するよりも完全に離脱するでしょう。

**一回限りのプロジェクトとして扱う。**プラットフォームは製品です。継続的な投資、フィードバックループ、イテレーションが必要です。プラットフォームを立ち上げたチームが1年後もまだ改善しているべきです。

はじめに

ゼロからスタートする場合、実践的な手順は次の通りです:

1-2ヶ月目:10の開発チームにインタビューする。デプロイメントワークフローをエンドツーエンドでマッピングする。3つの最大の摩擦点を特定する。基本的なソフトウェアカタログでBackstageをセットアップする。

3-4ヶ月目:組織で最も一般的なサービスタイプ(おそらくREST API)のための最初のGolden Pathを構築する。CI/CD、コンテナビルド、Kubernetesデプロイメント、基本的なモニタリングを含める。ボランティアチームと共にデプロイする。

5-6ヶ月目:パイロットチームのフィードバックに基づいてイテレーションする。TechDocs統合を追加する。2番目に一般的なサービスタイプのための2つ目のGolden Pathを構築する。3-5チームを追加でオンボーディングする。

7-12ヶ月目:導入をスケールする。セルフサービスインフラのためにCrossplaneを追加する。プラットフォームメトリクスのダッシュボードを構築する。プラットフォーム周辺の社内開発者コミュニティを確立する。新規サービスのGolden Path導入率50%を目標にする。

2026年にプラットフォームエンジニアリングから最も価値を得ている組織には共通の特徴があります:プラットフォームを自分たちが構築する最も重要な製品として扱っています — なぜなら、他のすべての製品がそれに依存しているからです。