本日のブログ担当は石川です。 4月とはいえまだまだ朝と夜は肌寒いですね。気温の高低差が激しいため服装を決めるのも難しく、最近は毎日「OK Google, 今日の気温は?」と聞いています。
さて、今回はテキストでダイアグラムやチャートを書くことができるスクリプト言語、D2について書きます。私は普段自分用の情報整理や更新が必要なシンプルな図にはMermaidをつかっていて、人に見せることを考えたときや情報量が多いときはdraw.ioを使うことが多いです。D2というツールが良いよという話を聞いたので試してみます!
D2とは、テキストを図に変換する言語の一つで、オープンソースソフトウェアです。ライセンスはMPL-2.0。公開されたのは2022年と新しめで、現在も開発がアクティブに続いています。主にCLIをダウンロードして利用したり、Playgraund として用意されているWebアプリケーションで利用することができます。
https://d2lang.com/
https://d2lang.com/tour/design/ というページには設計思想のようなものが書かれていて、次の3点が紹介されています。
なんだか設計思想を見るだけでも好きになっちゃうような雰囲気がありますね。
シーケンス図やUMLクラス図、SQLテーブルをはじめとして様々な形式の図を描画することができます。
https://d2lang.com/tour/icons/ から引用
vpc: VPC 1 10.1.0.0./16 { icon: https://icons.terrastruct.com/aws%2F_Group%20Icons%2FVirtual-private-cloud-VPC_light-bg.svg style: { stroke: green font-color: green fill: white } az: Availability Zone A { style: { stroke: blue font-color: blue stroke-dash: 3 fill: white } firewall: Firewall Subnet A { icon: https://icons.terrastruct.com/aws%2FNetworking%20&%20Content%20Delivery%2FAmazon-Route-53_Hosted-Zone_light-bg.svg style: { stroke: purple font-color: purple fill: "#e1d5e7" } ec2: EC2 Instance { icon: https://icons.terrastruct.com/aws%2FCompute%2F_Instance%2FAmazon-EC2_C4-Instance_light-bg.svg } } } }
わたしは図にするときに情報を最低限に絞り込むのが苦手で、説明をたくさん含んだ大きな図を作ってしまいがちです。ツールチップを活用することでホバー時にのみ詳細を表示するシンプルな図を作れそうです。
しかもツールチップを表示できないPNG形式で出力したら補足として図の下部に書かれる形で変換されるのが最高です。
SVG版 | PNG版 |
---|---|
クリックすれば外部リンクに移動するリンクを埋め込むこともできます。
https://d2lang.com/tour/interactive/#links
redmine_jp: Redmine.JP { link: https://redmine.jp/ } redmine_jp_blog: Redmine.JP Blog { link: https://blog.redmine.jp/ }
SVG版 | PNG版 |
---|---|
#
でコメントを書ける#
でコメントを書けるのもRubyやPython、シェルスクリプトなどで使い慣れているので嬉しいです。
図の中の要素のスタイルを変更することができ、複数の要素に適用するときにはCSSのようにクラスを利用して再利用することもできます。
https://d2lang.com/tour/classes/
classes: { Foo style: { width: 100 height: 200 style: { stroke-width: 0 fill: "#44C7B1" shadow: true border-radius: 5 } } Bar style: { style: { fill: "#FE7070" stroke: "#F69E03" } } } Foo1: Foo1 Bar1: Bar1 Foo2: Foo2 Baz: Baz Foo1 -> Bar1 # クラスを使用 Foo1.class: Foo style Foo2.class: Foo style Bar1.class: Bar style
機能的な面での比較は、D2をPlantUMLやMermaidと比較するサイトがあり、そこにまとまっています。
https://text-to-diagram.com/
わたしがD2で図を書いた感想としては、トータルの行数で言えばD2の方が長いことが多いのですがその分私が普段使っているプログラミング言語のインデントや要素の書き方に近いこともあってD2の方が書きやすく感じました。
Mermaidの強みと言えば、JavaScriptでできていてブラウザ上で動かしやすいことですよね。HTML内に <pre class="mermaid">~</pre>
要素を置けばpreタグ内の構文をmermaid.jsによってブラウザ上で図に変換できます。実際にGitHubでもMarkdown内に書いたmermaid記法が図に変換されるなど、様々なアプリケーションで導入されやすくなっている気がします。
このブログを書いた時点では、D2をブラウザ上で利用するにはWebAssemblyを使うとされていますが https://github.com/terrastruct/d2-playground#whats-this-api を見る限りレイアウトエンジンをWASMで動かす手順は準備中に見えます。https://github.com/terrastruct/d2/pull/436 も3日前にコミットされていたりとアクティブに活動されている様子が見て取れるので、今後状況は変わると思います。また、CLIは用意されているので、APIをアプリケーション側で実行することによる変換は可能だと思います。(Playground等も恐らくその形)
図を生成する前の構文がコンパクトすぎず読みやすい/書きやすいのが良いなと思いました。GitHubなどWebアプリケーションで標準で使える強みからMermaidを使わなくなるわけではありませんが、デザインも好みなので今後簡単な図を書くところから使ってみようと思います。
【スタッフ募集中】
弊社ではAWSを活用したソリューションの企画・設計・構築・運用や、Ruby on Rails・JavaScriptフレームワークなどを使用したアプリケーション開発を行うスタッフを募集しています。採用情報の詳細
弊社での勤務に関心をお持ちの方は、知り合いの弊社社員・関係者を通じてご連絡ください。
![]() |
Redmineのユーザーや権限など自分たちが必要な情報を扱いやすい形式にまとめたい場合、REST APIを利用するのがお勧めです。 |
![]() |
iPhoneのバッテリーを交換。バッテリーを長持ちさせるために心掛けていることなど。 |
![]() |
Amazon AuroraのインスタンスタイプをGraviton2に変更。コスト削減を中心に非常に良い効果がありました。 |
![]() |
AWS CDKを使用するとコーディング量が格段に減ります。 |
![]() |
AppStream Elastic Fleetsを使ってみました。運用管理が楽で、用途によってはコスト面でもメリットあります。 |
![]() |
社員研修に伴うサポート体制変更・休業のお知らせ(5/20〜23) 社員研修に伴い、5月20日〜23日はサポート体制の変更および休業とさせていただきます。 |
![]() |
オープンソースカンファレンス2025 Nagoyaに弊社代表の前田が登壇(ブース出展あり) オープンソースカンファレンス(OSC)2025 Nagoyaに弊社代表の前田が登壇。『Redmineの意外と知らない便利な機能(Redmine 6.0 対応版)』をテーマに発表します。 |
![]() |
エンタープライズプラン向け「優先サポート」を開始 My Redmineでは、エンタープライズプランをご契約のお客様向けにサポート対応を優先的に行う「優先サポート(プライオリティサポート)」を開始いたしました。 |
![]() |
プロジェクト管理ツール「RedMica」バージョン 3.1.0をリリース Redmine互換のオープンソースソフトウェア ファーエンドテクノロジー株式会社は、2024年11月19日(日本時間)、Redmine互換のプロジェクト管理ソフトウェア「RedMica 3.1.0」をリリースしました。 |
![]() |
Redmineの最新情報をメールでお知らせする「Redmine News」配信中 新バージョンやセキュリティ修正のリリース情報、そのほか最新情報を迅速にお届け |