3 điểm bởi GN⁺ 2025-10-27 | 1 bình luận | Chia sẻ qua WhatsApp
  • 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

 
GN⁺ 2025-10-27
Ý 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

    • Gần đây đang dùng LLM để trực quan hóa nhanh các quyết định kiến trúc
      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
    • Tôi nghĩ D2 thực sự là một công cụ tuyệt vời. Đặc biệt nó hữu ích khi triển khai tự động hóa bố cục mạng AWS
      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
    • Tôi đã dùng D2 từ vài tháng trước và ngạc nhiên vì nó rất dễ học
      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
    • Tôi tò mò mục đích của hoạt ảnh là gì. Nếu mỗi lần bấm khi thuyết trình thì các phần tử được thêm vào và các kết nối được nhấn mạnh mượt mà thì sẽ rất hay
      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
    • Với câu “Level 4 - dramatic mode ;)”, có người chia sẻ ví dụ SVG đầy kịch tính
  • Đ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

    • Tùy chỉnh bố cục của D2 chỉ khả dụng trên engine độc quyề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

    • Ngay cả trong Python cũng có thể dùng một chút mẹo để bắt chước cú pháp như 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
    • Trong Scala, có thể dùng toán tử tự định nghĩa để tạo DSL như "x" --> "y" | "hello world"
      Dù vậy cũng không nên lạm dụng
    • Trong Ruby cũng có thể triển khai một internal DSL đơn giản dưới 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

    • Có thể tạo hiệu ứng tương tự bằng một mẹo script đơn giản dùng tính năng watch của d2 để thay file theo từng bước
  • Chế độ Sketchtí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

    • Cá nhân họ cảm thấy chất lượng đầu ra của TALA là tệ nhất. Hầu hết họ dùng engine ELK
  • 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

    • Tôi cũng thích D2 hơn, nhưng mermaid là lựa chọn thực dụng vì được hỗ trợ mặc định trên nhiều nền tảng
    • Tôi mới biết đến D2, không rõ nó tốt hơn mermaid ở điểm nào
  • 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

    • Có người hỏi cách triển khai ra sao. Họ có tự xây MCP server cho D2 không
    • Có người chào: “Ben, cảm ơn vì đã làm cho LinkedIn/X trở nên chịu đựng được”
  • 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

    • Nếu những công cụ này có thể dùng để khám phá trực quan các codebase quy mô lớn thì sẽ là một lợi thế rất lớn
    • Điểm mạnh của D2 là nó là một compiler chạy độc lập và có hỗ trợ render ASCII
      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
    • Có người đặt câu hỏi: “Chương trình killer đó cần phải có những tính năng gì?”