Một công cụ dòng lệnh mới có tên là Shef đã làm dấy lên cuộc tranh luận giữa các nhà phát triển về những ưu điểm của phương pháp dựa trên YAML trong lập trình shell. Công cụ này, tự mô tả là một CLI mạnh mẽ để nấu các công thức shell, kết hợp các yếu tố của Make, GitHub Actions và CyberChef để tạo ra một giao diện dựa trên YAML cho các lệnh shell.
Sự mệt mỏi với YAML trong cộng đồng nhà phát triển
Phản ứng của cộng đồng đối với Shef đã làm nổi bật tâm lý mệt mỏi ngày càng tăng với các ngôn ngữ đặc tả miền (DSL) dựa trên YAML trong giới lập trình viên có kinh nghiệm. Nhiều người bình luận bày tỏ sự hoài nghi về giá trị của việc bọc các lệnh shell trong một ngôn ngữ đặc tả miền dựa trên YAML khác. Việc so sánh với những nỗ lực tương tự trước đây diễn ra ngay lập tức, với một nhà phát triển chỉ ra những điểm tương đồng với Maven 1 và Apache Jelly, mô tả cách lập trình dựa trên XML như vậy cuối cùng đã bị bỏ rơi.
Tôi không thấy trường hợp sử dụng cho việc viết các công thức bằng YAML thay vì sử dụng hàm shell (hoặc Python, vốn đa nền tảng)... nó sẽ nhanh chóng trở thành một ngôn ngữ lập trình giả mà không có lợi ích của cú pháp tổ hợp tốt hơn.
Quan điểm này được lặp lại trong nhiều bình luận, với các nhà phát triển thường xuyên làm việc với Kubernetes và các công cụ dùng nhiều YAML khác bày tỏ sự phản đối đặc biệt đối với việc thêm một lớp YAML khác vào quy trình làm việc của họ.
Script Shell thuần túy so với các phương pháp có cấu trúc
Một chủ đề trung tâm trong cuộc thảo luận là liệu Shef có cung cấp đủ lợi thế so với lập trình shell truyền thống để biện minh cho sự tồn tại của nó hay không. Mặc dù người tạo ra công cụ này bảo vệ các lợi ích của nó như tính năng nhắc người dùng tương tác và các tính năng bổ sung khác vượt trội hơn so với lập trình bash cơ bản, nhiều nhà phát triển vẫn cho rằng chỉ cần một chút nỗ lực, lập trình shell thực sự không quá khó hiểu.
Một số người bình luận đề xuất rằng khi các script shell trở nên quá phức tạp, cách tiếp cận tốt hơn là chuyển sang một ngôn ngữ lập trình đầy đủ như Python thay vì đưa vào một lớp trừu tượng mới. Những người khác chỉ ra các công cụ hiện có như Taskfile cung cấp chức năng tương tự nhưng các nhà phát triển thường quay trở lại sử dụng các lệnh shell thuần túy.
Các tính năng chính của Shef
- Lời nhắc tương tác với người dùng
- Kết nối các lệnh lại với nhau
- Cấu trúc điều khiển và vòng lặp phức tạp
- Quy trình làm việc có thể tái sử dụng với logic điều kiện
- Định dạng công thức dựa trên YAML
Những lo ngại của cộng đồng
- YAML như một ngôn ngữ lập trình giả
- Độ phức tạp so với các tập lệnh shell thuần túy
- Yêu cầu cài đặt (ban đầu yêu cầu công cụ Go)
- Mô hình tương tự với các phương pháp đã bị bỏ rơi trước đây (ví dụ: Apache Jelly)
Rào cản cài đặt và các cân nhắc thực tế
Phiên bản đầu tiên của Shef đã phải đối mặt với những chỉ trích về quy trình cài đặt, yêu cầu người dùng phải cài đặt các công cụ Go để thử nghiệm phần mềm. Nhà phát triển đã ghi nhận hạn chế này và nhanh chóng cập nhật dự án để bao gồm các tệp nhị phân trong các bản phát hành, thể hiện sự phản hồi nhanh chóng đối với ý kiến từ cộng đồng.
Một số người dùng đánh giá cao một số khía cạnh nhất định của công cụ, chẳng hạn như cái tên thông minh (chơi chữ giữa chef và shell) và khả năng tái sử dụng các công thức trong các công thức khác. Một người bình luận đề xuất thêm bản ghi asciinema vào tệp README để minh họa chức năng của công cụ tốt hơn, một đề xuất mà nhà phát triển đã nhanh chóng thực hiện.
Các phương pháp thay thế
Cuộc thảo luận xung quanh Shef đã thúc đẩy một số nhà phát triển chia sẻ các phương pháp thay thế của riêng họ cho các vấn đề tương tự. Một số mô tả các công cụ dựa trên Python được lấy cảm hứng từ Ansible nhưng được thiết kế cho các hoạt động quy mô nhỏ hơn. Những người khác đề cập đến lợi ích của các phương pháp kiểu CDK với kiểu dữ liệu mạnh so với sự kết hợp giữa Go và YAML.
Những giải pháp thay thế này làm nổi bật sự đa dạng trong quan điểm về cách xử lý tốt nhất các hoạt động shell phức tạp, với nhiều nhà phát triển thích tận dụng các ngôn ngữ lập trình hiện có hơn là tạo ra các ngôn ngữ đặc tả miền mới.
Mặc dù Shef đại diện cho một phương pháp thú vị để làm cho các script shell dễ tiếp cận và tương tác hơn, phản ứng của cộng đồng nhà phát triển cho thấy rằng nhu cầu về các giải pháp lập trình dựa trên YAML có thể đang giảm dần, nhường chỗ cho các phương pháp lập trình truyền thống hơn. Tuy nhiên, người tạo ra công cụ vẫn nhiệt tình với dự án và phản hồi tích cực với các ý kiến đóng góp, cho thấy rằng Shef có thể tiếp tục phát triển dựa trên ý kiến từ cộng đồng.
Tham khảo: Shef: Một công cụ CLI mạnh mẽ để nấu các công thức Shell