Ứng dụng CLI để tăng hiệu suất trong công việc

Ứng dụng CLI để tăng hiệu suất trong công việc

Những mẩu tin ngắn hàng ngày dành cho bạn
  • Mình mới phát hiện ra một cách public localhost lên Internet rất đơn giản trong VSCode. Đầu tiên mở Panel lên bằng tổ hợp phím Command + J (Hoặc Ctrl + J), bấm vào tab PORTS, bấm vào nút "Forward a Port" rồi nhập vào port muốn public, nhấn Enter thế là xong. VSCode sẽ tạo cho bạn một URL ánh xạ vào port dưới local của bạn 🤓

    » Xem thêm
  • Đêm rồi vẫn không quên đưa kênh mới lên "tuốp tuốp". Trước mình có một kênh rồi, chuyên đăng mấy cái video về pha chế cà phê ý, xong một thời gian cũng chán với cũng bận, bí ý tưởng nên lâu lắm rồi không đăng cái nào mới nữa cả.

    Bây giờ khởi động lại, cơ mà ở một kênh khác. Ý tưởng là "port" các mẩu tin ở đây sang Tiktok, giờ đây mọi người có thể vừa lướt vừa được cập nhật tin từ mình luôn rồi á. Theo dõi kênh ngay thôi 🥳

    Tiktok @2coffee.dev

    » Xem thêm
  • Ghê thật chứ, grep.app là trang web cho phép bạn tìm kiếm bất kỳ điều gì trên các kho lưu trữ công khai của Github. Chỉ cần gõ vào một vài ký thôi ngay lập tức nó sẽ tìm ra đoạn đó nằm ở đâu. Không biết phải lưu bao nhiêu dữ liệu cho đủ ha 🤔!

    » Xem thêm

Vấn đề

Là một lập trình viên, tôi tin chắc rằng ai cũng đã nghĩ đến việc tận dụng những dòng code để "sai khiến" nó làm một việc gì đó tự động. Lấy ví dụ như là một đoạn mã JavaScript được một lập trình viên nào đó viết ra, để tính tổng số tiền mà bạn đã "nướng" vào một sàn thương mại điện tử nào đó, thay vì phải ngồi cộng từng đơn hàng trong danh sách kéo mãi không biết bao giờ mới hết.

Việc tự động hóa mang lại nhiều lợi ích, dễ thấy nhất đó là tiết kiệm thời gian và giảm sai sót cho một tiến trình lặp đi lặp lại. Mặt khác, nếu thấy đoạn mã mà mình viết ra có thể chia sẻ được cho người khác thì đúng là một công đôi việc.

Tôi cũng hay tạo ra những dòng mã như vậy, nhưng thay vì đếm giá trị đơn hàng thì chúng lại tập trung giải quyết một vấn đề hay gặp phải trong công việc hơn. Lấy ví dụ như là một đoạn mã giúp đồng bộ hóa dữ liệu giữ hai máy chủ production với development của trang blog này. Bởi vì đôi khi cần thử nghiệm tính năng mới trên dữ liệu thật cho an toàn trước khi đưa nó vào môi trường "sản xuất".

Tôi thường lưu trữ các mã này vào một nơi nào đó, ví dụ như trong ứng dụng ghi chú của hệ điều hành, để nó được đồng bộ đến tất cả nơi tôi làm việc, và sau này có gặp một vấn đề gì đó thì sẽ mở ra, "copy" lại và "paste" vào cho nó chạy. Thật sáng suốt!

Đấy chỉ là một ví dụ đơn giản cho cách tự động hóa công việc lặp đi lặp lại. Vài tuần trước, khi tôi đang tập trung tối ưu hóa hình ảnh cho blog thì vấn đề trở nên rắc rối hơn. Nếu cứ "copy" rồi "paste", chỉnh sửa lại nội dung cho nó chạy, thì lại tốn nhiều thời gian hơn. Tôi chợt phát hiện những đoạn mã như thế lại chỉ phù hợp với những công việc có tần suất sử dụng thấp, dụ như 1 ngày chỉ sử dụng 1 lần thôi, hmm.. kiểu như thế.

Nói đến đây thì có lẽ bạn đọc cũng đang hình dung ra cách giải quyết vấn đề cho mình. Tôi biết là có nhiều cách để làm, riêng tôi thì chọn cách tạo ra một ứng dụng CLI làm tất cả công việc trên.

CLI là gì?

Giao diện dòng lệnh (CLI) là một cơ chế phần mềm bạn sử dụng để tương tác với hệ điều hành của mình thông qua bàn phím. Một cơ chế trái ngược với CLI là giao diện người dùng đồ họa (GUI).

Điểm mạnh của GUI là điều hướng một cách trực quan, như bấm vào các biểu tượng và hình ảnh để sử dụng phần mềm, ứng dụng đó. Tuy nhiên, GUI không hiệu quả đối với các tác vụ quản trị hệ thống, đặc biệt là với môi trường ảo hoặc từ xa.

Với CLI, bạn có thể nhập các lệnh văn bản để định cấu hình, điều hướng hoặc chạy các chương trình trên bất kỳ máy chủ hoặc hệ thống máy tính nào. Tóm lại là CLI tập trung vào tính năng và tốc độ sử dụng.

CLI khá là rộng lớn khi nhắc đến, nhưng trong phạm vi bài viết này, thì tôi chỉ muốn nói đến khả năng ứng dụng CLI trong các ứng dụng phần mềm. Hiểu đơn giản CLI là các ứng dụng bằng dòng lệnh mà chúng ta gõ gõ hàng ngày trong Terminal, khi đó cd, ls, pwd... cũng có thể coi là các ứng dụng phần mềm để giúp chúng ta thực hiện một chức năng nào đó.

Khi nào cần tạo cho mình một CLI?

Quay trở lại với bài toán tối ưu hóa hình ảnh mà tôi có một bài viết Tối ưu hóa hiển thị hình ảnh bằng blur placeholder và lazyload. Có nhiều bước cần làm để tạo ra một hình ảnh sử dụng được trong bài viết của blog. Nhưng tựu chung lại thì có hai hành động chính:

Thứ nhất là định dạng lại hình ảnh về dạng webp, điều chỉnh chất lượng hình ảnh và cắt hình để cho ra kích thước mong muốn.

Thứ hai là tải tất cả hình ảnh vừa tạo ra lên R2, đồng thời lấy được tất cả liên kết đến chúng.

Nếu áp dụng phương pháp "copy paste" như ở đầu bài thì có phần rườm rà. Như vậy, để quản lý tập trung và tiết kiệm thời gian gõ phím, thì tạo ra một ứng dụng CLI trong trường hợp này là hết sức hợp lý.

Tưởng tượng, ứng dụng của tôi có tên là img, khi muốn tạo ra tất cả hình ảnh đã được tối ưu hóa, chỉ cần chạy:

$ img all path/to/file

Với path/to/file là đường dẫn đến ảnh gốc. Sau khi chạy xong, hình ảnh mới được tạo ra sẽ lưu vào path/to/new/file. Lúc này, tôi tạo thêm một lệnh upload nữa cho hành động tải ảnh lên R2:

$ img upload path/to/new/file

Hoàn hảo, mọi thứ hoạt động. Nhưng chưa hết, một điểm cộng của CLI đó là nó hỗ trợ tham số (args) và các cờ (flag), dựa vào flag, chúng ta còn có thể tạo ra nhiều trường hợp (options) xử lý phong phú hơn nữa.

Ví dụ, tôi muốn ngay sau khi tất cả hình ảnh được tạo ra thì tải lên R2 luôn thay vì tốn thêm một lệnh upload nữa thì viết thêm mã xử lý cho cờ --upload hoặc viết tắt là -u:

$ img all path/to/file --upload
# hoặc
$ img all path/to/file -u

Dĩ nhiên trên đây chỉ là giả thuyết, ứng dụng CLI có thể làm được nhiều hơn tùy vào cách của mỗi người. Vì thế bạn có thể thoải mái biến tấu các lệnh và các cờ theo sở thích của mình, nhưng với một lưu ý là nó phải rõ ràng và dễ nhớ, dễ sử dụng.

Cách tạo một CLI đơn giản

Ứng dụng CLI không giới hạn ở bất kỳ ngôn ngữ nào, nếu bạn đang làm Golang, hãy tìm kiếm thư viện hỗ trợ tạo CLI cho Go. Tương tự, tôi làm Node.js thì oclif giúp tôi làm điều này. Ngoài oclif ra thì còn nhiều thư viện giúp bạn tạo ra được ứng dụng CLI, hãy dành thời gian tham khảo chúng, nếu thấy cú pháp thân thiện, dễ sử dụng thì hãy chọn. Tham khảo thêm nhiều thư viện khác tại Command-line utilities | awesome-nodejs Public | Github.

oclif tương đối đơn giản để bắt đầu. Chỉ cần làm theo hướng dẫn Introduction | oclif docs là ngay lập tức chúng ta đã có một "lệnh" của riêng mình.

$ npx oclif generate mynewcli
? npm package name (mynewcli): mynewcli
$ cd mynewcli
$ ./bin/dev.js hello world
hello world! (./src/commands/hello/world.ts)

oclif hỗ trợ tạo tự động một lệnh mới (CLI Generator), Flag/Argument parsing, Testing, Autocomplete và nhiều tính năng khác. Bạn đọc tham khảo thêm tại Features | oclif docs.

Tổng kết

CLI là một cơ chế phần mềm bạn sử dụng để tương tác với hệ điều hành, phạm vi của CLI tương đối rộng nhưng trong phạm vi bài viết này, chúng ta tìm hiểu việc ứng dụng CLI để tạo ra một phần mềm cho riêng mình.

Nếu như trước đây, cách tôi thường làm là lưu lại các đoạn mã thường dùng để khi cần chỉ việc "copy paste" để chạy chúng thì việc tạo ra CLI sẽ đơn giản hóa quá trình này, đồng thời giúp tiết kiệm thời gian sử dụng.

oclif là một thư viện giúp tạo CLI đơn giản bằng Node.js. Ngoài ra nếu bạn đang sử dụng một ngôn ngữ nào khác thì hãy tìm kiếm một thư viện phù hợp cho mình nhé!

Cao cấp
Hello

Bí mật ngăn xếp của Blog

Là một lập trình viên, bạn có tò mò về bí mật công nghệ hay những khoản nợ kỹ thuật về trang blog này? Tất cả bí mật sẽ được bật mí ngay bài viết dưới đây. Còn chờ đợi gì nữa, hãy bấm vào ngay!

Là một lập trình viên, bạn có tò mò về bí mật công nghệ hay những khoản nợ kỹ thuật về trang blog này? Tất cả bí mật sẽ được bật mí ngay bài viết dưới đây. Còn chờ đợi gì nữa, hãy bấm vào ngay!

Xem tất cả

Đăng ký nhận thông báo bài viết mới

hoặc
* Bản tin tổng hợp được gửi mỗi 1-2 tuần, huỷ bất cứ lúc nào.
Author

Xin chào, tôi tên là Hoài - một anh Dev kể chuyện bằng cách viết ✍️ và làm sản phẩm 🚀. Với nhiều năm kinh nghiệm lập trình, tôi đã đóng góp một phần công sức cho nhiều sản phẩm mang lại giá trị cho người dùng tại nơi đang làm việc, cũng như cho chính bản thân. Sở thích của tôi là đọc, viết, nghiên cứu... Tôi tạo ra trang Blog này với sứ mệnh mang đến những bài viết chất lượng cho độc giả của 2coffee.dev.Hãy theo dõi tôi qua các kênh LinkedIn, Facebook, Instagram, Telegram.

Bạn thấy bài viết này có ích?
Không

Bình luận (1)

Nội dung bình luận...
Avatar
Ẩn danh10 tháng trước
đúng là một bài viết hay tôi muốn đọc thêm nhiều bài viết như thế này ưnax
Trả lời
Avatar
Xuân Hoài Tống10 tháng trước
Bạn có thể cho phép blog "gửi thông báo" khi có bài viết mới để không bị bỏ lỡ nhiều bài hấp dẫn trong tương lai 🙌