Linux・iOS・Android・Winsowsも対応！すぐに使えるAirDrop風データ共有アプリ『LocalSend』

# Linux・iOS・Android・Winsowsも対応！すぐに使えるAirDrop風データ共有アプリ『LocalSend』
しゅんです！いつも僕の記事を読んでくれてありがとうございます。

**まず一言！windows大嫌い消すべき。windows大嫌い消すべき。windows大嫌い消すべき。**

今回は、X（旧Twitter）でたまたま見つけた面白いオープンソース「LocalSend」を試してみたところ、かなり素晴らしかったので、布教の意味も込めて記事にまとめました！

LocalSendは、インターネット接続なしでローカルネットワーク上のデバイス同士でファイルやメッセージを共有できるアプリです。技術的には違いますが、FTPサーバーやAppleのAirDropのように使え、**一対一**だけでなく**一対多**の共有も可能で、相手がアプリを持っていなくても**リンク**を渡せばダウンロードができるのが便利です。ただし、同じネットワーク上でしか動作しないため、FTPサーバーのような制約もあります。

LocalSendの技術については、公式のGitHubに英語で詳しく書かれていますが、GPTを使って日本語での要約も試みましたので、技術に興味のある方はぜひチェックしてみてください！

#### インストール方法 (Ubuntu 24の場合)

Ubuntu 24でのインストールは以下のコマンドで簡単に行えます：

```shell
sudo snap install localsend
```
# 実際の画面にも一対多やリンクの説明をしています。

![IMG_9057.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3506235/e6fc77ac-c7a9-d950-37fb-37cead9247d3.png)

# 動画です

<iframe width="560" height="315" src="https://www.youtube.com/embed/OlCMuxjzHb8?si=xHkmYbZkmerf3Jb9" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>

# 公式のリンク
https://github.com/localsend/localsend

# 公式の説明
LocalSendは、インターネット接続がなくてもローカルネットワーク上の近くのデバイスとファイルやメッセージを安全に共有できる無料のオープンソースアプリです。LocalSendは、サードパーティのサーバーを介さず、ローカル環境でのプライバシーを重視した迅速かつ信頼性の高いソリューションを提供します。
主な特徴

- **クロスプラットフォーム対応: Windows、macOS、Linux、Android、iOSで利用可能**
- **高度なセキュリティ: HTTPS暗号化とTLS/SSLを使用し、インターネットを介さずに安全に通信**
- **シンプルな操作: インターフェースが直感的で、すぐに利用を開始できます**

# 仕組み 
## GPTに詳細をまとめてたので、ぜひ確認してください
LocalSendは、REST APIを通じてデバイス間で安全にデータを転送します。暗号化は各デバイスごとに動的に生成された証明書によって提供され、プライバシーを守りながらデータを転送することが可能です。

#　ダウンロード方法
最新バージョンは以下の公式リンクからダウンロード可能です。アプリには自動更新機能がないため、公式ストアやパッケージマネージャーを利用するのがおすすめです。
初め方

 1. アプリをインストールし、ネットワークに接続しているデバイスを検出します。
 2. 転送したいファイルやメッセージを選択し、送信先を指定するだけで、すぐに共有が可能です。


---

# LocalSend ダウンロードのリンク

| OS                      | ダウンロードリンク                       |
|-------------------------|------------------------------------------|
| **Windows**             | [Winget][winget], [Scoop][scoop], [Chocolatey][chocolatey], [EXE Installer][latest], [Portable ZIP][latest] |
| **macOS**               | [App Store][app store], [Homebrew][homebrew], [DMG Installer][latest] |
| **Linux**               | [Flathub][flathub], [Nixpkgs][nixpkgs], [Snap][snap], [AUR][aur], [DEB][latest], [TAR][latest], [AppImage][latest] |
| **Android**             | [Play Store][play store], [F-Droid][f-droid], [APK][latest] |
| **iOS**                 | [App Store][app store] |
| **Fire OS**             | [Amazon][amazon] |

[distribution channels]について詳しく読む。

[windows store]: https://www.microsoft.com/store/apps/9NCB4Z0TZ6RR
[app store]: https://apps.apple.com/us/app/localsend/id1661733229
[play store]: https://play.google.com/store/apps/details?id=org.localsend.localsend_app
[f-droid]: https://f-droid.org/packages/org.localsend.localsend_app
[amazon]: https://www.amazon.com/dp/B0BW6MP732
[winget]: https://github.com/microsoft/winget-pkgs/tree/master/manifests/l/LocalSend/LocalSend
[scoop]: https://scoop.sh/#/apps?s=0&d=1&o=true&q=localsend&id=fb88113be361ca32c0dcac423cb4afdeda0b0c66
[chocolatey]: https://community.chocolatey.org/packages/localsend
[homebrew]: https://formulae.brew.sh/cask/localsend
[flathub]: https://flathub.org/apps/details/org.localsend.localsend_app
[nixpkgs]: https://search.nixos.org/packages?show=localsend
[snap]: https://snapcraft.io/localsend
[aur]: https://aur.archlinux.org/packages/localsend-bin
[latest]: https://github.com/localsend/localsend/releases/latest
[distribution channels]: https://github.com/localsend/localsend/blob/main/CONTRIBUTING.md#distribution

--- 

こちらでQiitaでもそのまま見やすく表示されるかと思います。


**LocalSendの詳細な技術や仕組みについては、以下GPTがまとめたをご覧ください。**

# LocalSendプロトコル v2.1の技術解説
## 公式のGithub説明リンク
https://github.com/localsend/protocol

LocalSendプロトコルは、外部サーバーに依存せず、ローカルネットワーク内でシンプルかつ安全にデバイス間でファイルやメッセージを共有できるように設計されたRESTプロトコルです。以下に、LocalSendプロトコルの基本的な仕組みと各機能について解説します。

## プロトコルの目標

LocalSendの目標は、デバイス間で簡単に安全な通信を確立し、インターネット接続がない環境でも使用可能なシステムを提供することです。デバイスによってはマルチキャストやHTTPサーバー機能が制限されているため、LocalSendは複数の通信手段を駆使してデバイス検出やファイル送信を行います。

### 1. プロトコルの初期設定
LocalSendは特定のポートやマルチキャストアドレスを要求せず、以下のデフォルト設定を使用します。これにより、各デバイスが簡単に接続でき、Androidデバイスにも対応します。

- **マルチキャスト (UDP)**: ポート53317、アドレス224.0.0.167
- **HTTP (TCP)**: ポート53317

### 2. デバイスの識別 (Fingerprint)
LocalSendでは、デバイスの自己検出を避け、デバイス同士を識別するための「フィンガープリント」を使用します。暗号化通信(HTTPS)時は証明書のSHA-256ハッシュ、非暗号化(HTTP)時はランダムな文字列がフィンガープリントとして用いられます。

### 3. デバイスの検出 (Discovery)
LocalSendはマルチキャストやHTTPリクエストを使って、ローカルネットワーク内の他のデバイスを発見します。

- **マルチキャスト (UDP)**: デバイスが起動すると、ネットワーク内に自身の情報を送信し、他のLocalSendユーザーからの応答を受け取ります。
- **HTTP (レガシーモード)**: マルチキャストが使えない場合、HTTPリクエストでローカルIPアドレスに向けてデバイス情報を送信し、デバイス検出を試みます。

### 4. ファイル転送 (HTTP)
LocalSendでは、HTTPサーバーを起動してファイル転送を行います。ファイル転送は、メタデータの準備から始まり、送信先が承認した後に実際のファイルを転送する手順です。

1. **メタデータの準備**: 転送するファイルの情報を送信し、送信先が転送の可否を判断します。
2. **ファイル送信**: サーバーが受け入れたファイルをバイナリデータで送信します。
3. **キャンセル**: 必要に応じて転送をキャンセルすることも可能です。

### 5. 逆ファイル転送 (HTTP)
LocalSendが受信側デバイスで利用できない場合、逆ファイル転送としてHTTPサーバーを送信側に設定し、URL経由でファイルをダウンロードできるようにします。暗号化は行われませんが、ブラウザで簡単にファイルを受信できます。

### 6. その他のAPI
LocalSendには、デバッグや情報取得用のAPIも提供されており、簡単にデバイス情報を確認できます。

### 7. デバイスタイプ
デバイスタイプは、UI表示のために設定され、以下のような種別がサポートされています。プロトコルには影響しません。

- **モバイル**: Android, iOS
- **デスクトップ**: Windows, macOS, Linux
- **ウェブ**: Firefox, Chromeなどのブラウザ
- **ヘッドレス**: GUIなしのプログラム
- **サーバー**: 自己ホスト型のクラウドサービス

LocalSendプロトコルは、シンプルで安全な通信を重視し、柔軟性を備えたアプリケーションです。このプロトコルを用いることで、インターネットがなくともスムーズなファイル共有体験を提供します。


# まとめ

- **一対多のファイル共有が可能！**
- **iOS、macOS、Android、Linuxに対応** – どのデバイスでも使えて最強！
- **ローカルネットワーク上で利用が可能** – 同じWi-Fiに接続している必要はなく、同じネットワーク内であればOK（FTPサーバーのような使い方ができます）

AppleのAirDrop 2がWi-FiとBluetoothを組み合わせて超高速転送を実現しているように、LocalSendも同じネットワークであればスムーズで安全なファイル共有ができます！
でもやはりAppleはすごいと思いました。

**最後にもう一回！windows大嫌い消すべき。windows大嫌い消すべき。windows大嫌い消すべき。**

色々な作業でLinux(ubuntuをサーバー起動させて、iPhone側もIP入力がめんどくさかったから)そういうのがずっと欲しかったよね

最後まで読んでいただき、ありがとうございました。ぜひ拡散よろしくお願いします！