ついに公開された「macOS Sierra」。OS XからmacOSに名称変更されてから最初のリリースであり、当コラムとしてもどう名乗るか悩みどころだが、その新機能を探ることのほうが先決だ。まずは、iOSとMac間でのコピー&ペーストが可能になるという「ユニバーサルクリップボード」を取りあげてみたい。
ユニバーサルクリップボードの概要
ユニバーサルクリップボードは、従来のクリップボード(ペーストボード)にネットワーク対応を施した機能拡張版であり、iOS 10およびmacOS Sierraで利用できる。従来のペーストボードに共有機能が付加されているため、既存のアプリケーションやサービスをそのまま利用できることがポイントだ。
通信の基本的なしくみは、Bluetooth Low Energy(BLE)と無線LANのコンビネーションというHandOffやAirDropでもお馴染みのもので、サポートされるハードウェアもそれらに準ずると考えていい。低消費電力のBLEで通信対象を捕捉しておき、帯域が必要な通信が発生した場合は無線LANに切り替える、という方法で通信速度を稼ぐわけだ。
もちろん、iPhoneでコピーしたものをMacにペーストできるし、その逆にも対応する。上述した動作条件さえ満たしていれば、iPhoneとiPadなどiOSデバイス間でも、Mac同士でも、スタンドアローンで作業するときと変わらない感覚でコピー&ペーストできる。ただし、データが保持されるのは最後のコピー実行から2分間で、それを過ぎるとデータは破棄され、従来どおりの(スタンドアローンの)ペーストボードに戻る。
認証機構にiCloudを利用することもポイントだ。同じApple IDでサインインを済ませておけばよく、コピー&ペーストのたびにダイアログが表示されることはない。なお、通信はP2Pで行われるため、コピーした内容がiCloudにアップロードされるのでは(そのぶん通信コストと処理のオーバーヘッドが生じるのでは)、という心配は無用だ。
Terminalで「ユニバーサルクリップボード」はこう使う
Terminalでユニバーサルクリップボードは使えるのか、という質問に対する答えはもちろん「Yes」だ。従来からある「pbcopy」や「pbpaste」といったクリップボードにアクセスするコマンドは、特になにもしなくてもユニバーサルクリップボードに対応している。つまり、iPhoneでコピーしたデータをpbpasteコマンドでMacにペーストし、pbcopyコマンドでコピーしたMacのデータをiPhoneでペーストできる、というわけだ。
これではイメージが膨らまないだろうから、いくつか実例を紹介してみよう。実際に手を動かしてみれば、こんなことができるようになったのか、と新鮮な気持ちで受けとめるに違いない。
1. iPhoneでコピーしたテキストをファイルに書き出す
Terminal上でペーストボードを扱うための基本コマンドは「pbcopy」と「pbpaste」ということになる。この2つのコマンドが扱えるデータはプレインテキストとリッチテキスト、EPSの3種であり、その範囲であればiOSかmacOSかを問わず扱える。
たとえば、『メモ』や『メール』などiOSの適当なアプリで文字列をコピーし、それをテキストファイルに書き出す場合、以下の要領でリダイレクトすればいい。
$ pbpaste > plain.txt
iOSで『ヒント』アプリの記事を共有メニューでコピー、その後pbpasteコマンドとFinderの「クリップボードを表示」を実行して内容を確認したところ。文章とURLがユニバーサルクリップボードにあることがわかる |
2. MacのスクリーンショットをiPhoneで受信
ペーストボード自体が拡張されているため、あらゆるアプリケーション/コマンドがでネットワーク対応の恩恵に預かれるところがユニバーサルクリップボードの大きな利点だ。もちろん、「-c」オプションを付けて実行するとスクリーンショットの内容をクリップボードに取り込めるscreencaptureコマンドも、実行から2分以内であればiOSのアプリにペーストできる。
$ screencapture -c
3. 他のMacにある画像ファイルを手もとのMacにコピー&ペースト
pbcopy/pbpasteコマンドはバイナリファイルを扱えないが、文字符号化という方法でその問題を回避できる。コマンドでの作業となる都合上Mac間でのやり取りに限定されてしまうが、近年ではとんとご無沙汰の「uuencode」と「uudecode」を使えば、画像でもオフィス文書でもユニバーサルクリップボード経由でやり取りできる。AirDropを使えば済む話ではあるが、ファイルのやり取りをスクリプト化したい場合は、ひとつの解になるかもしれない。
ファイルをuuencodeで符合化し、ユニバーサルクリップボードに取り込む
$ uuencode gazou.png - | pbcopy
ユニバーサルクリップボード上のテキスト(uuencodeされたもの)をuudecodeにパイプし、ファイルに書き出す
$ pbpaste | uudecode -o output.png