Ok let me try to explain based on my own experience
Cucumber is an ATDD (or BDD) tool that allows you to write tests in a business-oriented domain language. This primary use is a conversation tool with product owners. Instead of writing detailed requirements, you express these requirements as examples of the system under test. Each cucumber test, in fact, becomes a business requirement that must be satisfied.
The Cucumber tool itself translates these simple text instructions into a small module so you can execute ruby โโcode. Which Ruby library you use inside the step definitions is completely dependent on the project you are working on.
The safest way to describe Cucumber is that it is a test framework with an emphasis on communication between IT and business partners, which is why it is becoming so popular.
Rspec and Minitest are other structures with other strengths, but do not have this coefficient of readability of the business, since they are mostly code and not so readable for non-technical people. This is not necessarily a bad thing, especially if your product owner has a bit more hands.
How does this relate to something like Capybara? Capybara is an integration test automation library that runs a mute browser on the Rack :: Test platform for very fast tests and has a well-read DSL. The only drawback is that Rack :: Test does not support javascript, so it provides the ability to change Selenium if you are doing a javascript test. Rspec and Cucumber have mechanisms to trigger this failure.
There are many other Ruby automation libraries. For example, if you test against a web application without rails, your cucumber scripts can be defined using Watir-Webdriver, which will control a full web browser, such as Capybara, in Javascript mode. The main difference is that WW has a much more robust set of selectors than Capybara, so itโs a bit easier to write, especially if your code is not super clean (Capybara only supports selection by ID, Value and Text, whereas WW supports almost all whatever)
Most likely, you will want to use RSpec or Minitest to test your device) or the default Test :: Unit) and Cucumber to test integration, if you have an interested product owner or need a common language for test cases. If you do not, you can write your integration tests as examples of Rspec or the minimum equivalent without losing a lot.