Snapshot (Fastlane) は、サポートされているすべてのデバイスと言語でiOSアプリのスクリーンショットを自動生成するためのツールです。シミュレーターを使って手動でスクリーンショットを作成するのとは異なり、Snapshot はUIテストを実行し、アプリの指定されたポイントでスクリーンショットを撮影します。Fastlane公式ドキュメント(2026)によると、Snapshot はリリース用スクリーンショットの準備時間を4時間から15分に短縮します。
主要ポイント
Snapshot (Fastlane) は、App Store用のアプリスクリーンショット作成を自動化するFastlaneエコシステムのコンポーネントです。iOSシミュレーターでUIテストを実行し、指定されたアプリ状態でスクリーンショットを撮影し、各言語とデバイスに対応した正しい名前で構造化されたディレクトリに保存します。
Snapshot がない場合、開発者は手動でシミュレーターを起動し、各画面を開き、Cmd+Sでスクリーンショットを撮影し、言語を切り替えてすべての組み合わせでプロセスを繰り返します。スクリーンショットの自動化 はASO最適化の重要な要素です。App Storeは新しいリリースごとに最新のスクリーンショットを必要とし、60以上のスクリーンショットを手動で更新するには数時間の作業が必要だからです。
App Store Connect ドキュメント(2025) によると、ローカライズされたスクリーンショットを持つアプリは、ターゲット国で25%多くのコンバージョンを獲得しています。Snapshot を使用すると、チームは1回の実行で32言語のビジュアルコンテンツを更新できます。これはアプリの新機能に関連するマーケティングキャンペーンにとって特に重要です。
App Storeに公開するすべてのプロジェクトで Snapshot を使用してください — リリースプロセスを自動化しASOを改善するチームにとっての標準ツールです。
Snapshot でのスクリーンショット生成プロセス は、UIテストの準備、Snapfileの設定、シミュレーターの起動、結果の収集の複数の段階で構成されています。Snapshot は指定されたデバイスと言語に対して順次各シミュレーターを起動し、UIテストを実行して snapshot() 関数が呼び出されたポイントでスクリーンショットを撮影します。
すべてのテストが完了すると、Snapshot はApp Storeの要件を満たす名前で screenshots/[Language]/ ディレクトリにスクリーンショットを収集します。各スクリーンショットは、ターゲットデバイスに一致する解像度のPNG形式で保存されます。Snapshot は作成されたすべてのスクリーンショットを視覚的に確認するためのHTMLレポートも生成します。
Snapshot を機能させるには、アプリのXCTest UIテストコードに snapshot() 呼び出しを追加する必要があります。この関数は呼び出し時点の現在の画面状態のスクリーンショットを撮影します。開発者は各主要アクション(画面を開く、データ入力、タブ移動、結果表示)の後に snapshot() を配置します。
UIテスト構造の例:テストはアプリにログインし、ログイン画面をキャプチャするために snapshot("01-LoginScreen") を呼び出し、次にホーム画面に移動してホーム画面をキャプチャするために snapshot("02-HomeScreen") を呼び出します。XCTest は、iOSアプリのユニットテストとUIテストのためのAppleのフレームワークで、Xcodeに直接統合されています。
// Snapshot の UI テスト
- (void)testScreenshots {
XCUIApplication *app = [[XCUIApplication alloc] init];
[app launch];
snapshot(@"01-LoginScreen");
[app.textFields[@"email"] tap];
[app.textFields[@"email"] typeText:@"user@company.com"];
[app.buttons[@"Login"] tap];
snapshot(@"02-HomeScreen");
}
Snapshot はSnapfileで指定された各言語に対して自動的にシミュレーターの言語を切り替えます。アプリは対応するローカライズで起動され、UIテストはその言語で実行されます。スクリーンショットのローカライズ はASOの重要な要素です。75%のケースでユーザーは母国語のコンテンツを持つアプリを好み、App Storeのスクリーンショットもその対象です。
各デバイスに対して、Snapshot は対応する画面サイズで個別のシミュレーターを起動します。App Storeで要求されるすべてのサイズがサポートされています:iPhone 6.5インチ(iPhone 15 Pro Max)、5.5インチ(iPhone 8 Plus)、6.7インチ(iPhone 15 Plus)、iPad 12.9インチ。iOSシミュレーター は、物理デバイスなしでアプリをテストするためにXcodeに組み込まれたiOSデバイスのソフトウェアエミュレーションです。
# すべてのデバイスと言語のスクリーンショットを生成
fastlane snapshot
# 指定されたデバイスのみ生成
fastlane snapshot --devices "iPhone 15 Pro Max,iPhone 15"
# スクリーンショット生成前にクリア
fastlane snapshot --reinstall_app --erase_simulator
Snapfile は、スクリーンショット生成パラメーター(デバイスリスト、言語、タイムアウト、起動オプション)を定義するFastlane設定ファイルです。Snapfile は fastlane ディレクトリに保存され、プロジェクトとともにバージョン管理され、チームメンバー全員に統一された設定を保証します。
# Snapfile — スクリーンショット設定
devices([
"iPhone 15 Pro Max",
"iPhone 15",
"iPad Pro (12.9-inch)"
])
languages([
"en-US",
"ru",
"de-DE"
])
scheme("MyAppUITests")
output_directory("./screenshots")
clear_previous_screenshots(true)
reinstall_app(true)
erase_simulator(true)
clear_previous_screenshots パラメーターは、生成を開始する前に古いスクリーンショットを削除します — これにより出力ディレクトリに古いスクリーンショットが蓄積されるのを防ぎます。reinstall_app は各実行前にシミュレーターにアプリを再インストールし、新しい生成に以前のテストの影響がないクリーンなセッションを保証します。
erase_simulator パラメーターは、テスト開始前にシミュレーターの内容(キャッシュ、設定、以前のセッションデータを含む)を消去します。これはオンボーディングやアプリの初回起動をチェックするテストにとって特に重要です。Snapshot はシミュレーターのiOSバージョンを指定する ios_version パラメーターと、最初のUIテストエラーで生成を停止する stop_after_first_error もサポートしています。
SwiftUIプロジェクトでは、システム地域を変更する代わりにシミュレーター設定を介して言語切り替えを制御する use_simulator_for_language パラメーターが利用可能です。Snapshot はアプリ起動時に追加の引数を渡すための launch_arguments もサポートしています — 異なるバックエンド設定やA/Bテストに便利です。
Snapshot インターフェース には、生成を開始するための基本コマンドと、プロセスを正確に制御するための拡張フラグが含まれています。メインコマンド fastlane snapshot は、Snapfile 設定に基づいて完全なスクリーンショット生成サイクルを実行します。
コマンド fastlane snapshot --devices "iPhone 15" は、指定されたデバイスのみのスクリーンショットを生成し、Snapfile の残りは無視します。--languages "en-US,ru" は生成対象の言語をフィルタリングします。これらのフラグの組み合わせは、完全な生成サイクル(5デバイス10言語で最大30分かかる可能性があります)なしで、1つのデバイスと言語でスクリーンショットをすばやく確認するのに便利です。
# 1つのデバイス用のクイック生成
fastlane snapshot --devices "iPhone 15" --languages "en-US"
# アプリ再インストールで生成
fastlane snapshot --reinstall_app --erase_simulator
# HTMLレポート付きで生成
fastlane snapshot --output_directory "./build/screenshots"
--output_directory フラグは結果の保存ディレクトリを変更します。デフォルトでは、Snapshot はスクリーンショットを fastlane/screenshots に保存します。Deliver と統合するには、期待される Deliverfile 構造に一致するディレクトリを指定します — これにより、フォルダ間で手動でファイルをコピーすることなく、スクリーンショットを公開プロセスに直接渡すことができます。
| Snapshot パラメーター | 目的 | 例 |
|---|---|---|
| devices | 生成対象デバイスのリスト | iPhone 15, iPad Pro |
| languages | ローカライズ言語のリスト | en-US, ru, de-DE |
| reinstall_app | テスト前にアプリを再インストール | true / false |
| erase_simulator | 起動前にシミュレーターを消去 | true / false |
| clear_previous | 古いスクリーンショットを削除 | true / false |
CI/CD での Snapshot は、リリースコミットごとに自動的にスクリーンショットを生成します。Snapshot は Deliver ステージの前に実行され、App Store のスクリーンショットが現在のアプリバージョンと一致し、以前のバージョンの古いUI要素が含まれていないことを確認します。
CI で Snapshot を機能させるには、iOSシミュレーターがインストールされた Xcode が必要です。CI環境では、Snapshot はランナーにプリロードされた Xcode のシミュレーターを使用します。GitHub Actions は、追加設定なしでUIテストを実行するために、Xcode と iOSシミュレーターがプリインストールされたイメージを提供します。
# CI環境で Snapshot を実行
fastlane snapshot --skip_open_summary \
--output_directory "$CI_PROJECT_DIR/screenshots"
# スクリーンショットをCIアーティファクトとして保存
cp -R "screenshots/" "$CI_PROJECT_DIR/artifacts/"
--skip_open_summary パラメーターは、生成後のHTMLレポートの表示を無効にします — CI環境ではグラフィカルインターフェースは利用できません。生成結果はCIタスクのアーティファクトとして渡されるディレクトリに保存され、その後DeliverによってリリースとともにApp Storeにアップロードされます。
CIパイプラインを高速化するには、concurrent_simulators を介した並列スクリーンショット生成を使用します — これは複数のシミュレーターを同時に起動するSnapfileパラメーターです。これにより、4つの並列スレッドを使用する場合、5デバイス10言語のスクリーンショット生成時間が40分から15分に短縮されます。
Snapshot を使用する際、開発者は主にUIテストの不安定性、シミュレーターの問題、誤ったデバイス設定に関連するエラーに直面します。Snapshot の エラー診断 は、各ステップのスクリーンショットと失敗したテストに関する情報を含むHTMLレポートの分析から始まります。
エラー「Failed to build scheme MyAppUITests」は、UIテストスキームがビルド用に設定されていない場合に発生します。解決策:XcodeでUIテスト用の個別のSchemeが作成され、コマンドラインアクセス用にSharedオプションが有効になっていることを確認してください。Xcode Scheme は、アプリのビルド、テスト、実行設定であり、各アクションのターゲットとパラメーターのセットを定義します。
エラー「No simulators found matching...」は、指定されたデバイスタイプまたはiOSバージョンのシミュレーターが存在しないことを示します。解決策:xcrun simctl create を実行してシミュレーターを作成するか、xcrun simctl list リストから既存のデバイスを指定します。xcrun simctl は、iOSシミュレーターを作成、削除、起動、診断するためのXcodeコマンドラインユーティリティです。
エラー「UI test failure」の場合、UIテストがいずれかの言語またはデバイスで失敗します。解決策:--stop_after_first_error フラグを付けて Snapshot を実行し、最初のエラーで停止し、HTMLレポートのスクリーンショットを分析してテストを修正します。一般的な原因は、言語によってテキストの長さが異なり、UI要素が重なったり画面の境界からはみ出したりすることです。
よくある質問
Snapshot は、iPhone 15 Pro Max(6.7インチ)、iPhone 15(6.1インチ)、iPad Pro 12.9インチ、iPad mini を含むすべてのiPhoneおよびiPadファミリデバイスをサポートしています。各デバイスに対して、Snapshot は Xcode から対応するシミュレータースキンをロードし、正確な画面解像度を保証します。
いいえ、Snapshot は Xcode のiOSシミュレーターでのみ動作します。実機は不要であり、サポートされていません — すべてのスクリーンショットはシミュレーター環境で生成され、App Storeの要件に対して同一の解像度と色再現を提供します。
Snapshot は、Snapfile の各言語に対してUIテストを実行する前にシミュレーターの言語を切り替えます。アプリはシステムのローカライズ設定を通じて対応する言語で表示されます。UIテスト は NSLocalizedString を介してローカライズされた文字列を使用し、すべてのスクリーンショットで正しいテキストを保証します。
はい、Snapshot は Fastlane バージョン 2.200 以降で macOS アプリをサポートしています。macOS の場合は、app_platform("macOS") パラメーターを介して Snapfile でプラットフォームを指定します。Snapshot は macOS で UI テストを実行し、Mac App Store の要件に従ってスクリーンショットを作成します。
手動スクリーンショットでは、各画面を手動で開き、言語を切り替え、デバイスを変更する必要があります — 完全なセットで約60のアクションが必要です。Snapshot はプロセス全体を自動化します:言語、デバイスの切り替え、UIテストの実行、App Store用の正しい名前でのスクリーンショット保存を15分で行います。
まとめ
ターンキー方式のモバイルアプリケーションを開発します
IT Sectrは2017年からスタートアップや企業向けにiOS・Androidアプリケーションを開発しています。私たちがご相談に乗り、最適なソリューションをご提案します。