Flatpak のダウンロードが劇的に速くなる方法

# Flatpakには分散型のサーバーがありません。
Flatpak,hubだけダウンロードが遅くなる原因は基本これです。
(FlatpakおよびFlathubを貶す意図はありません。)

### Before
まだマシな例
![Screenshot_14-May_14-41-45_13891.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4026735/3862d5a6-a5c1-406a-90fb-e253d85f3eb5.png)
ひどいと2桁kB/sとかになります
### After
※同じ回線です
![Screenshot_14-May_14-46-27_12987.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4026735/f9bc5b80-ca16-42e0-8363-2f67235e598a.png)
これぐらい出れば普通に使えますよね。

# 速くする方法

### 結論：Cloudflare Warp (VPN) を使う
Cloudflare Warpとは、Cloudflareが無料で提供するVPNサービスです。ここを経由することで、FlatpakのサーバーではなくCloudflareがキャッシュしたデータをダウンロードできます。それによってここまでまともなダウンロード速度を実現できます。
公式では、Windows,iOS,Android,DebianおよびRedhat系LinuxとCentOSに対応していますが、AURで非公式のCLIアプリケーションも存在します。つまりArchもOK。

公式パッケージについては散々他で解説されているので割愛します。今回はAURにあるArchLinux向けのCloudflare Warpのインストールと実行について解説しようと思います。

後述しますが、CDNにキャッシュされてさえいれば速くなるので、別にCloudflare Warp以外でも速くなることは全然あります。大学のVPNとかでもキャッシュされていれば速くなると思います。

## 導入
### cloudflare-warp-binのインストール
お手持ちのAURヘルパーに合わせてコマンドなどは変更してください。まずAURからcloudflare-warp-binをインストールします。
```bash:AUR Cloudflare Warp
$ yay -S cloudflare-warp-bin
```
### 実行
bashではwarp-cliで実行できます。warp-cli connectでVPNを自動的にセットアップします。
```bash:接続
& warp-cli connect
```
Systemdなどでデーモンが実行されていないとこのエラーがでます。
```bash:Unable to Connect
Unable to connect to the CloudflareWARP daemon: No such file or directory (os error 2)

Maybe the daemon is not running?
```
システムにインストールされているSystemdなどでサービスを有効化してあげてください。
```bash:Systemd start
# systemctl enable --now warp-svc
```
### Warpの登録と接続
初回接続時に登録をしてないと登録を促されます。なのでregistrationコマンドで登録する必要があります。
```bash:Register
& warp-cli registration new
```
メールアドレスなどは不要です。規約に同意できる場合はyでそのまま登録が完了します。
登録が完了したら先のconnectコマンドでVPNに接続します。
Successとでて、IPのチェッカーなどでIPが変わっていれば成功です。なお、できていない場合はサービスやOSの再起動をしましょう。私も再起動後に正しく動作しました。
![Screenshot_14-May_15-28-48_10143.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4026735/abb3565d-5be1-44fe-a9a3-8166c82b6131.png)
確認に使用したサイトでは、VPN接続後はドメインへの逆引きが表示されなくなりました。Cloudflare特有かもしれません。

解説は以上です。ここからは小話を少々。

# ダウンロードが遅い原因

基本的にISPが選択する通信経路とそこにあるCDNのキャッシュの有無によって問題が起こるようです。同様の問題について、Redditでも”VPNで解決する”という意見が所々見られました。ただし、変わらない場合もあるようです。

https://www.reddit.com/r/Fedora/comments/10s9crm/very_slow_flathub_download_speeds/

現状、Flatpakはミラーによる分散型のサーバーをサポートしておらず、これからもサポートする予定はないようです。ユーザーはその代わりに世界中のCDNにキャッシュされたデータを受け取ることで通常より早いダウンロード速度を得られます。
しかし、ISPによる通信経路のCDNが低速なCDNだったり、そもそもキャッシュがないとキャッシュの恩恵は得られません。そのためVPNによって経路を変更する必要があるのです。

ミラーについてのGithubのissue

https://github.com/flatpak/flatpak/issues/4874

### なぜCloudflare Warpなのか
Cloudflareは世界屈指のCDNサービスを持つ企業です。そこには当然Flatpakに関するキャッシュもあり、VPNの接続によって確実にその恩恵を受けられます。キャッシュとそこそこの回線さえあれば、どこのCDNでもどこのVPNでも問題はありませんが、”無難な選択肢”としてこのCloudflare Warpは良い選択肢と言えます。

あと、Cloudflare Warpは無料でVPNサービスを受けられかつ帯域もそれなりにあります。
おなじ無料VPNでは、筑波大学のVPN Gate(https://www.vpngate.net/ja/ )などもありますが、キャッシュされていないことも多く、実用としては微妙なところです。

### プロキシじゃだめなの？
多分大丈夫です。確認はしていませんが、見た感じの挙動ではwgetとかcurlでファイル落とすみたいなとものと大した違いはないだろうと思います。ただ、プロキシが使えても、コマンド実行ごとにオプションで設定する必要がある場合がほとんどです。(例:ping)　そんなの面倒でしょう？



なお、いくら無料とはいえ、ゲームの数十GBのダウンロードで帯域を占領するようなことはやめましょう。
# 参考サイト・レポジトリ

Reddit(再掲)

https://www.reddit.com/r/linux/comments/1396l82/flathub_just_hit_1_billion_total_downloads/?tl=ja

Arch Linux (cloudflare-warp-bin)

https://aur.archlinux.org/packages/cloudflare-warp-bin

Cloudflare Warp Linux 公式WIKI

https://developers.cloudflare.com/warp-client/get-started/linux/

コマンドリファレンスもここにあります。