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側の保存先を用途別(InboxScreenshots など)と日付別のフォルダに分けた
  • 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 / adbAndroid 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