- D2 là một ngôn ngữ kịch bản cho phép viết sơ đồ dựa trên văn bản, cung cấp cách tự động tạo tài liệu trực quan bằng mã
- Người dùng chỉ cần định nghĩa các nút và mối quan hệ bằng cú pháp đơn giản, bộ máy bố cục tự động sẽ sắp xếp chúng một cách trực quan
- Mỗi đoạn mã trong tài liệu đều có thể chạy và chỉnh sửa trực tiếp trong Playground, giúp kiểm tra kết quả ngay lập tức
- Tuy nhiên, có ngoại lệ là một số ví dụ dùng
import không thể chạy ngay trong Playground
- Đây là một công cụ có ý nghĩa với nhà phát triển trong việc tự động hóa tài liệu trực quan và nâng cao hiệu quả cộng tác
Tổng quan về D2
- D2 là một ngôn ngữ kịch bản khai báo cho phép viết sơ đồ bằng mã, cung cấp khả năng định nghĩa các cấu trúc phức tạp bằng văn bản và tự động trực quan hóa chúng
- Người dùng có thể mô tả nút, cạnh, nhóm, v.v. bằng cú pháp đơn giản
- Kết quả sẽ được tự động căn chỉnh và có thể áp dụng nhiều kiểu dáng khác nhau
- Ngôn ngữ này có lợi cho quản lý phiên bản và cộng tác, đồng thời dễ dàng tích hợp vào quy trình review code hoặc pipeline tự động hóa tài liệu
Tính năng Playground
- Mỗi đoạn mã trong tài liệu D2 đều cung cấp tính năng tương tác, cho phép mở, chỉnh sửa và chạy ngay trong Playground
- Người dùng chỉ cần di chuột lên đoạn mã là liên kết Playground sẽ được kích hoạt
- Nhờ đó có thể điều chỉnh sơ đồ theo thời gian thực và kiểm tra kết quả một cách trực quan
- Tuy nhiên, các snippet dùng câu lệnh
import có giới hạn là không thể chạy ngay trong Playground vì cần tài nguyên bên ngoài
Ý nghĩa ứng dụng
- D2 hỗ trợ tự động hóa tài liệu trực quan, mang lại lợi thế khi quản lý thiết kế hệ thống hoặc luồng dữ liệu cùng với mã
- Việc nhà phát triển và nhà thiết kế định nghĩa sơ đồ bằng cùng một ngôn ngữ giúp nâng cao hiệu quả cộng tác
- D2 được đánh giá là công cụ thúc đẩy chuẩn hóa việc tạo sơ đồ dựa trên mã trong hệ sinh thái mã nguồn mở
1 bình luận
Ý kiến trên Hacker News
Với tư cách là đồng tác giả của D2, hiện đang ấp ủ ý tưởng mở rộng tính năng hoạt ảnh
Đã đăng thảo luận liên quan trên GitHub Discussion, rất muốn nghe ý kiến của mọi người
Chủ yếu dùng mermaid, nhưng tò mò liệu D2 có thể cung cấp một giao diện linh hoạt hơn hay không
Cũng muốn biết có kế hoạch cho chức năng tool calling tích hợp với LLM hoặc giao diện thân thiện với người dùng như MCP hay không
Ngay cả khi render nhiều đối tượng, cũng rất tốt vì không phải vật lộn với engine
Tuy vậy, tài liệu cho sdk/d2lib còn thiếu nên lúc đầu đã phải thử sai khá nhiều
Nhưng tôi không nghĩ hoạt ảnh cầu kỳ là thực sự cần thiết. Khi cần nhấn mạnh, chỉ đổi màu đơn giản có vẻ trực quan hơn
Nhưng nếu chỉ đổi văn bản mà toàn bộ sơ đồ rung lắc thì có thể lại gây mất tập trung
Ngoài ra, sẽ rất tốt nếu hỗ trợ chính thức sơ đồ Swimlane
Đang thử bọc các công cụ như D2 hoặc Penrose bằng Python để làm script sơ đồ dựa trên dữ liệu
Nhưng hầu hết các công cụ khai báo đều không hỗ trợ workflow kiểu “declare, then tweak” nên khá bất tiện
Penrose thì dễ chỉnh sửa, nhưng kết quả có phần ngẫu nhiên và khó dự đoán
Không thể làm điều đó với engine mã nguồn mở, nhưng có thể điều chỉnh phần nào bằng tính năng Freehand
Có người thắc mắc cú pháp của D2 có thể được tái hiện gần với ngôn ngữ lập trình thông thường đến mức nào
Trong Python, do ràng buộc của operator overloading nên khó có DSL hoàn toàn giống hệt, nhưng vẫn có thể thử cách tương tự bằng operator overloading cho chuỗi
a <- b | "edge"Nhưng nếu dùng thật thì người đó đùa rằng sẽ biến thành ma để ám bạn
"x" --> "y" | "hello world"Dù vậy cũng không nên lạm dụng
x >> y << "label"Có thể tạo mô hình đối tượng trong lớp Diagram rồi gắn renderer vào
Với tư cách là tác giả chính của dự án mgmt, có người làm việc rất nhiều với DAG
Khi thêm hoặc xóa node và edge, họ cần một sơ đồ ổn định về mặt thị giác và có thể chuyển cảnh bằng hoạt ảnh
Graphviz bất tiện vì bố cục bị xê dịch qua từng snapshot
Chế độ Sketch và tính năng interactive của D2 thực sự rất hữu ích
Nhờ có tooltip và liên kết, khả năng tận dụng sơ đồ tăng lên đáng kể
Có người đã dùng D2 từ lâu và cũng tích cực giới thiệu nó trong nội bộ
Nhưng chi phí giấy phép enterprise quá cao nên hiện chỉ dùng cho mục đích cá nhân
Giấy phép TALA là 3000 USD mỗi năm, còn bản cá nhân cũng là 120 USD nên khá áp lực
Họ cho rằng tính năng đưa Helm chart hoặc mô tả hệ thống vào LLM để tự động tạo sơ đồ là một đổi mới lớn
Gần đây, hỗ trợ render ASCII của D2 đã trở thành chủ đề được bàn tán
Thảo luận liên quan được nối tiếp trong bài đăng trước
D2 đã tồn tại khá lâu nhưng vẫn có cảm giác ít được biết đến hơn mermaid
Về mặt tính năng thì vượt trội hơn nhiều nên mong sẽ có nhiều người biết đến hơn
Trên nền tảng AI zo.computer của chúng tôi, D2 đã được chọn làm công cụ tạo sơ đồ
Nó có khả năng biểu đạt cao hơn mermaid nên phù hợp với trực quan hóa dựa trên AI
D2 rất xuất sắc, nhưng so với PlantUML hay mermaid thì vẫn thiếu một điểm khác biệt mang tính quyết định
Mọi người vẫn đang chờ một “killer app của diagram code”
Không cần cài npm cũng là điều đáng thích
Tuy vậy, mermaid lại tích hợp rất tốt với những thứ như Obsidian