デベロッパー デバイス プラットフォームのデバイス実行の概要

Developer Device Platform デバイスランへようこそ。このサービスを使用すると、クラウド内の物理デバイスと仮想 Android デバイス、物理 iOS デバイスでテストと実行可能ファイルを実行できます。このページでは、Android インストルメンテーション テスト、Android 実行可能ファイル、iOS テストの実行における機能と共通点について説明します。プラットフォーム固有の手順については、 Android 用 デバイスラン と iOS 用 デバイスラン を ご覧ください。

Firebase Test Lab から Developer Device Platform に移行する場合は、 移行ガイド、コマンドとフラグの 翻訳、AI エージェントの移行 スキルをご覧ください。

この Google Cloud CLI を使用するには、 Google Cloud プロジェクト ID を指定する必要があります。コマンドの概要については、gcloud beta device-run をご覧ください。

主な機能

Developer Device Platform デバイスラン は、物理デバイスと仮想モバイルデバイスで自動テストスイートを 実行できる Google Cloud サービスです。最新の継続的インテグレーションと継続的デリバリー(CI/CD)ワークフロー向けに構築されたデバイスランは、Google Cloud CLI(gcloud beta device-run)を介してコマンドライン制御を提供します。これにより、チームは専用ハードウェアと仮想環境でテストスイートを実行、管理、スケーリングできます。

1. クロスプラットフォームの自動テスト

  • Android と iOS のサポート: デバイスランは、組み込みテスト フレームワークをサポートしています。これには、Android インストルメンテーション テスト(.apk)、Android 実行可能ファイル(コンパイル済みバイナリ)、iOS XCTest(.ipa または .zip)が含まれます。
  • 柔軟なデバイス ターゲティング: OS とモデル の識別子(Pixel モデルや iPhone モデルなど)を使用して、デバイス カタログにリストされている特定の物理デバイスまたは仮想デバイスを ターゲットにします。--device フラグを使用します。
  • マルチデバイスの並列実行: カンマ区切りのデバイス ID を指定するか、複数の --device フラグを指定して、複数のデバイスで同じテストスイートを 同時に実行します。

2. 柔軟な実行モードと制御

  • _同期送信と非同期送信_: テスト実行はデフォルトで同期的に動作し、完了時に概要が表示されます。--async フラグを追加すると、非ブロッキング実行のセッション ID がすぐに返されます。これは、後で gcloud beta device-run sessions wait を使用してモニタリングできます。
  • カスタム実行タイムアウト*: --instrumentation-timeout または --xctest-timeout を使用して、実行時間の制限を構成します。
  • フレーキー テストの再試行: --flaky-test-attempts フラグを使用して、フレーキー テスト実行の最大再試行回数を設定します。

3. ソフトウェア バージョンと依存関係の管理

  • 構成可能なテスト環境*: テスト実行を開始する前に、特定の ソフトウェア環境バージョン( AndroidX Test Orchestrator や Apple Xcode など)を検出、検査、選択します。
  • バージョンの検出: gcloud beta device-run software-versions list と describe コマンドを使用して、アクティブなソフトウェア パッケージ、サポートされている OS バージョン、 デフォルトのランタイム仕様を表示します。

4. ストレージとアーティファクトの管理

  • Cloud Storage の統合: テスト入力(APK、IPA、サポート アプリ) と出力アーティファクト(ログ、テストレポート)は Cloud Storage に保存されます。
  • バケットの柔軟性: デフォルトでは、 PROJECT_ID-devicerun という名前のプロジェクト バケットに自動的に設定されるか、 --bucket-name フラグで指定されたカスタム バケットにルーティングされます。このバケットは完全に制御できます。不要になったら、手動でコンテンツを削除するか、バケットで自動ライフサイクル管理を構成する必要があります。手順については、オブジェクトの削除 についてをご覧ください。
  • 直接クラウドパス: 大きな ファイルの場合は、既存の gs:// パスを直接参照して、アップロードのオーバーヘッドを削減します。

5. Android の高度なテスト機能

  • Android Test Orchestrator: 各テストを独自の Instrumentation インスタンスで実行してテスト実行を分離し、アプリの状態を共有しないようにして、アプリケーションのクラッシュを分離します。
  • テストのシャーディング:
    • 均一なシャーディング: 指定された数 のシャード(--sharding-option=uniform)にテストケースを均等に分割します。
    • スマート シャーディング: 過去のテスト実行データを使用して、シャード間でテスト ケースを動的に分散し、特定の合計実行 時間をターゲットにします(--sharding-option=smart)。

6. セッションの管理と診断

  • 完全なセッション制御: アクティブなテスト実行または過去の テスト実行を、sessions list、sessions describe、sessions cancel を使用して一覧表示、記述、フィルタ、キャンセルします。
  • 早期入力検証: 送信されたテスト バイナリと構成アーティファクトに対して自動検証を実行し、エラーが発生した場合は、明示的なエラーの詳細と 根本原因(ターゲット パッケージの不一致など)を表示します。

主要な設定

必須フラグ

次のフラグが必要です。

  • デバイス: --device を使用してデバイスを指定します: --device shiba-35 または --device iphonese3-18-4
  • テスト または 実行可能ファイル: テスト実行の場合は --test(--test /path/to/test.apk または --test /path/to/MyTests.zip)を使用してテスト パッケージを指定します。Android 実行可能ファイルの実行の場合は、--executable(--executable /path/to/my_executable)を使用して実行可能バイナリまたはスクリプトを指定します。

次の構成オプションは、デバイスラン セッションで共通です。

入出力 Cloud Storage パス

  • カスタム Cloud Storage バケット: 入力と出力にカスタム Cloud Storage バケットを指定できます。--bucket-name=my-custom-bucket --bucket-name= フラグを使用して Cloud Storage バケットを指定しない場合、 Google Cloud CLI は PROJECT_ID-devicerun という名前のデフォルト バケットを使用します。
  • 入力ファイル: --test、 --executable、--apps、--additional-apps、--other-files-to-push、または --xctestrun-file フラグでローカルパスを指定すると、コマンドを実行するたびに、Google Cloud CLI は gs://BUCKET_NAME/automation/inputs/DATE_TIME_FOUR_CHARS_SUFFIX/ の Cloud Storage バケットに自動的にコピーします。 BUCKET_NAME のデフォルトは PROJECT_ID-devicerun です。
  • クラウドパス: 大きなファイルのアップロードには時間がかかるため、Cloud Storage gs:// パスを使用して 直接参照することで、アップロード時間を短縮できます。
  • [Result files]: 出力アーティファクトは、Cloud Storage バケットにアップロードされます。gs://BUCKET_NAME/automation/sessions/session-[SESSION_ID]/

入力の検証

Developer Device Platform は、アーティファクトなどの入力を検証しようとします。誤った入力が検出されると、PASSED または FAILED ではなく ERROR を返します。

Session [session-94b57778] finished with result [ERROR].
JOB NAME  EXECUTION NAME  EXECUTION RESULT
job-000   execution-000   ERROR

次に、sessions describe コマンドに --full を追加して、セッションの詳細を表示します。

gcloud beta device-run sessions describe --full session-94b57778

出力は次のようになります。

name: projects/user-test1/locations/global/sessions/session-94b57778
sessionConfig:
  displayName: instrumentation-session
  jobConfigs:
  -   action:
      androidInstrumentationTest:
        testInstallable:
          files:
          -   gcsInputFile:
              path: gs://user-test1-devicerun/automation/inputs/2026-09-16_18:55.17372947_EECF/my-test.apk
    allocationConfig:
      deviceConfigs:
      -   actions:
        -   androidLogcat: {}
        requirement:
          deviceId: mediumphone-arm-34
    displayName: job-000
  outputDirectoryConfig:
    gcsOutputDirectory:
      path: gs://user-test1-devicerun/automation/sessions
sessionReport:
  endTime: '2026-09-16T18:55:49.721Z'
  id: ed681f23-669b-4464-8a93-b28456e58136
  jobReports:
  -   displayName: job-000
    endTime: '2026-09-16T18:55:45.839Z'
    executionReports:
    -   displayName: execution-000
      endTime: '2026-09-16T18:55:46.694Z'
      id: ce370173-af94-4dd7-acc6-0863e4d2e9ec
      result:
        cause:
          summary:
            message: The instrumentation target package does not match any of the
              installable packages.
            reason: INSTRUMENTATION_TARGET_MISMATCH
            type: CUSTOMER
        resultType: ERROR
      startTime: '1970-01-01T00:00:00Z'
      status:
        statusType: PENDING
    id: 953b5106-3c20-40f0-aceb-18af89cd1b83
    result:
      cause:
        summary:
          message: The instrumentation target package does not match any of the installable
            packages.
          reason: INSTRUMENTATION_TARGET_MISMATCH
          type: CUSTOMER
      resultType: ERROR
    startTime: '2026-09-16T18:55:31.651Z'
    status:
      statusType: DONE
  result:
    resultType: ERROR
  startTime: '2026-09-16T18:55:24.442Z'
  status:
    statusType: DONE

次のステップ

Android のテストまたは実行可能ファイルを実行するまたは iOS テストを実行する with Developer Device Platform。