         }
         cardHolderErrorLabel.isHidden = cardHolderTextField.text == nil
     }
+
+    /// バリデーションOKの場合、次のTextFieldへフォーカスを移動する
+    ///
+    /// - Parameter currentField: 現在のTextField
+    private func focusNextInputField(currentField: UITextField) {
+
+        switch currentField {
+        case cardNumberTextField:
+            if cardNumberTextField.isFirstResponder {
+                expirationTextField.becomeFirstResponder()
+            }
+        case expirationTextField:
+            if expirationTextField.isFirstResponder {
+                cvcTextField.becomeFirstResponder()
+            }
+        case cvcTextField:
+            if cvcTextField.isFirstResponder && isHolderRequired {
+                cardHolderTextField.becomeFirstResponder()
+            }
+        default:
+            break
+        }
+    }
 }

            cardNumberTextField.text = cardNumber.formatted
            cardNumberErrorLabel.text = nil
            updateBrandLogo(brand: cardNumber.brand)
        case let .failure(error):
            switch error {
            case let .cardNumberEmptyError(value, instant),

        case let .success(cvc):
            cvcTextField.text = cvc
            cvcErrorLabel.text = nil
            focusNextInputField(currentField: cvcTextField)
        case let .failure(error):
            switch error {
            case let .cvcEmptyError(value, instant),
