メインコンテンツへスキップ

CI/CD結合テスト:実践的なパイプライン・ガイド

並列化、ゲーティング、オブザーバビリティのベストプラクティスを活用し、信頼性の高いCI/CD結合テストパイプラインを設計する方法を学びましょう。

CI/CD結合テスト:実践的なパイプライン・ガイド

決済サービスの変更が、数千のユニットテストをパスしたとしても、本番環境で障害を引き起こすことがあります。これは、課金用の API が、サービスが想定しているものとは異なる方法でべき等性キーを解釈するためです。この失敗は、コミットがパイプラインの高速なフェーズを通過した後、夜間の結合テストジョブがインターフェースに到達するまで、気づかれないまま放置される可能性があります。

それが、 CI/CD結合テストにおける運用上の課題です。ユニットテストは、分離されたロジックが正しく動作することを証明します。結合テストは、コンポーネント、サービス、スキーマ、キュー、および外部依存関係が依然として整合しているという証拠を提供します。現代的なデリバリーパイプラインにおいて、その証拠はトリアージの判断材料となるべきであり、開発者が無視することを学習してしまうような、低速なチェックの壁になってはなりません。

CI/CDは、主流のソフトウェアデリバリーモデルとなりました。 mablによる2024年DevOpsテストレポート ほぼ 世界の組織の90% がDevOpsへの変革を優先していますが、一方で 50% のテスターはCI/CDプロセスの定義や維持に関与しておらず、わずか 10% の組織がCI/CDを全く導入していないと報告しています。その実質的な影響は明白です。統合検証は、デリバリーの規模に合わせて運用される必要があります。

目次

なぜ統合テストがCI/CDのコントロールポイントなのか

統合テストは、リリースリスクが具体化する場所です。ユニットテストでは決済ハンドラーがべき等キーを正しくフォーマットできるかを確認できますが、ハンドラー、HTTPクライアント、課金 API、永続化レイヤー、そしてリトライ動作が連携した際に正しく動作するかを証明できるのは、統合テストだけです。

そのため、統合ステージは継続的インテグレーション(CI)と継続的デリバリー(CD)の間の自然なコントロールポイントとなります。ユニットテストがパスしたからといって、コミットがデプロイ可能であると判断すべきではありません。変更したインターフェースが本番に近い構成でも動作するという、信頼できるエビデンスを示すことで、初めてデプロイへと昇格させるべきなのです。

CI/CDパイプラインにおいて、統合テストがいかに重要な品質管理ポイントとして機能するかを示す図。

自動検証のない頻繁な統合は、単に欠陥の流出を早めるだけなので、この区別は重要です。CI/CD改善アプローチの体系的なレビューでは、ビルドとテスト時間の短縮、結果の可視化向上、継続的テストのサポート、欠陥の検出、デプロイの信頼性向上といった優先事項が特定されています。また、同研究における別のレビューでは、継続的インテグレーションを「テストを含む自動ビルドによって検証される、頻繁な code 統合」と定義しており、これにより欠陥を迅速に検出できるとしています。

コントロールポイントを意図的に構築する

まず、テストがサポートする意思決定に基づいて、統合テストを以下のように分類することから始めます:

  • ブロッキング・テスト 重要な契約を保護し、マージやプロモーションの前に同期的に実行します。
  • クアランティン(隔離)テスト 可視性は維持してエビデンスを出し続けますが、チームが不安定性の調査を行っている間、デリバリーをブロックすることはありません。
  • 非同期テスト コミットが高速なゲートを通過した後、より広範なワークフロー、フルステージング構成、またはコストのかかるインフラを検証します。

「すべてのテストをCIに含めるべきか」を議論するよりも、この考え方の方が有用です。重要なのは、そのテストが特定のプロモーションの意思決定に影響を与えるほど信頼でき、価値があるかどうかです。

実践ルール: 統合テストスイートの有無ではなく、安定した統合のエビデンスに基づいてゲートを設けてください。

実装の残りの部分は、そのルールに従います。インターフェースが失敗する可能性がある場合は本番に近い依存関係を使用し、独立したチェックを並列化し、誤検知を測定し、クアランティンとプロモーションの明確な条件を定義します。この取り組みをより広範なデリバリープラクティスに繋げたいチームは、以下も参照してください: 継続的インテグレーション(CI)のメリット.

ユニットテストとE2Eテストの中間に位置する統合テスト

テストピラミッドは厳格な法則ではなく、コストモデルです。ユニットテストは関数やクラス、モジュールを分離するため高速です。その速さは即時フィードバックを得るのに理想的ですが、モックを使用すると、シリアライズの差異、データベースの制約、認証設定、キューの挙動といった、システム境界で発生する失敗を見逃す可能性があります。

対照的に、エンドツーエンド(E2E)テストは、フルスタックにわたるユーザー体験を検証するため、リスクの高いワークフローにおいて価値があります。一方で、ブラウザ、ネットワーク、サービス、インフラの境界をまたぐため、原因の特定や安定性の確保が難しくなります。すべてのマージをE2Eテストの完了まで待つことになると、開発者へのフィードバックが遅れ、フォーカスされた API レベルの統合テストよりも情報量が少なくなることがよくあります。

統合テストはその中間を担います。実際の、あるいはそれに近い依存関係を使用することで、完全なUIのオーケストレーションを必要とせずにサービス間の挙動を検証します。このレイヤーでは、HTTPやgRPCの呼び出し、キューへのパブリッシュ、データベースのマイグレーション、キャッシュの相互作用、スキーマの互換性などをカバーできます。

有用な3つの統合テストパターン

Testcontainersを使用したインプロセス・コンポーネントテスト PostgreSQL、Redis、Kafkaなどの依存関係とともにアプリケーションコンポーネントを起動します。永続化、シリアライズ、トランザクション、またはブローカーのセマンティクスに関連する欠陥リスクがある場合、このパターンはセットアップのコストに見合う価値があります。テストの境界を狭く保ちつつ、テストに対して実際の依存関係を提供できます。

Pactやスキーマレジストリを使用したクロスサービス・コントラクトテスト コンシューマーとプロバイダー間の合意に焦点を当てます。チームがサービスを独立してリリースしており、コントラクトの乖離(drift)に対して迅速なフィードバックが必要な場合に非常に有効です。コントラクトテストは振る舞いに関する統合テストの代わりになるものではありませんが、互換性のないインターフェースが共有環境に到達するのを防ぐことができます。

構成済みのステージングスタックに対するAPIレベルのテスト デプロイ済みの複数のサービスを実際のネットワークパス経由で呼び出します。ルーティング、認証、サービスディスカバリ、デプロイ設定、またはインフラストラクチャポリシーが重要なワークフローにこのパターンを使用してください。フルスタックのステージング環境はプロビジョニングコストが高く、失敗時の切り分けも困難なため、テスト対象はビジネス上重要なパスに絞り込んでください。

パターン 実行時 環境の忠実度 最適な用途
Testcontainersを使用したインプロセス・コンポーネントテスト 高速 〜 中速 厳選された実際の依存関係 データベース、キャッシュ、ブローカー、およびアプリケーションコンポーネントの挙動
Pactやスキーマレジストリを用いたコンシューマー駆動契約テスト 高速 インターフェースの再現性が高い API と、独立してリリースされるサービス間のイベント互換性
構成済みのステージングスタックに対する API テスト 中速から低速 システムの再現性が高い ネットワークパス、認証、ルーティング、および重要なマルチサービスワークフロー

同期的なマージスイートは意図的に絞り込みます。実用的な目標は、統合パスを 1マージコミットあたり10分未満に抑えることです、その後、広範なシナリオを非同期実行に移行します。この切り分けについてより詳細な基盤を求めるチームは、以下を確認してください 自動テストに含まれるもの、しかし基本原則はシンプルです。リリース判断に影響を与える部分にのみ、リアリズム(実環境への忠実さ)へのコストを支払うことです。

忠実なテストのための環境とデータの管理

誤った環境で実行されるテストは、誤った安心感を与えます。また、不安定な共有環境でのテストは、誤検知(false failures)を招きます。信頼性の高い CI/CD統合テスト には、依存関係の境界を明確にし、データの状態を再現可能にする環境戦略が必要です。

ソフトウェア統合テストの忠実性を確保するための、環境とデータの管理における3つのステップを示す図。

まずは、忠実に実行できる依存関係から始めましょう。Testcontainersを使えば、ジョブごとに使い捨てのPostgreSQL、Redis、Kafkaインスタンスをプロビジョニングできます。重要な利点はDockerそのものではなく、バージョン、設定、起動、および終了(teardown)を完全に制御できることです。

再現可能なジョブシーケンス

テストの code にセットアップを任せるのではなく、固定されたシーケンスを使用してください:

  1. 依存関係の起動 PostgreSQLコンテナを起動し、プロセスが動いているからといって準備完了と決めつけず、実際のヘルスチェックを待機してください。
  2. マイグレーションの適用 アプリケーションで使用されているものと同じマイグレーションパスを実行してください。本番環境と乖離するような、手動で管理するテスト用スキーマを作成してはいけません。
  3. 決定論的なフィクスチャのロード シナリオに必要なレコードのみをシードし、各ジョブに隔離されたデータを与えてください。これにより、並列実行時に互いの状態を書き換えることを防げます。
  4. コントラクト・アサーションの実行 リクエスト形式、レスポンスの挙動、イベントスキーマ、ステータス遷移、および永続化の結果を検証します。
  5. 環境のクリーンアップ テストが失敗した場合でも、コンテナや一時ボリュームを破棄してください。これにより、後続のジョブが破損した状態を引き継ぐのを防げます。

PostgreSQLの起動に90秒かかるとしても、マイグレーションやトランザクションの欠陥を検知できるなら、それは妥当なコストと言えます。一方で、完全に独立したステージングクラスターを構築するかどうかは別の判断です。それはインフラ消費を増やし、設定の乖離を招き、障害の発生源を増やしてしまいます。まずは最も限定的で忠実な環境から始め、コントラクトの網羅性や本番環境でのインシデントによって、現在の境界では重要な失敗モードを検知できていないことが判明した段階で、環境を広げていくのが良いでしょう。

目的を持った仮想化の利用

サードパーティのシステムの中には、すべてのパイプラインで安全にプロビジョニングできないものがあります。WireMock、Mountebank、Hoverflyなどを使えばそれらの依存関係をシミュレートできますが、そのシミュレーションは単なる「便利な回避策」ではなく、メンテナンスされるべき「コントラクト」として扱う必要があります。理想的なレスポンスのみを返すモックでは、認証の期限切れ、レート制限、不正なペイロード、タイムアウト処理、あるいはスキーマの変更といった問題を見逃してしまいます。

複数のデプロイ済みサービスが連携することでリスクが生じる場合、エフェメラルなプレビュー環境が役立ちます。Docker ComposeはローカルとCIでコンパクトな構成を提供でき、Kubernetesのnamespaceはデプロイ挙動自体をテストする必要がある場合にプルリクエスト環境を分離できます。どのアプローチを採用する場合でも、依存関係のバージョンを固定し、各実行で使用した構成を記録してください。

シークレットの管理にもデータと同じ規律が必要です。認証情報はテストフィクスチャの外に保存し、プラットフォームの保護された仕組みを通じてアクセスをローテーションしてください。 CapgoのCI/CDパイプラインにおけるシークレット管理ガイド リポジトリ設定に機密値が含まれないようにするための有用なガイダンスを提供します。

短いビジュアルウォークスルーは、チームが環境のライフサイクルについて認識を揃えるのに役立ちます:

GitHub Actions、GitLab CI、Jenkins向けのパイプライン例

ランナーが何かよりも、ワークフローの設計の方が重要です。一度ビルドし、依存関係を予測可能な形でプロビジョニングし、独立したテストグループに分割し、機械可読な結果を公開し、ブロッキング境界を明確にします。プラットフォームによって構文は異なりますが、これらの運用ルールは共通です。

GitHub アクション

統合テストをドメインやシャードごとに分割できる場合、マトリックス構成は効果的です。サービスコンテナは依存関係をランナーの近くに保ち、JUnit出力はプルリクエストや下流システムに安定した結果形式を提供します。

name: integration

on:
  pull_request:

jobs:
  integration:
    strategy:
      fail-fast: false
      matrix:
        suite: [billing, orders, notifications]
    runs-on: ubuntu-latest
    services:
      postgres:
        image: postgres:16
        env:
          POSTGRES_PASSWORD: test
          POSTGRES_DB: app_test
        options: >-
          --health-cmd "pg_isready -U postgres -d app_test"
          --health-interval 5s
          --health-timeout 5s
          --health-retries 12
      redis:
        image: redis:7
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with:
          node-version: 22
      - run: npm ci
      - run: npm run test:integration, --suite=${{ matrix.suite }}
      - if: always()
        uses: actions/upload-artifact@v4
        with:
          name: junit-${{ matrix.suite }}
          path: test-results/*.xml

Actionや依存関係のバージョンを固定することで、環境の差異(drift)を抑えられます。GitHub Actionsは主にマトリックスや別ジョブを通じて並列化を実現するため、各シャードが独立したデータを持ち、実行時間が予測可能な場合にのみマトリックスを使用してください。

GitLab CI

GitLab CIでは、準備、テスト実行、レポート作成を分離できます。大規模なリポジトリで異なる統合環境を持つ複数のサービスを管理している場合、Child pipelinesが有効です。Artifactsを使用すれば、テストジョブが失敗してもJUnitの結果を保持できます。

stages:
  - build
  - integration

build-image:
  stage: build
  script:
    - docker build --tag "$CI_REGISTRY_IMAGE:$CI_COMMIT_SHA" .
    - docker push "$CI_REGISTRY_IMAGE:$CI_COMMIT_SHA"

integration:
  stage: integration
  parallel:
    matrix:
      - SUITE: [billing, orders, notifications]
  image: "$CI_REGISTRY_IMAGE:$CI_COMMIT_SHA"
  services:
    - name: postgres:16
      alias: postgres
    - name: redis:7
      alias: redis
  script:
    - ./scripts/migrate-test-db.sh
    - npm run test:integration, --suite="$SUITE" --reporter=junit
  artifacts:
    when: always
    reports:
      junit: test-results/*.xml

サービスの所有権やデプロイ構成の関係で、単一のモノリシックなファイルの維持が困難な場合は、GitLab child pipelinesを使用してください。親パイプラインにはプロモーションの判断を任せるようにしてください。そうしないと、個別のchildはパスしても、リリース全体のシグナルが曖昧になる可能性があります。

Jenkins

セルフホストのagentや特殊なネットワークアクセスが必要なチームにはJenkinsが適しています。宣言的なJenkinsfileを使用すれば、Dockerベースのagentを割り当ててスイートを並列実行できますが、plugin、controller、agent、およびイメージのメンテナンスはチームの責任となります。

pipeline {
  agent none

  stages {
    stage('Build') {
      agent { docker 'node:22' }
      steps {
        sh 'npm ci'
        sh 'npm run build'
        stash name: 'build', includes: 'dist/**'
      }
    }

    stage('Integration') {
      parallel {
        stage('Billing') {
          agent { docker 'my-org/integration-runner:stable' }
          steps {
            unstash 'build'
            sh './scripts/start-test-dependencies.sh'
            sh 'npm run test:integration, --suite=billing'
          }
        }
        stage('Orders') {
          agent { docker 'my-org/integration-runner:stable' }
          steps {
            unstash 'build'
            sh './scripts/start-test-dependencies.sh'
            sh 'npm run test:integration, --suite=orders'
          }
        }
      }
    }
  }

  post {
    always {
      junit 'test-results/*.xml'
    }
  }
}
機能 GitHub アクション GitLab CI Jenkins
並列実行 Matrix jobsおよび別ジョブ parallel およびマトリックスジョブ 宣言型 parallel ステージと分散エージェント
環境制御 ホスト型またはセルフホスト型ランナー ホスト型またはセルフホスト型ランナー セルフマネージドなコントローラーとエージェント
結果の可視性 アーティファクトとチェック注釈 JUnitレポートとアーティファクト JUnitパブリッシャーとビルド履歴
バージョンの再現性 アクション、イメージ、セットアップバージョンの固定 イメージとランナー構成の固定 エージェントイメージとプラグインの制御
運用上の最適な適合性 GitHub中心のリポジトリ GitLab中心のデリバリー 高度なセルフホストのカスタマイズが必要なチーム

すでに GitHub を利用しているチームには、 GitHub Actions によるビルドとリリースの自動化 有用なデプロイパターンを提供できます。重要な設計上の選択は、3つのランナーすべてにおいて共通しています。つまり、コストのかかるテストをすべて同期的なマージブロックにするべきではありません。

不安定な統合テストへの信頼性向上策

リトライは診断には有用ですが、一律のリトライは信頼性戦略として不適切です。本物の欠陥をパスさせてしまったり、環境の不安定さを隠蔽したり、パイプラインの実態よりもダッシュボードの合格率を良く見せてしまう可能性があるためです。

この問題の規模は、公開されているエンジニアリングデータを見れば明らかです。Googleの報告によると、約 テストの16%に 多少の不安定さがあり、全テスト実行の約 1.5%が flakyな結果を返しており、一方で別の調査では Googleのテスト失敗の4.56%が flakyテストに起因していることが分かりました。これは AWSの継続的インテグレーションとデリバリーのテストガイダンスにまとめられています。Googleのデータでも、CIの合格から失敗への遷移の約 84%が 真のバグではなくflakyなものでした。Microsoftのプロジェクトでは、約 4.6%がflakyテストだと報告されています Pantoによる不安定なテスト(flaky test)の統計レビュー調査によると、

ソフトウェア開発パイプラインにおける不安定な統合テストを管理するための、信頼性向上策のフローチャート。

ポリシー変更前に測定を行う

不安定さ(flakiness)の算出式:

不安定な失敗数 ÷ 総実行回数 × 100

以下の指標を使用: 7〜30日間の期間、スイート、テスト、ランナーイメージ、依存関係、環境ごとに算出します。特定のランナーでのみ失敗するテストと、すべての環境で失敗するテストでは、対処すべき問題が異なります。

以下のトリアージカテゴリを使用:

  • プロダクトの不具合: 関連するゲートをブロックし、code またはコントラクトを修正する。
  • 環境の不具合: ヘルスチェック、リソース制限、ネットワーク、または依存関係の設定を修正します。
  • テストの失敗: アサーションの順序、共有状態、タイミング、クリーンアップ、またはフィクスチャの設計を修正します。
  • 原因不明の不安定さ: 一時的に隔離(quarantine)しますが、担当者と期限を必ず設定してください。

一般的な原因を排除する

共有された可変状態は実行順序への依存を生みます。各ジョブに分離されたスキーマ、一意の識別子、またはトランザクションのロールバック境界を割り当ててください。非同期システムでは、任意の sleep ではなく、タイムアウト付きの条件ベースのポーリングが必要です。有効期限のロジックには clock を注入し、プロセスの起動ではなくコンテナのヘルス状態を待機するようにしてください。

シャーディングは実行時間を短縮しますが、不適切なテスト自体を解決するものではありません。各シャードを独立して実行し、すべてのシャードのログを保持した上で、診断のために失敗したテストまたはシャードのみを再実行してください。一つの統合チェックが環境要因で失敗したからといって、パイプライン全体を再実行してはいけません。

テストが隔離状態を解除できるのは、定義された安定性ポリシー(実行環境全体で連続してパスするなど)を満たした場合のみです。具体的な閾値はチームで決定し、ポリシーに記録してください。重要なのは、隔離ラベルを削除することではなく、観測された安定性に基づいて昇格(promotion)が行われることです。

ゲートポリシーとデプロイ昇格ルール

品質ゲートは、一つの問いに答えるべきです。「このアーティファクトは、次の環境へ進むための十分な信頼に足るエビデンスを持っているか?」です。組織が蓄積してきたあらゆるテストを詰め込む場所になってはいけません。

強制力の不足は警鐘です。2025年の調査について、 TestkubeのCI/CDテスト分析 が報告しています。 組織の72%が CI/CDでQAを自動化している一方で、 26% テスト失敗時にデプロイをブロックする品質ゲートを強制できている組織はわずかです。強制力がなければ、リリース判断は記憶や緊急性、あるいは手動のチェックリストに委ねられてしまいます。

ステージごとのゲートを活用する

コミット時には、高速なユニットテストと、変更箇所や重要なインターフェースを保護する安定した統合テストのサブセットでブロックします。ステージングでは、より広範な複合環境でのチェックとデプロイ設定の検証を追加します。本番前には、承認済みアーティファクト、保護環境での検証成功、リスクモデルが求める場合の明示的な承認を必須とします。

ステージ 合格率の要件 隔離可否 承認
コミットまたはプルリクエスト すべてのブロッキングチェックを通過 ブロッキング対象外のテストのみ 自動マージ保護
ステージングへの昇格 すべての重要な統合チェックを通過 ドキュメント化された所有者とリスクレビュー時のみ許可 チームまたはサービスの所有者
カナリアリリースまたは限定ロールアウト 昇格チェックとライブヘルスシグナルを通過 クアランティン(隔離)テストが保護パスをカバーしないこと オンコールまたはリリース担当者
本番環境へのプロモーション 監査証跡を伴う全必須ゲートの通過 ブロッキングパスの隔離なし ポリシーで規定された明示的な承認

「合格率」を単なる数値目標と混同しないでください。テストスイートの合格率が高くても、決済や認証といった重要なパスで繰り返し失敗している可能性があります。振る舞いベースでクリティカルパスの網羅性を定義し、それらのチェックが決定論的にパスすることを要件としてください。

バイパス操作の可視化

ブランチ保護を設定し、ブロッキングチェックの失敗がマージを阻止するようにします。環境保護ルールを設定し、プロモーションに適切な承認とアーティファクトを要求します。インシデント発生時に手動でのオーバーライドが必要になることもありますが、その際は理由、承認者名、タイムスタンプ、およびフォローアップ用のチケットを明示的に記録すべきです。

隔離(Quarantine)は失敗を無視してよいという意味ではありません。証跡を保持しつつデリバリーを継続するための制御された手法です。隔離されたテストが保護されたリリースパスをカバーしている場合、ポリシーによってブロッキング状態に戻すか、プロモーション前にリスク判断を求めるべきです。

導入チェックリストと長期的な信頼のためのオブザーバビリティ

統合テストの失敗には、主に2つのパターンがあります。一つは、膨大なテストスイートによってすべてのマージが遅延するケース。もう一つは、モックを多用しすぎて本番環境で発生するような失敗を検知できないケースです。段階的な導入計画を立てることで、これら両方の罠を回避できます。

ポリシーゲート、高度な環境、オブザーバビリティを網羅した、CI/CD統合テスト実装のための3フェーズ・チェックリスト。

フェーズ1:既存のシグナルの信頼性を高める

まずは既存のパイプラインから始めましょう:

  • 最初のゲートを設定する: 重要なサービス契約を特定し、安定したチェックのみをブロッキングにします。
  • リトライの挙動を定義する: 診断のためのターゲットを絞った再実行は許可しますが、失敗を成功にすり替えるようなサイレントリトライは行わないでください。
  • 並列化を有効にする: ドメイン、依存関係、またはシャードごとにテストスイートを分割し、ジョブごとにデータを分離します。
  • テスト結果を公開する: すべての実行において、JUnitレポート、ログ、コンテナの状態、および失敗の分類を保存します。

この段階では、カバレッジの最大化を追い求めないでください。まずはノイズの最大の原因を取り除き、回復した開発者の信頼を基に、実際の依存関係のカバレッジを広げていきます。

フェーズ2:環境の忠実度(Fidelity)を高める

再現コストの低い依存関係には Testcontainers を導入しましょう。サービスの所有権が分散している場合は、契約テスト(contract tests)を導入します。ルーティング、デプロイ設定、またはサービス間連携の挙動が、単一のジョブでは正確に再現できない場合は、エフェメラル環境を活用してください。

テストの選定はエビデンスに基づいて行うべきです。本番環境のインシデントでマイグレーションの不一致が判明したなら、実際のデータベースパスを追加します。独立してデプロイされたサービス間で API の乖離が発生したなら、コンシューマー駆動契約を追加します。Kubernetes の設定に起因する失敗があるなら、モックで済ませるのではなく、エフェメラルな namespace に対して適切なチェックを実行してください。

フェーズ3:オブザーバビリティを連携させてトリアージを行う

キャプチャ内容: テスト実行時間のパーセンタイル値、環境設定の差異、固定された依存関係のバージョン、リトライ成功率、および OpenTelemetry を介したアプリケーションのログとトレースの相関関係。有用なダッシュボードには以下の項目を表示すべきです:

  • Flake-rate burnup(不安定なテストの推移): どのテストスイートやテストの決定論的な挙動が低下しているか。
  • Mean time to green(復旧までの平均時間): 失敗したパイプラインが復旧までに要した時間。
  • Failure-mode clusters(失敗パターンのクラスタリング): 失敗が code、環境、依存関係、またはテスト設計のいずれかに集中しているかどうか。
  • 隔離対象のインベントリ: どのテストが隔離されているか、誰が責任者か、そしていつレビューが必要か。
  • プロモーションの証跡: 各環境の変更前に、どのゲートを通過したか。

これは、以下の運用上の意味を持ちます: アプリケーションのオブザーバビリティ。ダッシュボードは単なる過去の記録保管庫ではありません。テストがブロックすべきか、非同期で待機すべきか、あるいは隔離に戻すべきかといった、今日の意思決定に影響を与えるものであるべきです。

ブロック対象のサブセット、隔離ルール、環境の所有権、リトライ制限、アーティファクトの要件、およびオーバーライドの手順をまとめた、1ページのチームポリシーを作成してください。重大なインシデントが発生した時だけでなく、失敗データに変化があった際にも見直しましょう。

Capgo は、Webビルド後に署名済み Live Update バンドルのアップロードを自動化する CI/CD 連携を提供します。フィーチャーブランチ、ステージング、本番環境のワークフローをサポートするチャンネルを利用可能です。CapacitorJS や Electron のチームで、統合テストの証跡を制御されたモバイル配信に連携させたい場合は、こちらをご覧ください。 Capgo API とロールアウトのワークフローを確認してください。

Capacitor アプリ向けの Live Update

Webレイヤーのバグが本番に出たときは、アプリストアの審査を何日も待たずに Capgo で修正を配信できます。ネイティブの変更は通常の審査フローに乗せたまま、ユーザーにはバックグラウンドでアップデートが届きます。

最新のブログ記事

Capgo は、本格的なプロフェッショナルモバイルアプリの開発に必要な最高のインサイトを提供します。