Screengrab (Fastlane) — 様なものか、機能とスクリーンショット自動化

著者: IT Sectr 公開日: 2026-04-15 読了時間: 8 分

Screengrabは、Fastlaneエコシステムのユーティリティで、AndroidおよびiOSのモバイルアプリのスクリーンショット作成を自動化します。数十のデバイスで手動で画面をスワイプする代わりに、開発者が1つのコマンドを実行するだけで、Screengrabが必要なすべての画面を独立して撮影します。Fastlane Docs, 2026によると、このツールは同時に最大30言語と、構成で指定されたどのような画面解像度もサポートします。

ポイント

  • Screengrab — AndroidおよびiOSのモバイルアプリのスクリーンショットを自動作成するためのFastlaneツール。
  • 自動化により、数百のスクリーンショットを手動で作成する代わりに、ターミナルで1つのコマンドで実行できます。
  • ローカライゼーション — 追加設定なしで数十言語のスクリーンショットを同時生成。
  • CI/CD — さまざまなパイプラインとの統合: Jenkins、GitHub Actions、GitLab CI。
  • 柔軟性 — 1回の実行で複数のデバイス、向き、言語をサポート。

Screengrabとは何か、なぜ必要か

Screengrabは、モバイルアプリのスクリーンショットを自動作成するために設計されたFastlaneエコシステムのコンポーネントです。このツールは2015年に、Google PlayやApp Storeへの公開には言語ごとに4~10枚のスクリーンショットが必要という問題への対処として登場しました。30言語をサポートする場合、120~300枚の手動撮影が必要です。

手動スクリーンショット作成の問題点

開発者は、シミュレーターまたはデバイスでアプリを手動で起動し、必要な画面までスワイプし、スクリーンショットを撮影し、コンピューターに移し、クロップし、正しいフォルダーに保存します。この手順を言語ごと、向きごとに繰り返します。Google Play Consoleによると、平均的なアプリは2週間ごとに更新され、スクリーンショットが定期的なルーチンになります。

自動化のメリット

Screengrabはこの問題を根本的に解決します: 開発者はUIフレームワーク(AndroidはEspresso、iOSはXCTest)を使用してテストシナリオを記述し、Screengrabが必要なすべてのデバイスと言語で自動的に実行します。Fastlaneがプロセスを統括します: アプリのビルド、テストの実行、スクリーンショットの収集、必要なフォルダー構成へのパッケージ。

結果は、数時間の手動作業の代わりに10~15分で百枚のスクリーンショットが得られます。Googleは重要なUI変更ごとにスクリーンショットを更新することを推奨しており、自動化なしではこのアドバイスは忽略されがちです。

Screengrabの仕組み: アーキテクチャと動作原理

Screengrabのアーキテクチャは、2つの主要コンポーネントを中心に構築されています: デバイス上のクライアント(screengrab-lib)と、テスト実行と結果の収集を管理するランナーです。Androidではインストゥルメンテッドテストフレームワークを使用し、iOSではXCTestを使用します。

1回の実行のライフサイクル

Fastlaneがscreengrabアクションを呼び出し、Screengrabfile構成ファイルを読み取ります。ランナーはscreengrab-libライブラリを組み込んだテストAPKをビルドし、接続されたデバイスまたはエミュレーターにインストールし、スクリーンショット用の注釈が付けられたUIテストを実行します。

ruby
# Fastfile — スクリーンショット用レーンの説明
lane :screenshots do
  capture_android_screenshots(
    output_directory: "fastlane/metadata/android/screenshots",
    locales: ["ru-RU", "en-US", "de-DE"],
    devices: ["pixel_6", "pixel_tablet"],
    use_tests_external_storage: true
  )
end

アウトプットファイル構成

Screengrabはフォルダー階層を作成します: 言語 → デバイス → スクリーンショット。この構成はGoogle Play ConsoleやApp Store Connectの要件と完全に一致します。App Storeはデバイスタイプごとに定義されたサイズを必要とし、Screengrabはスペックに従って撮影します。

マルチデバイスサポート

このツールは、接続されたすべてのデバイスやエミュレーターでテストを並列実行できます。Androidエミュレーターはアクティブでない場合は自動的に起動します。iOSでは、ScreengrabはXcodeシミュレーターを使用します。

Android向けScreengrabのインストールと設定

Screengrabのインストールは2つのパートから構成されます: プロジェクトへのライブラリ追加と構成ファイルの設定です。Androidでは、Espresso UIフレームワークとFastlaneリポジトリの screengrab-libライブラリが必要です。

依存関係の追加

アプリモジュールのbuild.gradleに、screengrab-lib依存関係を追加します。このライブラリはScreenCapturerクラスを提供し、呼び出し時にスクリーンショットを撮影します。

groovy
// build.gradle (module: app)
androidTestImplementation(
  'tools.fastlane:screengrab-lib:2.1.0'
)

スクリーンショット付きテストの記述

UIテストには、必要な箇所でScreengrab.screenshot()注釈を付けます。各呼び出しで現在の画面をキャプチャし、指定された名前で保存します。

kotlin
import tools.fastlane.screengrab.Screengrab
import tools.fastlane.screengrab.locale.LocaleTestRule

class ScreenshotTest {

    @get:Rule
    val localeTestRule = LocaleTestRule()

    @Test
    fun testTakeScreenshots() {
        Screengrab.screenshot("main_screen")
        // 操作: ログインボタンをタップ
        Screengrab.screenshot("login_screen")
    }
}

Screengrabfile設定

Screengrabfileには、デバイス一覧、言語、タイムアウト、保存パスなどの実行パラメーターが保管されます。このファイルは通常、Fastfileの側のfastlaneフォルダーに位置します。

スクリーンショットのローカライゼーションと複数言語

ローカライゼーションはScreengrabの主要機能であり、もっともよく選ばれる理由です。このツールは各テスト実行の前に自動的にアプリの言語を切り替え、指定されたすべての言語でスクリーンショットを撮影します。

言語設定

言語はScreengrabfileでlocalesパラメーターを使用して設定します。言語ごとに、Screengrabは対応するリソースを使用してアプリを再インストールし、テストサイクルを完全に実行します。AndroidのLocaleTestRuleはデバイスのロケールを自動的に切り替えます。

ruby
# Screengrabfile
locales [
  "ru-RU",
  "en-US",
  "de-DE",
  "fr-FR",
  "es-ES",
  "ja-JP",
  "ko-KR"
]

ローカライズされたスクリーンショットのフォルダー構成

Screengrabは次のスキームに従ってディレクトリを作成します: screenshots/{locale}/{device_name}/{screenshot_name}.png。この構成はGoogle Playの要件と直接一致しており、Fastlane deliverを使って単一コマンドでスクリーンショットをアップロードできます。

iOSでは、App Store Connectは言語ごとにフラット構成のスクリーンショットを期待します。Fastlaneは公開時にScreengrab階層を必要なフォーマットに自動変換します。

CI/CDパイプラインへのScreengrab統合

CI/CD統合はScreengrabの主要な利点の1つです。このツールはコマンドラインから実行され、グラフィカルインターフェイスが不要なため、サーバービルドに最適です。

GitHub Actions

CI環境では、AndroidエミュレーターまたはiOSシミュレーターを起動し、スクリーンショットのレーンを呼び出す必要があります。GitHub ActionsはAVDキャッシングをサポートしており、繰り返し実行を効率化します。

CI用パラメーター

CI構成では、メモリと時間の制約を考慮することが重要です。Androidエミュレーターにはデバイスあたり少とも 2GBのRAMが必要で、7言語、2デバイスの完全実行には20~40分かかります。

ruby
# Fastfile — タイムアウト付きCI用レーン
lane :ci_screenshots do
  capture_android_screenshots(
    locales: ["en-US", "ru-RU"],
    devices: ["pixel_6"],
    clear_previous_screenshots: true,
    tests_timeout: "600",
    output_directory: "screenshots/ci"
  )
end

Jenkins Pipeline

Jenkinsでは、bundle exec fastlaneを呼び出すshステップを使用します。開発サイクルを遅らせないように、夜間やメインブランチへのマージ後のトリガーでスクリーンショットを実行することをおすすめします。

Screengrabと代替手段の比較

Screengrabはスクリーンショット自動化のだけのツールではありません。異なるアプローチの代替手段が存在します: OS組み込みツール、商用プラットフォーム、コード内スクリーンショットライブラリなどです。

ツールプラットフォームローカライゼーションCI/CD
ScreengrabAndroid, iOS自動ネイティブ
ADB ShellAndroid手動スクリプトによる
XCTestiOS手動xcodebuildによる
Firebase Test LabAndroid設定が必要はい
Appiumクロスプラットフォーム手動WebDriverによる

ADB Shellは完全な制御を提供しますが、シナリオごとにスクリプトの作成が必要です。XCTestはXcodeに組み込まれていますが、ローカライゼーションを自動管理しません。Firebase Test Labはクラウドの実デバイスでテストを実行し、最大のカバレッジを提供しますが、分ごとに費用がかかります。

Screengrabは組み合わせによって勘っています: Fastlaneがビルドから公開までの全ライフサイクルを管理します。Google PlayはFastlane deliverを通じてScreengrabのフォルダー構成を直接受け付けます。

よくある問題とその解決策

Screengrabを使用すると、開発者はいくつかの繰り返し問題に対出することがよくあります。よくあるエラーを知っておくと、初回実行時のデバッグ時間を削減できます。

スクリーンショットが空白または黒くなる

この問題は、Screengrabが画面のレンダリング完了前にスクリーンショットを撮影した場合に発生します。解決策は、screenshot()を呼ぶ前にThread.sleep()を追加するか、非同期処理を待つためにEspressoのIdlingResourceを使用することです。

バージョン互換性エラー

screengrab-libのバージョンはFastlaneのバージョンと一致する必要があります。Fastlaneは月次で更新され、古いライブラリが新しい構成パラメーターをサポートしない可能性があります。解決策は、Gemfileやgradle.propertiesを通じてバージョンを同期することです。

CIでの長時間実行

5デバイスで30言語での実行は1時間を超える可能性があります。解決策は実行を分割することです: 1つはすべての言語でストア向け、もう1つは内部用に言語を2つにするもの。GitHub Actionsは並列実行のためのマトリックス策略をサポートしています。

CI上のエミュレーター問題

Androidエミュレーターにはハードウェアバーチャライゼーションが必要ですが、CIサーバーではいつも利用できるとは限りません。KVMが有効になっている必要があり、そうでなければエミュレーターが起動しません。解決策は、GPUアクセラレーションなしのx86イメージやFirebase Test Labを使用することです。

よくある質問

ScreengrabはADBによる通常のスクリーンショットとどう違いますか?

ADBは現在画面に表示されているものをキャプチャします。ScreengrabはUIテストと統合し、自動的に言語とデバイスを切り替え、人を介さずにシナリオに従ってシリーズのスクリーンショットを撮影します。

FastlaneなしでScreengrabを使えますか?

いいえ、ScreengrabはFastlaneエコシステムのコンポーネントであり、ビルド、インストール、連携にそのインフラを使用します。screengrab-libライブラリは単独では実行できません—オーケストレーターとしてFastlaneが必要です。

10言語でのスクリーンショット生成にかかる時間は?

1つのデバイスで、10言語での実行には15~25分かかります。各言語でアプリの再インストールとUIテストのフルサイクルが必要です。複数デバイスでの並列実行により、時間を比例的に削減できます。

ScreengrabはiOSアプリをサポートしていますか?

はい、ScreengrabはXCTestとXcodeシミュレーターを通じてiOSをサポートしています。構成はAndroidと同じです: 言語とデバイスを追加し、SwiftでのUIテストはXCTestを使用し、XCUIScreenshotでキャプチャします。

新しい言語だけスクリーンショットを更新するには?

Screengrabは増分モードをサポートしていません—各実行でスクリーンショットの完全なセットが生成されます。主な実行から既存のキャプチャを上書きしないように、制限された言語リストでCI用の別のレーンを設定することをおすすめします。

まとめ

  • Screengrab — AndroidおよびiOSのモバイルアプリのスクリーンショットを自動化するFastlaneコンポーネント。
  • 自動化により、数百のスクリーンショットの手動作成がターミナルで1つのコマンドで実行できます。
  • ローカライゼーション — 各テスト実行の前に自動でアプリの言語を切り替えます。
  • CI/CD — グラフィカルインターフェイスなしで、Jenkins、GitHub Actions、GitLab CIなどのパイプラインと統合。
  • 構成はアウトプットファイルがGoogle PlayやApp Storeの直接アップロード要件と一致。
  • 柔軟性 — 複数デバイス、画面向き、カスタムテストシナリオをサポート。
  • 効率 — 更新ごとに数時間の手動作業の代わりに15分で百枚のスクリーンショット。

ターンキー方式のモバイルアプリケーションを開発します

IT Sectrは2017年からスタートアップや企業向けにiOS・Androidアプリケーションを開発しています。私たちがご相談に乗り、最適なソリューションをご提案します。

プロジェクトについて相談

こちらもお読みください