 
             // 最初に接続に成功した WebSocket 以外は無視する
             guard weakSelf.webSocketChannel == nil else {
+                // TODO: ここでも候補から削除した方が良い?
                 return
             }
 
+            // 接続に成功した WebSocket を SignalingChannel に設定する
             Logger.info(type: .signalingChannel, message: "connected to \(String(describing: ws.host))")
             weakSelf.webSocketChannel = webSocketChannel
             weakSelf.connectedUrl = ws.url
 
             // 採用された WebSocket 以外を切断してから webSocketChannelCandidates を破棄する
             weakSelf.webSocketChannelCandidates.removeAll { $0 == webSocketChannel }
-
             weakSelf.webSocketChannelCandidates.forEach {
                 Logger.debug(type: .signalingChannel, message: "closeing connection to \(String(describing: $0.host))")
                 $0.disconnect(error: nil)
             }
 
+            // 候補を破棄する
             weakSelf.webSocketChannelCandidates.removeAll()
             weakSelf.state = .connected
 

    private func setUpWebSocketChannel(url: URL) -> URLSessionWebSocketChannel {
        let ws = URLSessionWebSocketChannel(url: url)

        // 接続時
        ws.internalHandlers.onConnect = { [weak self] webSocketChannel in
            guard let weakSelf = self else {
                return

            Logger.info(type: .signalingChannel, message: "disconnected from \(String(describing: ws.host))")

            if weakSelf.state == .connected {
                // SignalingChannel で利用する WebSocket が決定した後に、 WebSocket のエラーが発生した場合の処理
                // ignoreDisconnectWebSocket の値をチェックして SDK の接続処理を終了する
                if !weakSelf.ignoreDisconnectWebSocket {
                    weakSelf.disconnect(error: error, reason: .webSocket)
                }
            } else {
                // SignalingChannel で利用する WebSocket が決定する前に、 WebSocket のエラーが発生した場合の処理
                // state が .disconnecting, .disconnected の場合もここを通るが、既に SignalingChannel の切断を開始しているため、考慮は不要

                // 接続に失敗した WebSocket が候補に残っている場合取り除く
                weakSelf.webSocketChannelCandidates.removeAll { $0.url.absoluteURL == ws.url.absoluteURL }

                // 候補が無くなり、かつ SignalingChannel で利用する WebSocket が決まっていない場合、
                // Sora への接続に失敗したので SDK の接続処理を終了する
                if weakSelf.webSocketChannelCandidates.count == 0, weakSelf.webSocketChannel == nil {
                    Logger.info(type: .signalingChannel, message: "failed to connect to Sora")
                    if !weakSelf.ignoreDisconnectWebSocket {
