# Synology Proxy 過去の失敗原因と対策 (Recap)

ユーザー様より「なぜSynology経由だとうまくいかなかったのか？」というご質問を頂きました。
過去のエラーログと構成状況に基づく分析結果は以下の通りです。

## 1. 最大の原因:「自宅の壁 (Network Accessibility)」

以前の構成では、アプリの設定が以下のような **ローカルIPアドレス** になっていました。

```dart
// 以前の設定 (イメージ)
static const String proxyUrl = 'http://192.168.31.89:8080';
```

*   **何が起きたか**:
    *   自宅のWi-Fiに繋いでいる時: **OK** 🟢 (繋がる)
    *   会社のWi-Fi / 電車の4G回線: **NG** ❌ (繋がらない)
*   **症状**:
    *   外出先でアプリを開くと「タイムアウト」や「接続拒否」エラーが発生。
    *   これを回避するためにポート開放やVPNなどを検討しましたが、設定が複雑で不安定になりがちでした。

## 2. 第2のハードル:「セキュリティ制限 (HTTP vs HTTPS)」

AndroidやiOSの最新OSは、**暗号化されていない通信 (HTTP)** をデフォルトでブロックします。

*   **問題点**: 自宅サーバーに正式なSSL証明書 (`https://`) を設定するのは、ドメイン取得や証明書更新などの手間が非常に大きいです。
*   **結果**: アプリ側で `android:usesCleartextTraffic="true"` といったセキュリティ緩和設定を入れる必要があり、リリース審査的にも好ましくない状態でした。

## 3. 第3の壁:「往復のレイテンシ (Double Hop)」

```text
[スマホ] --(画像)--> [Synology] --(画像)--> [Google Gemini]
```

*   **ボトルネック**:
    *   自宅のインターネット回線（特に**上り/アップロード速度**）が遅い場合、スマホから画像を受け取ってGoogleに投げるまでの時間が倍増します。
    *   画像サイズが大きいと、ここで10秒〜20秒の待ち時間が発生し、アプリが「応答なし」と判断して切断してしまうケースがありました。

---

## ✅ 今回の解決策: Cloudflare Tunnel

今回提案している「Phase 2: Container Manager + Cloudflare Tunnel」構成では、これらが全て解決します。

1.  **脱・ローカルIP**: `cloudflared` コンテナが自動でトンネルを掘り、`https://ai-proxy.example.com` のような**固定の公開URL**を発行してくれます。
    *   → **会社からも電車からも繋がります。**
2.  **自動HTTPS化**: Cloudflareが勝手にSSL証明書を貼ってくれるので、アプリからは完全に安全な `https` 通信として見えます。
    *   → **セキュリティエラーが出なくなります。**
3.  **速度対策**:
    *   これでも「自宅回線の上り速度」依存は残りますが、アプリ側の実装で「画像の圧縮(Resize)」を適切に行うことで回避可能です（実装済み）。

### 結論
前回の失敗は「技術的な不可能」ではなく、**「ネットワーク経路(アクセス権)の問題」** でした。
Cloudflare Tunnel を導入することで、この経路問題はきれいに解消されます。
