Mục lục
Giới thiệu về rv – Giải pháp quản lý Ruby toàn diện
Trong suốt mười năm làm việc với Bundler, tôi luôn ấp ủ một mong muốn: tạo ra một trình quản lý phụ thuộc tốt hơn. Không chỉ quản lý gem của bạn, nó còn quản lý cả phiên bản Ruby, cài đặt các phiên bản Ruby đã biên dịch sẵn để bạn không phải chờ đợi Ruby biên dịch từ nguồn mỗi khi sử dụng, và quan trọng hơn cả, cho phép chạy bất kỳ kịch bản hoặc công cụ nào được viết bằng Ruby, ngay cả khi chúng yêu cầu một phiên bản Ruby khác với ứng dụng của bạn.
Hành trình tạo ra rv
Trong tất cả những năm tháng đó, tôi luôn hy vọng sẽ có người khác xây dựng công cụ này và tôi có thể sử dụng nó. Sau đó, tôi phát hiện ra rằng thực sự đã có ai đó xây dựng nó… nhưng cho Python. Đó là uv, và đúng một năm trước, phiên bản 0.3 đã được phát hành với tất cả các tính năng tôi từng ước muốn, thậm chí còn có thêm vài tính năng mà tôi chưa từng nghĩ tới.
Ban đầu được tạo ra như một lựa chọn thay thế cho pip, poetry và các trình quản lý phụ thuộc Python khác, uv đã phát triển để bao gồm nhiều công cụ hiện có và có vài thủ thuật hoàn toàn mới.
Đến thời điểm này, tôi đã sử dụng uv gần như một năm và phải thừa nhận rằng, nó thực sự rất, rất tuyệt. Sự kết hợp giữa tốc độ, độ tin cậy và tính năng tạo ra một trải nghiệm xuất sắc. Không còn phải thay đổi một gói khi cài đặt thứ mới chỉ để nhận ra sau này bạn đã làm hỏng thứ cũ, không còn phải thiết lập các phụ thuộc thủ công chỉ để sau này tác vụ cron bị lỗi.
Sự ra đời của rv cho cộng đồng Ruby
Đối với Ruby, không có công cụ tương tự, đó là lý do cách đây khoảng một tháng, tôi quyết định rằng nếu không có công cụ tương tự cho Ruby, tôi sẽ tự mình tạo ra một thay vì cứ tiếp tục mơ mộng. Tôi muốn mang tất cả những thủ thuật và đổi mới của cargo, npm và uv vào một công cụ cho Ruby: rv.
Tính năng nổi bật của rv
Tốc độ vượt trội
Đầu tiên và ấn tượng nhất là tốc độ. Vì rv được viết bằng Rust, tương tự như uv, chúng tôi kỳ vọng có thể chạy ngầm các lệnh tương đương cả rvm install và bundle install ngay đầu mỗi bundle exec, mọi thứ vẫn cảm thấy nhanh hơn so với trước đây.
rv tool run – Sức mạnh thực thi
Tính năng tiếp theo là rvx/rv tool run, lấy cảm hứng từ uvx/uv tool run. Nó giống như npx/npm exec hoặc gem exec, nhưng với siêu năng lực. Bất kỳ lệnh CLI nào cũng có thể chạy trực tiếp và ngay lập tức. Không cần lo lắng về phiên bản hoặc phụ thuộc, vì chúng được cài đặt như một phần của việc chạy lệnh. Điều này cũng sẽ khiến việc xung đột giữa công cụ CLI và Ruby hoặc gem của dự án hiện tại là không thể, vì Ruby và gem của công cụ sẽ được cài đặt trong một môi trường riêng biệt và cô lập.
rv tool install – Cài đặt công cụ linh hoạt
Gần gũi với rv tool run là rv tool install, cho phép bạn cài đặt bất kỳ gem nào dưới dạng công cụ CLI với Ruby và gem riêng biệt, cô lập. Muốn sử dụng gem gist, ngay cả khi đang làm việc trên ứng dụng yêu cầu một phiên bản Ruby khác? Không có vấn đề gì. Chỉ cần rv tool install gist, và sau đó bạn sẽ có một lệnh gist có thể chạy ở bất kỳ đâu, dù bạn có đang trong ứng dụng Ruby khác hay không.
Hỗ trợ kịch bản mạnh mẽ
Một tính năng “nâng cấp” khác là hỗ trợ kịch bản, trong đó một tệp kịch bản đơn chứa thông tin từ .ruby-version, Gemfile và Gemfile.lock, cùng với mã nguồn. Bạn chỉ cần rv run script.rb, và bạn sẽ nhận được phiên bản Ruby cần thiết, các gem với đúng phiên bản, và kịch bản sẽ được chạy.
Tầm nhìn tương lai
Sự thay đổi lớn nhất so với những gì tồn tại ngày nay là kết hợp tất cả các công cụ này lại với nhau ở một nơi duy nhất. Bằng cách quản lý cả phiên bản Ruby và gem cùng một lúc, rv là một công cụ có thể chạy bất cứ thứ gì bạn muốn. Cho dù đó là công cụ CLI, ứng dụng web, hay một kịch bản ngẫu nhiên, rv luôn đảm bảo toàn bộ môi trường của bạn là chính xác như một phần của việc chạy lệnh.
Mục tiêu cuối cùng là tạo ra một loại công cụ quản lý hoàn toàn mới, nơi bạn không cần phải cài đặt rvm, sau đó cài đặt ruby, sau đó cập nhật rubygems, sau đó cập nhật bundler, sau đó bundle install các gem của bạn, và sau đó chạy lệnh thực tế – bạn chỉ cần chạy lệnh của mình, và mọi thứ đều được xử lý.
Không phải là trình quản lý phiên bản, hoặc trình quản lý phụ thuộc, mà là cả hai và nhiều hơn thế nữa. Hiện tại, tôi đang gọi loại danh mục này là “ngôn ngữ quản lý”, nhưng nếu bạn có ý tưởng tên tốt hơn, hãy cho tôi biết!
Đội ngũ và tiến triển hiện tại
Sau vài tuần, đội ngũ hiện nay bao gồm Samuel Giddins từ đội RubyGems, và Sam Stephenson, người tạo ra rbenv ban đầu. Chúng tôi đã bước đầu tiên trong kế hoạch hoạt động: rv có thể tự động chuyển đổi giữa các phiên bản Ruby đã cài đặt trong zsh, nhưng quan trọng nhất là nó có thể cài đặt Ruby 3.4.x đã biên dịch sẵn trên macOS và Ubuntu chỉ trong một giây.
Nếu bạn muốn thử những gì chúng tôi có cho đến nay, hãy xem kho lưu trữ rv. Bạn cũng có thể đọc thêm về các kế hoạch tương lai của chúng tôi.
Trong khi đó, nếu công ty của bạn có thể sử dụng các nhà phát triển nhanh hơn, năng suất hơn, hãy để chúng tôi trò chuyện. Chúng tôi chắc chắn có thể làm điều đó xảy ra.