メモ2ブログ

メモtoウェブログ。旧ブログはこちら。 http://sakebook.blogspot.jp/

スマホのキャプチャを扱いやすくするCLI「pbssc」を作った

久しぶりの更新です。

コードレビューや動作確認などでスマホ画面のキャプチャを貼り付けたくなることがあります。

そういう時に、シュッとキャプチャをとってClipboardに貼り付けられるツールを作りました。

github.com

インストールはHomebrew経由で行えます。

$ brew tap sakebook/tap && brew install pbssc

オプションをつけてOSを指定して実行できます。

// Android
$ pbssc -a

// iOS
$ pbssc -i

READMEにdemo動画があります。

実装のコアは既存ツールに依存

実際にキャプチャを撮る部分はadblibimobiledeviceに依存しています。

adb、つまりAndroid端末だと次のようにキャプチャを取れます。

$ adb exec-out screencap -p > example.png

libimobiledevice、つまりiOS端末だと次のようになります。

$ idevicescreenshot example.png

キャプチャを撮るだけであればそれぞれのツールで既にサポートされていたので問題ないのですが、今回特に解決したかったのは Clipboardへの貼り付けでした。

Clipboardへの貼り付け

pbcopy が使えるかと思ったのですが、 画像pathからは渡すことができませんでした。

そこで今回使ったのは AppleScript です。

AppleScript

AppleScript is a scripting language created by Apple. It allows users to directly control scriptable Macintosh applications, as well as parts of macOS itself. You can create scripts—sets of written instructions—to automate repetitive tasks, combine features from multiple scriptable applications, and create complex workflows.

DeepL翻訳

AppleScriptは、アップル社が開発したスクリプト言語です。ユーザーは、スクリプト可能なMacintoshアプリケーションやmacOS自体の一部を直接制御することができます。スクリプト(一連の命令文)を作成することで、反復的なタスクを自動化したり、複数のスクリプト可能なアプリケーションの機能を組み合わせたり、複雑なワークフローを作成したりすることができます。

developer.apple.com

試しにどんなものか確認したい場合は、手元で次のコマンドを実行するとmacOSのアラートを表示することができます。

$ osascript -e 'display alert "Hello World"'

AppleScriptを使えば、macOS上の.appなども起動したりできます。cronで動かすことで日々のルーチンの自動化などもできそうですね。

今回はAppleScriptを使ってClipboardを操作しました。

既存ツールとAppleScriptを混ぜる

ShellScriptからAppleScriptを呼び出すことも、その逆も可能でしたが、今回はShellScriptからAppleScriptを呼び出すことにしました。既存ツールの存在確認などがやりやすいと思ったからです。

AppleScriptを実行するときは osascript コマンドを使います。なので、ShellScript内では次のように記述してAppleScriptを呼び出します。

copy_to_clipboard () {
   osascript -e "
   on run
     set the clipboard to POSIX file \"$filepath\"
   end
  "
  echo "Set image to clipboard from $filepath"
}

関数にすることは必須ではないです。

これらをまとめて取り扱いやすくしたのがpbsscです。

まとめ

同じような課題感を持っている人に対して便利なツールになったと思います。

直接使わなくても、今回紹介した内容が間接的にでも助けになれば良いなと思います。

参考

Android Debug Bridge (adb)  |  Android Developers

libimobiledevice · A cross-platform FOSS library written in C to communicate with iOS devices natively.

macos - Set clipboard to image - pbcopy - Stack Overflow

Commands Reference