コンテンツへスキップ

標準ツールで Mac のスクリーンショットを自動化する方法

screencapture、Automator、Shortcuts を使って Mac のスクリーンショットを自動化する方法を説明します。権限の設定、安全なループの組み方、トラブルシューティングを扱います。

13分で読めますガイド作成者:Temposhot Team

Auto Capture turning 6 pages of a book in Preview with Page Down after each screenshot

macOS には、スクリーンショットを定期的に撮影する標準の方法が 3 つあります。screencapture コマンド、Automator、Shortcuts アプリです。3 つとも追加のソフトウェアなしで、撮影、待機、繰り返しを行えます。このガイドでは、方法の選び方、3 フレームのテストによる動作確認、長時間の実行で発生する問題の対処を説明します。

この記事全体の例は、120 枚のスライドからなるプレゼンテーションを、スライドごとに 1 枚の画像として保存する作業です。撮影元を固定し、フレームごとにキーを押し、各スライドの描画を待ち、最後のスライドの後に正常に停止する必要があります。

用途に合う標準の方法を選ぶ

方法適した用途弱点
Terminal での screencapture固定領域、任意のファイル名、よく実行するスクリプトシェルの知識が必要
Automator保存してダブルクリックで起動できるビジュアルなワークフロー標準のスクリーンショットアクションがファイル名を上書きすることがある
Shortcutsメニューバーやキーボードからの起動、新しい macOS での自動化ウィンドウや領域の撮影にはスクリプトのステップが必要

3 つの方法はすべて同じキャプチャエンジンと同じ権限モデルを使います。使い慣れた方法を選んでください。どれも使ったことがない場合は Terminal から始めるのがよいです。テストは 2 行で済みます。

各方法の構成

Automator と Shortcuts は、多くの場合シェルアクションを通じて同じ screencapture コマンドを呼び出します。違いはそのコマンドを包むラッパーです。Terminal はスクリプトファイルを使います。Automator はワークフローまたはダブルクリックで起動するアプリとして保存します。Shortcuts は、メニューバー、キーボードショートカット、時刻による自動実行といった起動方法を追加します。

撮影コマンドの行は一度書けば済みます。Terminal で動作を確認してから、起動方法が必要な場合に同じ行を Automator または Shortcuts の Run Shell Script アクションに貼り付けてください。

内容の変化方法で決める

方法の選択より、新しいフレームを撮るきっかけを決めることが重要です。ダッシュボード、ビルドログ、レンダリングの進捗バーのように内容が自動で変化する場合は、タイマーだけで足ります。スライドやリーダーのようにキー入力で内容が変わる場合は、タイマーとキー入力が必要です。

作業の手順をクリックして進める場合は、別の作業になります。タイマーでは、クリックとクリックの間に同じ画面を何枚も撮り、各クリックの瞬間を取りこぼします。この場合は、Temposhot の Action Capture のようなクリック駆動型のツールを使います。有効と判定されたクリックごとに 1 フレームを保存でき、一定間隔ごとに保存する必要はありません。

自動化で重要なフラグ

screencapture には、多くの人が使わないオプションも含めて多くのフラグがあります。以下のフラグで、1 台の Mac での自動化作業のほぼすべてに対応できます。

screencapture のフラグを並べた設定パネル。-x はシャッター音なし、-m はメインディスプレイ、-D はディスプレイ番号、-R は固定領域、-t はファイル形式、-l はウィンドウ ID、-T は撮影前の待機秒数、-C はマウスポインタの表示を示す。

Terminal で man screencapture を実行すると、お使いの macOS バージョンの全オプションを確認できます。-R による固定領域は、スライドの撮影で最も役立つフラグです。メニューバー、Dock、通知バナーを撮影対象から外せるためです。

始める前に: 画面収録を許可し、3 フレームをテストする

macOS では、ほかのアプリのウィンドウを撮影するアプリすべてに画面収録の権限が必要です。撮影を実行するアプリに権限が必要になります。シェルのループでは Terminal、ワークフローでは Automator(保存したアプリは別途)、ショートカットでは Shortcuts です。

System Settings を開き、Privacy and Security を選択してから、Screen Recording の一覧でアプリをオンにします。表示名は macOS のバージョンによって異なります。設定を変更したら、アプリを終了して開き直します。

長い実行の前に、3 フレームのテストを行います。3 フレームで、権限、ファイル名、タイミングが正しく動くかを確認できます。テストは約 10 秒で終わります。壁紙だけが保存される 500 フレームの実行は、テストより多くの時間を無駄にします。

方法ごとに必要な権限

権限を持つのは、スクリプトファイルではなく、コマンドを実行するプロセスです。iTerm から開始したループには iTerm を一覧に入れる必要があります。アプリとして保存したワークフローには、そのアプリを入れる必要があります。Automator 自体が許可されていても同じです。

比較表。列は Screen Recording と Accessibility。行は Terminal のループ、Automator ワークフロー、保存した Automator アプリ、Shortcuts のショートカット、osascript によるキー入力。

スイッチはオンなのに壁紙が撮影される場合

macOS では、アプリが許可済みと表示されていても、撮影結果が壁紙だけになることがあります。スイッチをオフにしてから再度オンにし、アプリを終了して開き直してください。エディタ内蔵のターミナルからスクリプトを実行している場合は、権限が必要なのは Terminal ではなくそのエディタです。

長い実行の前に Mac を準備する

120 フレームの実行が 80 フレーム目で失敗すると、失敗に気づきにくく、何も実行しないより悪い結果になります。開始前に次の確認を行うと、よくある原因を取り除けます。

7 項目のチェックリスト: 同じコマンドによる 3 フレームのテストに成功している、通知が写らないよう Do Not Disturb をオン、実行中は caffeinate -di を起動、対象アプリを最終的なウィンドウサイズで前面に表示、1 GB 以上の空きディスク容量を確認、この実行用の出力フォルダが空、プライベートウィンドウとチャットアプリを閉じる。

Terminal で screencapture の 3 フレームテストを実行する

mkdir -p ~/Captures/test
for i in 1 2 3; do
  screencapture -x -m ~/Captures/test/frame-$i.png
  sleep 3
done
open ~/Captures/test

フォルダで 3 点を確認します。ファイルが 3 つあること、それぞれに開いているウィンドウが写っていること、ファイル名が撮影順になっていることです。-x フラグはシャッター音を消し、-m は撮影をメインディスプレイに限定します。コマンドラインガイド では、固定領域、JPG 出力、長時間の実行を扱います。

タイムライン: 0:00 にフレーム 1 を保存、0:03 にフレーム 2 を保存、0:06 にフレーム 3 を保存、0:09 にループが終了して Finder がテスト用フォルダを開く、0:10 に 3 つのファイルの数、内容、順序を確認。

順番どおりに並ぶ番号を付ける

frame-$i.png は 3 フレームでは動きますが、9 を超えると順序が崩れます。プレーンテキストの並べ替えでは、Finder などのツールが frame-10 を frame-2 より前に置くためです。ゼロ埋めの番号を使うと解決します。printf '%03d' は 7 を 007 に変換するため、120 フレームでもどの環境でも正しい順序になります。

name=$(printf 'frame-%03d.png' $i)
screencapture -x -R 0,25,1440,875 ~/Captures/deck/$name

実際の作業規模に合わせて見積もる

120 スライドの例では、2 秒の待機を挟んでループを 120 回実行します。撮影に約 4 分、準備に数秒かかります。1440 × 875 の領域では、文字と単純な図形を含む PNG スライドは通常 1 MB を大きく下回ります。実行全体の出力は約 50〜120 MB に収まる見込みです。

例の 4 つの統計値: 120 フレーム、フレームごとに 2 秒の待機、合計実行時間の約 4 分、PNG ファイルの推定 50〜120 MB。
推定値です。ファイルサイズはスライドの内容と撮影領域のサイズによって変わります。

Automator でビジュアルなワークフローを使う

Automator で新しい Workflow を作成します。Take Screenshot を追加し、続いて Pause を 3 秒に設定し、Loop を自動的にループして 3 回後に停止する設定にします。実行して、フォルダを確認します。

ファイルが 1 つしか作られない場合は、アクションが毎回同じ名前で保存しています。Take Screenshot を Run Shell Script に置き換え、番号付きの名前を使った Terminal テストの screencapture の行を使用します。完成したワークフローは Application として保存すると、ダブルクリックで実行できます。シェルアクションの全体は Automator の解説 にあります。

Automator の内部でカウンタを保持する

Loop アクションは、次の繰り返しにカウンタを渡しません。最も単純な解決策は、シェルにフォルダ内の既存ファイルから次の番号を計算させることです。そうすると、繰り返しごとに新しい名前が付きます。

dir=~/Captures/deck
mkdir -p "$dir"
n=$(ls "$dir" | wc -l | tr -d ' ')
screencapture -x -m "$dir/$(printf 'frame-%03d.png' $((n + 1)))"

このコードは、開始時にフォルダが空であることを前提にします。前回の実行で残ったファイルがあると、すべての番号がずれます。フォルダを空にするか、実行ごとに新しいフォルダを使ってください。

アプリとして保存し、アクセスを許可する

Application として保存したワークフローは、macOS から見ると別のプログラムです。初めて撮影するとき、テスト中に Automator が許可されていても、macOS はそのアプリに対して画面収録の許可を求めます。

一度許可してから、保存したアプリを終了して開き直してください。アプリを移動したり別の名前で保存し直したりすると、macOS は新しいアプリとみなして再度許可を求めます。最終版のアプリは Applications フォルダなど 1 か所にまとめて保管してください。

Shortcuts でランチャーとトリガーを使う

Repeat を 3 に設定したショートカットを作成します。繰り返しブロックの中に Take Screenshot、ファイル名に Repeat Index 変数を含む Save File、3 秒に設定した Wait を追加します。実行して、フォルダを確認します。

Shortcuts は、メニューバー、キーボードショートカット、または Terminal の shortcuts run から実行できます。macOS Tahoe 26 以降では、個人用のオートメーションで指定した時刻に開始できます。トリガーとスクリプトの権限については、Shortcuts の解説 を参照してください。

Terminal からショートカットを起動する

shortcuts run "Deck Capture" は、名前を指定してショートカットを実行します。caffeinate と組み合わせると、ショートカットの実行時間に限って Mac をスリープさせないようにできます。一日中の省電力設定を変更するより安全です。

caffeinate -di shortcuts run "Deck Capture"

Repeat Index は 1 から始まり、ゼロ埋めはされません。9 フレームを超える場合は、Text アクションでゼロ埋めを追加するか、名前ではなく作成日時でファイルを並べ替えてください。

定時の開始と制約

指定した時刻に開始する個人用のオートメーションは、誰も机にいない間に撮影する必要がある場合に役立ちます。たとえば毎朝 9:00 のダッシュボードの撮影です。その時刻には Mac がスリープから復帰し、ロックされていない必要があります。画面がロックされていると、ダッシュボードは写りません。

定時実行するショートカットは短く、単独で完結させてください。3 フレームを撮って停止するショートカットは、翌朝に確認しやすくなります。2 時間ループするショートカットは確認が難しく、動いたままになりやすいです。

撮影が動作してからページ送りを追加する

スライドや文書をめくるには、フレームごとにキー入力が必要です。3 フレームのテストに合格してから追加すると、撮影の問題とキーの問題が同時に現れることを防げます。

3 つの方法はすべて、System Events を通じて同じ方法でキーを送ります。

osascript -e 'tell application "System Events" to key code 124'

キーコード 124 は右矢印キーです。順序が重要です。撮影し、キーを押し、次のページが描画されるまで十分に待機します。最後のフレームの後はキーを送りません。送ると、文書が最後のページを越えて進みます。キーを送るアプリにはアクセシビリティの権限が必要で、対象アプリが前面にある必要があります。

4 つの箱を矢印でつないだフロー: フレームを保存する、それが最後のフレームか確認する、最後でなければ key code 124 で右矢印キーを送る、次のスライドの描画を 2 秒待つ。

ほかのページ送りのキーコード

key code は文字ではなく、ハードウェアのキー番号を指定します。右矢印は 124、左矢印は 123、下矢印は 125、上矢印は 126、Space は 49、Return は 36 です。ページ送りではなくスクロールするリーダーでは、通常 Space が必要です。Space は約 1 画面分移動し、下矢印は数行しか移動しないためです。

文字を入力する場合は、代わりに keystroke を使います。たとえば N キーでページ送りするアプリでは keystroke "n" を使います。新しいキーは、長い実行の前に 3 フレームの実行でテストしてください。

120 スライドの完全なスクリプト

以下のスクリプトは、ここまでの要素を組み合わせたものです。ゼロ埋めの名前、固定領域、最後の回を除くすべての回でのキー入力、2 秒の待機を含みます。deck.zsh として保存し、caffeinate -di zsh deck.zsh で実行します。

#!/bin/zsh
out=~/Captures/deck-$(date +%Y-%m-%d)
mkdir -p "$out"
total=120
sleep 5   # time to click into the presentation window
for i in $(seq 1 $total); do
  screencapture -x -R 0,25,1440,875 "$out/$(printf 'slide-%03d.png' $i)"
  if (( i < total )); then
    osascript -e 'tell application "System Events" to key code 124'
  fi
  sleep 2
done
open "$out"

ループの前の 5 秒の sleep はカウントダウンの役割を果たします。この間にプレゼンテーションのウィンドウをクリックしてください。キー入力が Terminal ではなくプレゼンテーションに届くようになります。

ファイルツリー: Captures フォルダに、日付付きの deck フォルダがあり、その中にゼロ埋めされた slide-001.png から slide-120.png が入っている。別に 3 フレームを含む test フォルダがある。

キー入力のタイミングのルール

do と dont の行の一覧。do: キー入力の前に撮影する、キー入力の後にページが描画されるまで待機する、最後の回ではキー入力を省く、開始時の sleep 中に対象ウィンドウをクリックする。dont: 最初の撮影の前にキーを送らない、トランジションのあるスライドで 0 秒の待機を使わない、Terminal を前面のままにしない。

スライドのトランジションは、フレームがぼやける主な原因です。1 秒のディゾルブには、少なくとも 1.5 秒の待機が必要です。プレゼンテーションアプリでトランジションをオフにする方が、より確実な対処です。

一般的なスクリーンショット自動化の問題を解決する

  • 壁紙だけが写る。 実行中のアプリに画面収録の権限がありません。権限を許可し、アプリを開き直してください。
  • 1 枚だけ作られる。 各回が同じ名前で保存しています。ファイル名にカウンタを追加してください。
  • 実行の後半で黒いフレームになる。 ディスプレイがスリープしました。実行期間中は Terminal で caffeinate -di を実行してください。
  • ページが飛ぶ。 キー入力が、ページの描画前に実行されました。キー入力後の待機を長くしてください。
  • 最後に余分なページが写る。 キー入力が最後の撮影の後に実行されました。最後の回ではキー入力を省いてください。
  • 2 つ目のディスプレイが写らない。 -D 1 と -D 2 で、ディスプレイごとに個別に撮影してください。

失敗したフレームを素早く見つける

長い実行で問題が起きたら、何かを変更する前に最初の不良フレームを見つけてください。Finder でフォルダを開き、アイコン表示に切り替えて、サムネイルが違って見えるところまでスクロールします。フレーム番号から、問題が開始時(権限や領域)から起きたのか、一定の時刻(スリープや通知)で起きたのか、不規則に起きたのか(描画のタイミング)を判断できます。

並べて比較したフレームが同じ場合は、キー入力がアプリに届いていません。1 ページ分だけ違う 2 つのフレームは、キー入力は届いているものの、待機時間が短すぎることを示します。変化が小さくて目で見分けられない場合は、Compare Images で 2 枚のフレーム間のピクセル差分を確認できます。

フレームに写る通知とオーバーレイ

ディスプレイ全体の撮影は、通知バナー、音量インジケータ、突然開くチャットアプリなど、画面に表示されるものすべてを記録します。Do Not Disturb を使うと、ほとんどのバナーを消せます。右上の隅を除外した -R の固定領域を指定すると、残りも取り除けます。バナーはその位置に表示されるためです。

Retina ディスプレイでの領域サイズ

-R の値は、ピクセルではなく画面のポイント単位です。Retina ディスプレイでは、1440 × 875 の領域は 2880 × 1750 ピクセルの画像として保存されます。文字や OCR には鮮明ですが、幅と高さが 2 倍になるため、ファイルサイズは Retina 以外のディスプレイの約 4 倍になります。保存容量を計画する前に、Screenshot Resolution Checker で実際のピクセルサイズを確認してください。

暴走したループを停止する

回数を誤ったループは、予定より大幅に長く実行されることがあります。Terminal のウィンドウで Control+C を押すと停止します。それまでに保存されたフレームはフォルダに残ります。ショートカットの場合は、メニューバーの Shortcuts アイコンで停止ボタンを選択します。

標準ツールが簡単な選択肢でなくなる場合

標準ツールは、回数が決まっていて速度が一定の撮影をうまく処理します。必要な機能が増えるたびに、スクリプトが増えます。たとえば、名前で 1 つのウィンドウを撮影する、時刻で停止する、実行中に一時停止して再開する、検索可能な PDF や動画を作成する、といった場合です。

専用のアプリでは、これらの機能を設定項目として扱えます。Temposhot の Auto Capture では、ソースを Screens、Windows、Custom Area から選択し、停止条件(Screenshots、Duration、End time)、ms、秒、分、時間単位の間隔、任意の Key press、Countdown を設定します。フローティングツールバーで実行を一時停止、再開、完了でき、結果は PNG、JPG、ZIP、検索可能な PDF、MP4 として書き出せます。Kindle プリセット(20 枚、500 ms、右矢印、3 秒のカウントダウン)などのプリセットは、設定を保存して再利用できます。

Auto Capture turning 6 pages of a book in Preview with Page Down after each screenshot

Auto Capture での 120 スライドの作業

同じ作業は、5 つの設定に対応します。ウィンドウのソースが -R の領域に置き換わり、Temposhot はカウントダウンの後にウィンドウを前面に表示するため、クリックは不要です。

設定パネル: 停止条件は Screenshots、枚数 120、間隔 2 秒、キー入力は右矢印(Pro 機能)、カウントダウン 5 秒、ソースは Windows でプレゼンテーションのウィンドウを選択。

キー入力の自動化には Temposhot Pro と、アクセシビリティの権限が必要です。Pro がない場合でも、ダッシュボードや進捗バーのように内容が自動で変化するコンテンツであれば、キー入力なしの定時実行は動作します。

スクリプトとアプリの比較

比較表。列は標準のループと Auto Capture。行は、1 つのウィンドウの撮影、時刻による停止、実行中の一時停止、ディスプレイの変更、出力形式。

数時間単位の実行

標準のループは、作業セッションのタイムラプスのような、長時間の時間指定の実行に最も弱いです。スクリプトは終了時刻を計算し、スリープをまたいで動作し、ディスプレイの変更を処理する必要があります。Auto Capture では、Duration と End time の停止条件がこれを扱います。どちらも Pro の機能です。

標準の Timelapse プリセットは一例です。1 時間の Duration、3 秒の間隔、キー入力なし、5 秒のカウントダウンで、約 1,200 フレームが得られます。既定の毎秒 15 フレームで MP4 として書き出すと、そのフレームは約 80 秒で再生されます。Mac がロックされるかスリープすると、Auto Capture はストリームを一時停止し、ロック解除後に再開します。一時停止した Duration の実行では、一時停止の時間は数えられません。

フローティングツールバーと Capture メニューからも、別のアプリが前面にある間にキー操作で制御できます。

ショートカット一覧: Control C で Terminal のループを停止、Command 1 で Temposhot の Auto Capture を開く、Shift Command R で Auto Capture を開始、Command period で Finish Capture を実行、Command N で新しい空のセッションを開始。

FAQ

標準の方法で最も早く設定できるのはどれですか?

Terminal のループです。必要な権限は 1 つ、必要な行は 5 行です。同じ行は、後で Automator や Shortcuts の中でもそのまま使えます。

Mac を起動したままにする必要がありますか?

はい。スリープしたディスプレイでは黒いフレームが生成され、画面がロックされると撮影が中断されます。caffeinate -di は、コマンドの実行中、ディスプレイとシステムをスリープさせません。

標準ツールで 1 つのウィンドウを撮影できますか?

screencapture -l はウィンドウ ID を指定して撮影できますが、macOS にはウィンドウ ID を一覧表示する標準のコマンドがありません。ヘルパースクリプトか専用のアプリが必要です。

スクリーンショットの自動化とは正確には何ですか?

人がショートカットを押す代わりに、ツールがルール(間隔、クリック、URL のリスト)に従ってスクリーンショットを撮ることを指します。詳しい定義はスクリーンショット自動化の用語集を参照してください。

番号付きの PNG ファイルを 1 つの PDF にするには?

Image to PDF で順番どおりに結合します。PDF を検索可能にする必要がある場合は、Screenshot to Searchable PDF でテキストレイヤーを追加します。ゼロ埋めの名前にしておくと、ファイルを追加したときも順序が正しく保たれます。

フレームが別のディスプレイから撮影されているのはなぜですか?

-m は常にメインディスプレイを撮影します。メニューバーのあるディスプレイがそれです。対象のウィンドウをそのディスプレイに移動するか、-D にディスプレイ番号を指定して別のディスプレイを撮影してください。

繰り返し行うスクリーンショットを完成した成果物にする

標準のループで、ウィンドウのソース、ページ送り、PDF や MP4 の書き出しが必要になった場合は、Mac でのスクリーンショット自動化 を参照するか、自動撮影ガイド に従ってください。

screenshot-automationmacosscreencaptureshortcutsautomator

このページで使用する用語: screenshot timer, screenshot workflow, window capture

繰り返し撮影するスクリーンショットを、完成したデータに仕上げます

Temposhotは、タイマーまたはクリックごとに撮影し、結果をPDF、画像、ZIP、MP4で書き出します。

関連記事