Tech Racho エンジニアの「?」を「!」に。
  • IT Tips

Mac: スクリーンショットの保存とコピーを同時に行う方法(翻訳)

概要

元サイトの許諾を得て翻訳・公開いたします。

なお、本記事ではMacの標準機能だけで行う方法が紹介されていますが、BetterTouchToolなどの有償ツール↓を使えば、スクリーンショットの保存とコピーを同時に行うなどの高度な設定も可能になります。

参考: BetterTouchTool: folivora.ai - Great Tools for your Mac!

Mac: スクリーンショットの保存とコピーを同時に行う方法(翻訳)

原文更新

本記事公開後に手順をシンプルなものに変更し、スクリーンショットツールを起動するときの待ち時間を半分程度に短縮しました。

原文更新2

macOS 14.4 Sonomaを使っていて「その操作は許可されていません」エラーを回避したい場合、ショートカットとAutomatorのどちらを使っても確実に回避する方法がないので、代わりにKeyboard Maestroを使うことをおすすめします。

macOSに付属しているスクリーンショットアプリはとても出来が良いのですが、1つだけどうしても残念な点があります。スクリーンショットを「クリップボードに保存する」「ファイルに保存する」のどちらか一方しか設定できず、両方同時に行えないのです。

私はついに重い腰を上げて、スクショのコピーと保存を同時に行う方法を編み出しました。ご興味がおありでしたらぜひお読みください。

🔗 スクリーンショットの撮り方

最初におさらいしておきましょう。私がMacでスクリーンショットを撮るときは、いつもCommand-Shift-4というショートカットを使っていました。これを使ったことがない方向けに、操作方法を説明しておきます。

  1. 被写体の準備ができたら、システムの任意の場所でCommand-Shift-4キーを押します。

  2. 以下の「どちらか」を実行するとスクリーンショットが実際に撮影されます。

  • 画面上の撮影したい領域をマウスでドラッグしてから、マウスを離す。
  • Spaceキーを押して「ウィンドウ選択モード」に切り替えてから、撮影したいウィンドウをクリックする。

🔗 何が問題か

Macのスクリーンショットアプリを起動すると(/Applications/Utilitiesディレクトリから開くか、Command-Shift-5キーを押す)、[オプション](Options)メニューの[保存先](Save to)で、スクリーンショットを特定のディレクトリに保存するか、クリップボードにコピーするかを選べます。

選択したオプションは"保存される"ので、以後のスクリーンショットでも同じオプションが使われます。

私より賢い方なら、保存先をデスクトップなどに設定したうえで、ファイルに保存したいときはCommand-Shift-4キーを押し、クリップボードにコピーしたいときは代わりにCommand-Shift-Control-4キーを押す、といった方法で回避してもよいでしょう。私は後者のショートカットを覚えておくのも面倒なタイプです。

そもそも、ファイル保存とクリップボードへのコピーを同時にやれればいいですよね?

🔗 スクリーンショットのコピーと保存を一発で行う方法

まず以下に大まかな流れをしめします。

  1. スクリーンショット.appCommand-Shift-4キーボードショートカットの対応付けを解除する
  2. Appleのscreencaptureコマンドとosascriptコマンドに依存する形でシェルスクリプトを書く
  3. このシェルスクリプトを実行するショートカットを作成する
  4. Command-Shift-4を新しいショートカットに割り当てる

1. デフォルトのスクリーンショットキーボードショートカットを解除する

まず、インタラクティブなスクリーンショット撮影用のグローバルな既存のショートカットを無効にしておく必要があります。
[システム設定]を開いて左サイドバーを下にスクロールして[キーボード](Keyboard)を選択し、[キーボードショートカット](Keyboard Shortcuts)ボタンをクリックします。
ダイアログウィンドウが表示されたら、左サイドバーの[スクリーンショット](Screenshots)を選択します。

"選択部分のピクチャをファイルとして保存"のチェックボックスをオフにします。

システムのデフォルトキーボードショートカットをオフにすることで、独自のキーボードショートカットを作成できるようになります。

2. シェルスクリプトを書く

次に、スクリーンショットをファイルに保存するとともにクリップボードにもコピーするbashスクリプトを書く必要があります。以下は私向けのスクリプトで、私の場合はこのスクリプトをホームディレクトリ直下に~/bin/screenshotのように配置しましたが、皆さんはお好きな場所に配置して構いません。

#!/usr/bin/env bash

# 使用法:
#
#   $ screenshot
#
# 上のコマンドを実行後、以下のどちらかを行う:
#   - スクリーンショットを撮影したい領域をマウスでドラッグしてから離す形で選択する
#   - スペースキーを押してから、現在のウィンドウをマウスで選択する

# ファイル名は以下のような一意の形式が使われる:
# ~/Desktop/screenshot-2024-03-16-16h43m48s.png
isoTime=$(date +"%Y-%m-%d-%Hh%Mm%Ss")
fileName="$HOME/Desktop/screenshot-$isoTime.png"

# -iオプションを渡すとスクリーンショットアプリがインタラクティブモードで起動する(cmd-shift-4キーを押したときと同様)
screencapture -i "$fileName"

if [ -f "$fileName" ]; then
  # この謎の"«class PNGf»"という呪文は、ファイルコピー用に何らかの理由で必要
  osascript -e "set the clipboard to (read (POSIX file \"${fileName}\") as «class PNGf»)"
fi

3. ショートカットを作成する

ショートカットアプリを起動して、以下を行います。

  1. 新規ショートカットを作成する(私は"Better Screenshot"という名前を付けました)
  2. 右サイドバーで[スクリプティング](Scripting)カテゴリの[シェルスクリプトを実行](Run Shell Script)を追加する
    (訳注: 「スクリプティングアクションが無効になっているため、このアクションは実行できません」と表示される場合は、その下の[環境設定を開く]ボタンをクリックして[スクリプトの実行を許可]チェックボックスをオンにしてください)
  3. スクリプトの置き場所を入力する(私の場合は~/bin/screenshot

4. キーボードショートカットに新しいショートカットを設定する

最後に、同じ画面の右サイドバー上部にあるiアイコンをクリックし、[キーボードショートカットを追加](Add Keyboard Shortcut)ボタンをクリックして、ボックス内でCommand-Shift-4キーを押します(ボックスにはCmd-Shift-$がシンボルで表示されます)。最後にReturnキーを押して確定します。

🔗 思ったより面倒だった

以上の設定をすべて終えてから、新しいショートカットを最初に実行すると、実際にはbashShortcutsアプリ自身のどちらかから、「画面の記録やドキュメントフォルダへのアクセスを行ってよいか」の確認を求められるでしょう。その場合は、それらのパーミッションを有効にしてから「終了して再度開く」を実行する必要があるでしょう。

設定方法は以上です。すっきりした方法とまではいかないものの、この方法が有効であることをお伝えできて自分としては満足です。とはいうものの、インタラクティブなスクリーンショット撮影用の十字カーソルが表示されるまでに150msecほど待たされるのが残念です。

この方法を複数のMacで共有するのは、さほど難しくないはずです。ショートカットアプリはiCloud経由で同期するので、シェルスクリプトファイル(なお私のはsearls/icloud-dotfilesに置いてあります)を別のMacにコピーしてから、同じ要領でキーボードショートカットの設定手順を繰り返せば済みます。

気に入った点やご質問、改善提案などありましたら、ぜひメールでお知らせください💜

関連記事

macOS Sonomaのかな漢字変換で表示される吹き出しを消す方法

Dockerより高速に開発用一時データベースを一括セットアップする方法(翻訳)


CONTACT

TechRachoでは、パートナーシップをご検討いただける方からの
ご連絡をお待ちしております。ぜひお気軽にご意見・ご相談ください。