Screengrabは、Fastlaneエコシステムのユーティリティで、AndroidおよびiOSのモバイルアプリのスクリーンショット作成を自動化します。数十のデバイスで手動で画面をスワイプする代わりに、開発者が1つのコマンドを実行するだけで、Screengrabが必要なすべての画面を独立して撮影します。Fastlane Docs, 2026によると、このツールは同時に最大30言語と、構成で指定されたどのような画面解像度もサポートします。
ポイント
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のアーキテクチャは、2つの主要コンポーネントを中心に構築されています: デバイス上のクライアント(screengrab-lib)と、テスト実行と結果の収集を管理するランナーです。Androidではインストゥルメンテッドテストフレームワークを使用し、iOSではXCTestを使用します。
Fastlaneがscreengrabアクションを呼び出し、Screengrabfile構成ファイルを読み取ります。ランナーはscreengrab-libライブラリを組み込んだテストAPKをビルドし、接続されたデバイスまたはエミュレーターにインストールし、スクリーンショット用の注釈が付けられたUIテストを実行します。
# 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シミュレーターを使用します。
Screengrabのインストールは2つのパートから構成されます: プロジェクトへのライブラリ追加と構成ファイルの設定です。Androidでは、Espresso UIフレームワークとFastlaneリポジトリの screengrab-libライブラリが必要です。
アプリモジュールのbuild.gradleに、screengrab-lib依存関係を追加します。このライブラリはScreenCapturerクラスを提供し、呼び出し時にスクリーンショットを撮影します。
// build.gradle (module: app)
androidTestImplementation(
'tools.fastlane:screengrab-lib:2.1.0'
)
UIテストには、必要な箇所でScreengrab.screenshot()注釈を付けます。各呼び出しで現在の画面をキャプチャし、指定された名前で保存します。
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には、デバイス一覧、言語、タイムアウト、保存パスなどの実行パラメーターが保管されます。このファイルは通常、Fastfileの側のfastlaneフォルダーに位置します。
ローカライゼーションはScreengrabの主要機能であり、もっともよく選ばれる理由です。このツールは各テスト実行の前に自動的にアプリの言語を切り替え、指定されたすべての言語でスクリーンショットを撮影します。
言語はScreengrabfileでlocalesパラメーターを使用して設定します。言語ごとに、Screengrabは対応するリソースを使用してアプリを再インストールし、テストサイクルを完全に実行します。AndroidのLocaleTestRuleはデバイスのロケールを自動的に切り替えます。
# 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の主要な利点の1つです。このツールはコマンドラインから実行され、グラフィカルインターフェイスが不要なため、サーバービルドに最適です。
CI環境では、AndroidエミュレーターまたはiOSシミュレーターを起動し、スクリーンショットのレーンを呼び出す必要があります。GitHub ActionsはAVDキャッシングをサポートしており、繰り返し実行を効率化します。
CI構成では、メモリと時間の制約を考慮することが重要です。Androidエミュレーターにはデバイスあたり少とも 2GBのRAMが必要で、7言語、2デバイスの完全実行には20~40分かかります。
# 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では、bundle exec fastlaneを呼び出すshステップを使用します。開発サイクルを遅らせないように、夜間やメインブランチへのマージ後のトリガーでスクリーンショットを実行することをおすすめします。
Screengrabはスクリーンショット自動化のだけのツールではありません。異なるアプローチの代替手段が存在します: OS組み込みツール、商用プラットフォーム、コード内スクリーンショットライブラリなどです。
| ツール | プラットフォーム | ローカライゼーション | CI/CD |
|---|---|---|---|
| Screengrab | Android, iOS | 自動 | ネイティブ |
| ADB Shell | Android | 手動 | スクリプトによる |
| XCTest | iOS | 手動 | xcodebuildによる |
| Firebase Test Lab | Android | 設定が必要 | はい |
| 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を通じてバージョンを同期することです。
5デバイスで30言語での実行は1時間を超える可能性があります。解決策は実行を分割することです: 1つはすべての言語でストア向け、もう1つは内部用に言語を2つにするもの。GitHub Actionsは並列実行のためのマトリックス策略をサポートしています。
Androidエミュレーターにはハードウェアバーチャライゼーションが必要ですが、CIサーバーではいつも利用できるとは限りません。KVMが有効になっている必要があり、そうでなければエミュレーターが起動しません。解決策は、GPUアクセラレーションなしのx86イメージやFirebase Test Labを使用することです。
よくある質問
ADBは現在画面に表示されているものをキャプチャします。ScreengrabはUIテストと統合し、自動的に言語とデバイスを切り替え、人を介さずにシナリオに従ってシリーズのスクリーンショットを撮影します。
いいえ、ScreengrabはFastlaneエコシステムのコンポーネントであり、ビルド、インストール、連携にそのインフラを使用します。screengrab-libライブラリは単独では実行できません—オーケストレーターとしてFastlaneが必要です。
1つのデバイスで、10言語での実行には15~25分かかります。各言語でアプリの再インストールとUIテストのフルサイクルが必要です。複数デバイスでの並列実行により、時間を比例的に削減できます。
はい、ScreengrabはXCTestとXcodeシミュレーターを通じてiOSをサポートしています。構成はAndroidと同じです: 言語とデバイスを追加し、SwiftでのUIテストはXCTestを使用し、XCUIScreenshotでキャプチャします。
Screengrabは増分モードをサポートしていません—各実行でスクリーンショットの完全なセットが生成されます。主な実行から既存のキャプチャを上書きしないように、制限された言語リストでCI用の別のレーンを設定することをおすすめします。
まとめ
ターンキー方式のモバイルアプリケーションを開発します
IT Sectrは2017年からスタートアップや企業向けにiOS・Androidアプリケーションを開発しています。私たちがご相談に乗り、最適なソリューションをご提案します。