こんにちは、個人開発者のhiyoyoです🐤
Androidを使いながらMacで作業していると、「スクショをMacに持ってくる」という地味な作業が毎日発生します。Googleフォトの同期を待つ、自分宛にDMで送る、ケーブル繋いでMTPでコピー……どれも微妙にダルい。
この問題を解決するために Hiyoko Shot というmacOSアプリを作りました。この記事では実装で面白かった部分を紹介します。
どんなアプリか
Hiyoko Shot はメニューバー常駐型のmacOSユーティリティです。USB または Wi-Fi で繋いでおくだけで、スクショを撮った瞬間に自動でMacへ転送されます。
- 📱 AndroidのスクショをMacへ自動転送(USB / Wi-Fi対応)
- 🖼 ギャラリーUIでプレビュー・ドラッグ&ドロップ共有
- ⚡ ADB
exec-out を使った低オーバーヘッド転送
- 🦀 バックエンド: Rust、フロントエンド: React + Framer Motion、フレームワーク: Tauri

スマホでスクショ撮った時のHiyoko Shotでの画面

設定画面(日本語と英語のお好きな言語を選択できます)
実装で面白かったところ
ADB exec-out による直接転送
Androidのスクショ転送で真っ先に思いつくのは adb pull ですが、Hiyoko Shotでは adb exec-out を採用しています。
adb exec-out screencap -p
adb pull はAndroid端末にファイルを一時保存してからPCへコピーするのに対して、exec-out はコマンドの標準出力を直接ホスト側にストリームします。
| 方式 |
フロー |
adb pull |
Android側に書き込み → 転送 → Mac側で読み込み |
exec-out |
直接ストリーム → Mac側で受け取り |
保存・転送・読み込みのオーバーヘッドを極限まで削減できます。
5秒ポーリングによる監視
スクショの「撮った瞬間」を検知するために、ADBでAndroid側の /sdcard/DCIM/Screenshots/ を5秒おきに監視しています。
// 疑似コード
loop {
let current_files = list_screenshots_via_adb(&device)?;
let new_files = diff(&last_snapshot, ¤t_files);
for file in new_files {
transfer_file(&device, &file).await?;
}
last_snapshot = current_files;
sleep(Duration::from_secs(5)).await;
}
アプリがバックグラウンドに隠れているときはポーリング間隔を伸ばして低負荷モードに切り替えています。
Base64方式のギャラリー表示
TauriでフロントエンドからRust側の画像を表示するとき、ファイルパスをそのまま <img src> に渡す方法だと環境によって表示されないケースがありました。Base64エンコードしてData URIとして渡す方式で解決しています。
// Rust側
let bytes = fs::read(&image_path)?;
let base64 = general_purpose::STANDARD.encode(&bytes);
Ok(format!("data:image/jpeg;base64,{}", base64))
// React側
<img src={base64DataUri} alt="screenshot" />
ネイティブ ドラッグ&ドロップ
個人的に一番こだわった機能です。ギャラリーの画像をSlack・Discord・Finderへそのままドラッグ&ドロップできます。Tauriの startDrag APIを使い、macOSのネイティブなドラッグセッションを開始します。
「ファイルを探してドラッグ」ではなく「ギャラリーから直接ドロップ」で済むのは、毎日使うと体感が大きく違います。
Wi-Fi接続モード
USB接続で一度ペアリングした後、同じネットワーク内であればWi-Fiでも接続できます。ADB over TCP/IPを使っており、ケーブルなしでも自動転送が続きます。
adb tcpip 5555
adb connect 192.168.x.x:5555
スタック
| レイヤー |
技術 |
| バックエンド |
Rust |
| フロントエンド |
React + Framer Motion |
| フレームワーク |
Tauri |
| ADB通信 |
exec-out / TCP/IP |
| 設定永続化 |
tauri-plugin-store |
| 画像変換 |
Rustの画像処理クレート |
おわりに
Tauri + Rust でmacOSアプリを作る体験は非常に良く、特にADBとの低レベルな連携をRustで書けるのが気持ちよかったです。「スクショをMacに持ってくる」という超ニッチな課題ですが、毎日使う人には確実に刺さるツールだと思っています。
興味あればぜひ使ってみてください🐤
Hiyoko Shot は¥1,000 / $7の買い切りです。