Android→Windowsのファイル転送ツールを自作して約3か月。使い続けたのは共有メニューからのスクショ転送だった
Androidスマホで撮ったスクリーンショットを、Windows PCの作業フォルダへ送る。1回あたりは数十秒で終わる作業ですが、Android実機でアプリを作っていると、開発中に何度も繰り返し発生します。
この「小さいけれど繰り返す転送」のために、SafeDropという自分用のツールを作り、2026年6月から約3か月使ってきました。スクリーンショット以外のファイル転送や、PCで書いた短い文章をスマホへ渡す機能も作りましたが、使い続けた記録がいちばん多く残ったのはスクリーンショット転送でした。
この記事は機能紹介ではなく、作って使い続けた結果、何が残って何が残らなかったかの記録です。仕組みや実装上のバグの話は、公開時に書いたQiitaの記事にまとめています。
なぜ既存の手段ではなく作ったのか
当時の開発環境は、MacからRDPでWindowsに入り、そのWindows上でAndroidアプリをビルドする構成でした。この構成では、実機とのUSB接続やadbが安定しない場面がありました。
その結果、実機との間の往復がそれぞれ別の手段になっていました。
- PCでビルドしたAPKを実機に入れる
- Androidで撮ったスクリーンショットをPCへ戻す
- PC側にあるURLや短い文章をAndroidへ渡す
USB/adb、クラウドストレージ、チャットアプリへの自分宛て送信など、どれも一応はできます。ただ、毎回「今回はどれを使うんだっけ」となり、それが地味に面倒でした。
1回ごとの手間は小さくても、開発中は同じ往復を何度も繰り返します。そこで、この往復だけに絞ったLAN上の小さなツールを作ることにしました。
最初に作ったものと、途中で変えたもの
最初に作ったのは「Safe Explorer + PC Drop」という名前の、Android内でフォルダを選んでファイルを一覧し、選んだファイルをPCへ送るアプリでした。Android側の権限はネットワーク通信のみで、フォルダへのアクセスはAndroid標準のフォルダ選択(SAF)経由にしています。
このMVPで実機からPCへの送信ができたので、次に進む前にしばらく使ってみることにしました。すると、翌日にはもう方向が変わっていました。
- Androidの共有メニューからSafeDropを選んで送れるようにした
- PC側の保存先を用途別(
Inbox、Screenshotsなど)と日付別のフォルダに分けた - PCでビルドしたAPKを、スマホのブラウザからダウンロードしてインストールできるようにした
- PCのブラウザで入力したテキストを、スマホのブラウザで開いてコピーできるようにした(Text Inbox)
そして、作り始めて2日目の時点で、プロジェクトの定義を「汎用のAndroid→PCファイル転送アプリ」から「Android実機開発で壊れがちな経路だけを補う小さなブリッジ」に変えました。同時に、ファイラーとしての機能強化、大容量転送やレジューム、クラウド連携などは「やらないこと」として明記しました。
今のSafeDropでできること
現在のSafeDropは、Androidアプリと、Windows上で動くNode.jsのサーバーの組み合わせです。同じ自宅LAN内で使うことを前提にしています。
- Android → PC:共有メニューからスクリーンショットやファイルを送り、PC側の用途別・日付別フォルダに保存する
- PC ↔ Android:Text Inboxで短いテキストを受け渡す(直近10件の履歴つき)
- PC → Android:PCでビルドしたAPKを、スマホのブラウザからダウンロードしてインストールする
PC側のサーバーはNode.js 20以降の標準モジュールだけで動き、npmの依存パッケージはありません。Android側はPCのアドレスとトークンを設定して使います。
実際に使い続けた用途
「実装した機能」と「実際に繰り返し使った機能」は別物です。ここでは、PC側の受信フォルダに残っているファイルの日付と、Text Inboxの履歴から確認できたものだけを書きます。
先に限界を書いておくと、SafeDropのサーバーはリクエスト単位のログを残していません。そのため、ファイルとして保存される経路とText Inbox以外は、使ったかどうかを後から確かめられません。また、受信後に移動・削除したファイルは数えられないので、以下の件数は「少なくともこれだけ使った」という下限です。
スクリーンショット転送(Android → PC)
いちばん使っていたのがこれでした。Screenshots の保存先には、2026年8月2日から9月5日までの8日分、20件以上のスクリーンショットが残っています。1日に9枚送った日もありました。
受信フォルダから分かるのは「そのファイルがPCに届いた」という事実だけで、どの操作で送ったかは記録されていません。ただ、SafeDropの実装では、アプリ内でファイルを選んで送った場合は保存先を指定せず、既定の Inbox に入ります。Screenshots を保存先に選べるのは、Androidの共有メニューから開く送信画面だけです。そのため、Screenshots に残っているファイルは共有メニュー経由で送ったものと判断できます。
共有メニューから Screenshots を選んで送り、PC側の Screenshots/日付/ に保存されること、2枚目以降は保存先を選び直さなくてよいことは、開発中の実機テストでも確認しています。
その他のファイル共有(Android → PC)
用途を決めていない Inbox の保存先には、6月末から8月下旬までに、PDF、テキスト、JSON、GPXなどが残っています。スクショほど頻繁ではありませんが、「スマホにあるファイルをPCで開きたい」という場面で使っていました。こちらは共有メニューとアプリ内選択のどちらでも Inbox に入るため、どちらの操作で送ったかは記録からは区別できません。
Text Inbox(PC → Android)
PCのブラウザで書いた文章をスマホで開いてコピーする用途です。履歴には7月末から9月初めの記録が残っていて、頻度は高くありませんが、実際の用事に使っています。
APK配布(PC → Android)
もともとの動機のひとつがAPK配布でしたが、ダウンロードの記録が残らない経路なので、どれだけ使ったかは数えられません。開発記録を見ると、他のアプリのリリース作業の時期にまとめて使っていて、1週間の観察期間中には使った痕跡がありませんでした。「使っていない」とは言えませんが、「毎日使っている」とも言えない、というのが正確なところです。
継続利用して分かったこと
残ったのは「今いるアプリから送る」導線だった
最初に作ったのは、SafeDropを開いてファイルを探して送るアプリでした。ところが、継続して使ったことを記録で確かめられるのは、共有メニューから Screenshots へ送る使い方です(上で書いたとおり、Screenshots へは共有メニューからしか送れません)。アプリ内でファイルを選んで送る使い方が続いていたかどうかは、記録からは分かりません。
ここからは考察ですが、送りたいスクリーンショットは、撮った直後の写真アプリなど、その時点で開いている画面の中にあります。SafeDropを開き直して同じファイルを探すより、その場から共有するほうが手順が少なく済みます。作り始めてすぐに共有メニュー対応へ舵を切ったことが、使い続けた記録につながったのだと考えています。
効いたのは転送速度ではなく、毎回の選択が1つ減ったこと
スクリーンショットは1枚数百KB程度で、転送速度が問題になったことはありません。効いたのは、操作と判断が少しずつ減ったことでした。
- 前回選んだ保存先を覚えているので、2回目以降は
Screenshotsを選び直さなくてよい - 保存先が
Screenshots/日付/に決まっているので、PC側でファイルを探さなくてよい - 送信結果にPC側の保存パスが表示されるので、届いたかどうかを確認しに行かなくてよい
- USBケーブルをつながなくてよい
どれも1回あたりでは数秒の差です。ただ、開発中に同じ往復を繰り返していると、この数秒の差が「わざわざ別の手段を開くか、その場で送るか」の分かれ目になりました。
本当の摩擦は、使ってから見つかった
継続利用中に直した点は、どれも設計段階では想定していなかったものでした。
- 普段使っているファイル管理アプリから共有すると、共有先にSafeDropが出てこなかった。受け付けるファイル形式を個別に列挙していたためで、形式は問わずに受け付け、実際にファイルとして開けるかで判定する方式に変えた
- 自作アプリの「ログをコピー」からクリップボード経由で共有すると、テキストとして渡されるため、送信対象が0件になっていた。共有されたテキストを
.txtファイルにして送るようにした - Text Inboxで新しい文章を送る前に、毎回「Clear」を押していた。調べると、実は事前のクリアは技術的に不要で、入力欄が前回の内容で埋まった状態で開くのが原因だった。入力欄を空で開き、過去の送信内容は履歴から呼び出せるようにした
- Text Inboxの日時がUTCのまま表示されていて分かりにくかったので、日本時間の表示にした
特にText Inboxのクリアは、使っている本人が「そういうものだ」と思い込んで毎回余分な操作をしていたものです。機能の一覧を眺めていても、こういう摩擦は見えません。
使用頻度は想像より低く、波があった
「毎日使う定番ツール」と書きたいところですが、記録を見るとそうではありません。1週間の観察期間を設けたところ、実際に使った日はそのうち1日だけでした。使う日はスクショを何枚もまとめて送り、使わない週もあります。
一方で、使った場面では回避策を取った形跡も不具合もなく、そのまま送れていました。頻度は高くないものの、発生したときには迷わずこれを使う、というのが実態に近いと思います。
自分のツールでも、記録しないと何を使ったか分からない
これは想定外の学びでした。PCのアドレスが変わるなどで接続できなかった回数を調べるために、1週間、使うたびに記録を残すつもりで表を用意しました。しかし実際には、その表には1行も記入されませんでした。
サーバー側も、起動時の表示にトークンが含まれるため、標準出力を捨てる設計にしていました。その結果、APK配布を何回使ったのかは、作った本人にも分かりません。
「自分で使っているのだから、何をよく使っているかは分かっている」と思いがちですが、実際には、痕跡が残る経路のことしか確かめられませんでした。ツールの価値を判断したいなら、トークンなどを含まない最低限の利用記録を、最初から残す設計にしておくべきでした。
既存の手段との関係
SafeDropが既存の手段より優れている、という話ではありません。解いている問題の範囲が違います。
| 手段 | 向いている場面 | SafeDropとの関係 |
|---|---|---|
| USB / adb | Android Studioから実機へ直接インストール・デバッグできる環境 | その環境ならAPKのインストールはこちらのほうが確実。SafeDropのAPK配布は、USBやadbが使いにくいときの補助 |
| クラウドストレージ、チャットの自分宛て送信 | 場所を選ばず送りたい、写真や動画をまとめて移したい | 写真や動画の汎用的な転送はこちらで足りると判断し、SafeDropでは扱わない |
| LocalSend、KDE Connectなど | 汎用のLAN内ファイル転送、端末間連携 | 無料で成熟したツールがすでにある。SafeDropは、自分の開発作業で繰り返す3つの経路だけに絞ったもの |
SafeDropが担っているのは、「同じLANにある自分のAndroidと自分のWindows PCの間で、開発中に繰り返す小さな往復」という狭い範囲だけです。
SafeDropが向かないケース
正直に書くと、SafeDropが不要な人のほうが多いと思います。
- 今の転送方法で困っていない人:USBやクラウド、既存の転送アプリで足りているなら、乗り換える理由はありません
- 写真や動画を大量に移したい、フォルダを同期・バックアップしたい人:対象外です。大容量転送の中断再開や同期の機能はありません
- 外出先や公共Wi-Fiで使いたい人:自宅などの信頼できるLAN専用です。標準では暗号化されていないHTTP通信で、トークンは誤接続を防ぐ程度の保護です
- PC側でサーバーを常駐させたくない人:Windows側でNode.jsのサーバーを起動しておく必要があります
- PCのアドレスが頻繁に変わる環境の人:PCを自動で見つける機能はありません。アドレスが変わったら、Android側の設定を手で直す必要があります
- 無人でAPKを入れたい人:Androidのインストール確認画面はそのまま表示されます。確認なしでインストールする仕組みではありません
まとめ
SafeDropを約3か月使って、継続利用を記録で確かめられたのは、最初に作った「アプリ内でファイルを探して送る」機能ではなく、共有メニューからスクリーンショットを送る、という1つの導線でした。作る前に想像していた価値と、実際に使い続けた価値は、同じではありませんでした。
利用頻度も想像とは違いました。1週間の観察期間中、実際に使ったことを確認できたのは1日だけで、使う日と使わない日の波がありました。
開発中に繰り返し発生する小さな摩擦は、「作れば便利そう」と考えているうちは本当に解く価値があるのか判断できません。自分用のツールとして作ってみて、しばらく使い、何が残ったかを記録と照らし合わせてみることで、初めて判断できました。そのためには、利用の記録を最初から残しておくことも大事でした。
「自分で使うかどうか」をアイデアの段階でどう判断しているかは、AIにアイデアを出させても刺さらなかったので、Human Gateで絞る仕組みにしたにも書いています。
SafeDropはMITライセンスで公開しています。Android実機とWindows PCの間で、同じような小さな往復に困っている方は、READMEを見て合いそうなら試してみてください。
GitHub: https://github.com/iwadjp/safe-explorer-pc-drop
リリース(Android APK / Windows用サーバーzip): https://github.com/iwadjp/safe-explorer-pc-drop/releases/tag/v0.6.0