私は小説家が書く短編が好きで、村上春樹さんの作品も長編小説よりエッセイのほうが好みだったりする。安西水丸さんがイラストを担当した「村上朝日堂」は洒脱で、軽妙で、ああこんな文章を書けたらなあとつくづく思う。中島らもさんもまた然り、名回答(?)を集めた「明るい悩み相談室」や短編の「お父さんのバックドロップ」は傑作だった……などと思いを巡らしたきっかけは「AirDrop」だ。

AirDropといえば、iPhone/iPadとMacにおけるワイヤレスファイル転送の基本。直感的なユーザインターフェイスを備えるだけでなく、BLEとWi-Fi、そしてIPv6の長所を巧みに活用しているところがミソだ(参考)。ワイヤレスファイル転送の実装として鮮やかかつエレガント、バックドロップさながらのキメ技といえる。

そのAirDropは、OS X 10.7 Lionのとき追加された「Multipeer Connectivity」というプライベートフレームワークにより実現され、iOS 7でiOSデバイスにも導入された。Mac/iOSデバイス間で相互のやり取りが可能になるのはOS X 10.10 Yosemite/iOS 8以降となるが、「エアドロ」という言葉が広い世代に浸透していることからも伺えるように、いまや必要不可欠な機能となっている。

しかし、筆者には長年の不満が燻る。CUIでAirDropによるファイル送信ができないからだ。1日の大半をEmacsとTerminalで過ごす身、特にディレクトリツリーの深層で作業しているときにはシェルですべてを済ませたい。Finderに切り替えたがために、画像などのファイルにメタデータが付与されAppleDouble形式となってしまい、ZIPで圧縮するときに「__MACOSX」が作成される面倒も避けたい。

  • いまや必須機能の「AirDrop」

何かないかと探していたところ、「terminal-share」(リンク)を発見。macOSの共有機能(NSSharingService)を利用したツールで、早い話がアプリの[↑]ボタンから利用する機能の数々 -- メッセージやメモ、写真に追加など -- をコマンドラインから実行できるというもの。8年近く前の第71回で取り上げたときは用例を紹介していないAirDrop対応に、今更ながら気付いたのだ。書いたのはAirDropの利便性が一気に高まったiOS 8登場の2年前なだけに、気付かないのも無理はない。

このterminal-shareはRuby Gem形式で配布されているので、導入はかんたん。Terminalで「sudo gem install terminal-share」を実行すれば準備完了、それだけで利用できるようになる。

  • Gemをインストールする

使いかたはシンプル、「-service」オプションの引数として「airdrop」を指定し、続けてデータ種(表1)とファイルパスを記述すればいい。

たとえば、カレントディレクトリにある「hamster.png」というPNG画像をAirDropする場合、以下の要領でコマンドラインを記述する。JPEGやHEIF、PNGやPDFなどプレビューアプリ(Preview.app)で開けるものは「-image」を指定する、と覚えておけばいいだろう。

$ terminal-share -service airdrop -image hamster.png

一方、データ種を「-video」にすると、グッと汎用性が出てくる。基本的には動画ファイル用のオプションだが、M4AやMP3といった音楽ファイル、ZIPやXLS、TXTなど"その他"のファイルにも利用できるのだ。しかも、画像ファイルすら扱えてしまう懐の広さ。「NSURLs written to the pasteboard via...」という警告は受けるが、迷ったら「-video」と覚えておけばいい。

ということは、以下のエイリアスを「~/.zshrc」や「~/.bashrc」に記述しておくと、幸せになれそうだ。かなり安直だが、「ad ファイル名」でカレントディレクトリをAirDropできるのはうれしい限り。ワイルドカードを使えないという制約はあるものの、シェル暮らしの彩り(?)が増すに違いない。

alias ad='terminal-share -service airdrop -video'
表1:指定できるデータ種
-image 画像ファイル(JPEGやHEIF、PDFなど)
-video 動画ファイル(MOVやMP4など)をはじめとした各種ファイル
-url URL
  • 念願のシェルからAirDrop。鉄人ルー・テーズもびっくりだ

  • 実のところ、「-video」オプションは雑多なファイル種を扱えてしまう