network-reconnectlisted
Install: claude install-skill ttamakijp/dev-templates
このスキルは以下の実装を支援:
- 再接続戦略の選定(指数バックオフ / circuit breaker / hybrid)
- プラットフォーム別の監視 API
- WebSocket 永続接続の heartbeat
- テスト可能な設計
## 呼び出し方
ユーザが「アプリの通信が切れた時に自動復旧したい」「WebSocket reconnect」「ネットワーク復帰時に同期」「切断検出」等を尋ねた時に起動。
詳細な設計方針は [`docs/NETWORK_RESILIENCE.md`](../../../docs/NETWORK_RESILIENCE.md) を参照。
## 推奨実装パス
1. `NetworkStateMonitor` — ネット状態を Flow で公開
2. `ExponentialBackoff` — jitter 付き再試行ポリシー
3. `ReconnectingWebSocket` — コルーチン + OkHttp の永続 WebSocket
4. `LifecycleAwareReconnect` — LifecycleObserver でフォアグラウンド連動
5. `AirplaneModeTest` — 自動テスト
---
## Android Kotlin スニペット
### NetworkStateMonitor.kt
```kotlin
import android.content.Context
import android.net.ConnectivityManager
import android.net.Network
import android.net.NetworkCapabilities
import android.net.NetworkRequest
import kotlinx.coroutines.channels.awaitClose
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.callbackFlow
import kotlinx.coroutines.flow.conflate
import kotlinx.coroutines.flow.distinctUntilChanged
enum class NetworkState {
Available,
Unavailable,
Losing,
}
class NetworkStateMonitor(context: Context) {
private val connectivityManager =
context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
val networkState: Flow<NetworkState> = callbackFlow {
val callback = object : ConnectivityManager.NetworkCallback() {
override fun onAvailable(network: Network) {
trySend(NetworkState.Available)
}