3 ポイント 投稿者 GN⁺ 2025-10-27 | 1件のコメント | WhatsAppで共有
  • D2 は、テキストベースでダイアグラムを作成できる スクリプト言語 であり、コードによって視覚資料を自動生成する方法を提供
  • ユーザーはシンプルな文法でノードと関係を定義すると、自動レイアウトエンジン がそれを視覚的に配置
  • 文書内の各コードスニペットは Playground で直接実行・修正 できるため、すぐに結果を確認可能
  • ただし、import を使用する一部の例 については、Playground ですぐに実行できない例外が存在
  • 開発者にとって、視覚的ドキュメント化の自動化とコラボレーション効率 を高めるツールとして意義がある

D2 概要

  • D2 は、ダイアグラムをコードで記述できる 宣言的スクリプト言語 であり、複雑な構造をテキストで定義し、自動的に可視化する機能を提供
    • ユーザーはノード、エッジ、グループなどをシンプルな文法で記述
    • 出力結果は自動で整列され、さまざまなスタイルを適用可能
  • この言語は バージョン管理とコラボレーション に有利であり、コードレビューやドキュメント自動化パイプラインに容易に統合可能

Playground 機能

  • D2 ドキュメント内の各コードスニペットには、Playground でそのまま開いて修正・実行 できるインタラクティブ機能を提供
    • ユーザーがスニペット上にマウスを置くと、Playground リンクが有効化される
    • これにより、ダイアグラムをリアルタイムで調整し、結果を視覚的に確認可能
  • ただし、import 文を使用するスニペット は外部リソースを必要とするため、Playground で即座に実行できないという制限がある

活用の意義

  • D2 は 視覚的ドキュメント化の自動化 を支援し、システム設計やデータフローをコードとともに管理できる利点を提供
  • 開発者とデザイナーが同じ言語でダイアグラムを定義することで、コラボレーション効率 が向上
  • オープンソースエコシステムにおいて、コードベースのダイアグラム作成の標準化 を促進するツールとして評価されている

1件のコメント

 
GN⁺ 2025-10-27
Hacker Newsのコメント
  • D2の共同制作者として、最近 アニメーション機能拡張 のアイデアを構想中とのこと。
    関連する議論を GitHub Discussion に投稿してあるので、意見を聞きたいそうです。

    • 最近は LLM を使ってアーキテクチャ上の意思決定を素早く可視化しているとのこと。
      主に mermaid を使っているが、D2 がより 柔軟なインターフェース を提供できるのか気になっているそうです。
      LLM と連携する ツール呼び出し機能 や MCP のようなユーザーフレンドリーなインターフェースを計画しているかも知りたいとのことです。
    • D2 は本当に素晴らしいツールだと思う、特に AWS ネットワークレイアウトの自動化 を実装するときに役立ったとのこと。
      多数のオブジェクトをレンダリングするときにもエンジンと格闘しなくて済むのがよかったそうです。
      ただし sdk/d2lib のドキュメントが不足していて、最初は試行錯誤が必要だったとのことです。
    • 数か月前から D2 を使っているが、学びやすさに驚いたとのこと。
      ただ 派手なアニメーション は必須だとは思わないそうです。強調が必要なときは、単に色を変えるほうが直感的だという意見です。
    • アニメーションの目的が気になるとのこと。プレゼン中にクリックするたび要素が追加され、接続が 滑らかに強調 されるならよさそうだそうです。
      ただ、テキスト変更によって図全体が揺れるのは、むしろ気が散る可能性があるとのこと。
      また スイムレーン図 を正式サポートしてほしいという声もあります。
    • 「Level 4 - dramatic mode ;)」として ドラマチックな SVG の例 を共有しています。
  • D2 や Penrose のようなツールを Python でラップして、データ駆動のダイアグラムスクリプティング を試しているとのこと。
    ただ、大半の宣言的ツールは「declare, then tweak」というワークフローをサポートしておらず不便だそうです。
    Penrose は修正しやすい一方で、結果が ランダムで予測不能 な面があるとのことです。

    • D2 の カスタムレイアウト調整 は独自エンジンでしか利用できないとのこと。
      オープンソースエンジンでは不可能だが、Freehand 機能 によって一部調整は可能だそうです。
  • D2 の文法を一般的なプログラミング言語でどこまで近く実装できるのか気になったとのこと。
    Python では演算子オーバーロードの制約により完全に同一の DSL は難しいが、文字列演算子オーバーロード で似た形を試せるそうです。

    • Python でも少しトリックを使えば a <- b | "edge" のような文法を真似できるとのこと。
      ただ実際に使ったら 幽霊になって取り憑く と冗談を言っています。
    • Scala では ユーザー定義演算子 が使えるため、"x" --> "y" | "hello world" のような DSL を作れるとのこと。
      ただし乱用は望ましくないそうです。
    • Ruby でも x >> y << "label" という形で簡単な 内部 DSL を実装できるとのこと。
      Diagram クラスでオブジェクトモデルを作り、レンダラーをつなぐこともできるそうです。
  • mgmt プロジェクト のメイン作者として、DAG を多く扱っているとのこと。
    ノードやエッジを追加・削除するとき、視覚的に安定してアニメーション遷移できる ダイアグラムが必要だそうです。
    Graphviz はスナップショットごとにレイアウトが揺れてしまい不便だとのことです。

    • d2 の watch 機能でファイルを段階的に差し替える 簡単なスクリプトハック によって、似た効果を出せるそうです。
  • D2 の Sketch モードインタラクティブ機能 は本当に有用とのこと。
    ツールチップとリンク によってダイアグラムの活用度が大きく高まるそうです。

  • D2 を長く使っており、社内でも積極的に勧めているとのこと。
    ただし エンタープライズライセンス料金 が高すぎて、個人用途でしか使っていないそうです。
    TALA ライセンスは年 3000 ドル、個人用でも 120 ドルで負担が大きいとのこと。
    Helm chart やシステム説明を LLM に投入して 自動ダイアグラム生成 する機能は革新的だと考えているそうです。

    • 個人的には TALA の出力品質がいちばんよくないと感じており、ほとんどの場合 ELK エンジン を使っているとのことです。
  • 最近 D2 の ASCII レンダリング対応 が話題になったとのこと。
    関連する議論は 以前の投稿 から続いています。

  • D2 はかなり前からあるが、今でも mermaid ほどは知られていない 印象だとのこと。
    機能面でははるかに優れているので、もっと多くの人に知られてほしいという声です。

    • 自分も D2 のほうが好きだが、mermaid は多くのプラットフォームで 標準サポート されているため実用的な選択だとのこと。
    • D2 を初めて知ったが、mermaid より優れている点は何か気になるという声もあります。
  • 自分たちの AI プラットフォーム zo.computerダイアグラム生成ツール として D2 を採用したとのこと。
    mermaid より表現力が高く、AI ベースの可視化 に向いているそうです。

    • 実装方法が気になる、D2 用の MCP サーバー を自前で構築したのかと尋ねています。
    • 「Ben、LinkedIn/X を耐えられるものにしてくれてありがとう」とあいさつしています。
  • D2 は素晴らしいが、PlantUML や mermaid と比べて 決定的な差別化要素 が足りないとの意見もあります。
    依然として「ダイアグラムコードのキラーアプリ」を待っているとのことです。

    • こうしたツールで 大規模コードベースを視覚的に探索 できれば大きな強みになるだろうとのこと。
    • D2 の利点はスタンドアロンのコンパイラであることと、ASCII レンダリング をサポートしている点だという意見です。
      npm のインストールが不要なのも気に入っているそうです。
      ただ、mermaid は Obsidian などとの統合性に優れています。
    • 「そのキラープログラムにはどんな機能が必要だろうか?」という問いかけもあります。