         }
         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
+        }
+    }
 }
 

            cvcTextField.text = cvc
            cvcTextField.textColor = self.fontColor
            cvcErrorLabel.text = nil
        case let .failure(error):
            switch error {
            case let .cvcEmptyError(value, instant),

            expirationTextField.text = expiration
            expirationTextField.textColor = self.fontColor
            expirationErrorLabel.text = nil
            focusNextInputField(currentField: expirationTextField)
        case let .failure(error):
            switch error {
            case let .expirationEmptyError(value, instant),
