開発者向けのダイアグラム作成プラットフォームを開発するTerrastructは、アーキテクチャ図の作成プロセスを改善する新しい自動レイアウトアルゴリズム「TALA(Terrastruct's AutoLayout Algorithm)」をオープンソースとして公開しました。

TALA is open-source | D2 Documentation

https://d2lang.com/blog/tala-is-open-source/

TALAはTerrastructが開発を進めるD2言語と同じくオープンソースソフトウェアライセンスであるMPL-2.0で提供されます。TALAは従来の有向非巡回グラフ(DAG)ベースのレイアウトエンジンとは一線を画し、ホワイトボードに描かれるようなより直感的で美しい図の生成が可能な直交レイアウトエンジンだとのことです。

TALAの特徴はグラフ描画に関する研究論文から得た多くのアイデアを独自の技術と組み合わせ、対称性・中央距離・フロー・類似ノードのクラスタリングといった様々な方針を「美しいかどうか」の観点に基づき検討することです。ノードの位置やサイズをカスタマイズ可能で座標を固定することもできるので、「2次元空間での描画をモデルに任せ、モデルが苦手とするルーティングについてはTALAが処理する」「特定のノードのみ座標を指定し、残りの配置をレイアウトエンジンに任せる」といった使い方も可能です。

ただしTALAは必ずしも万能というわけではなく、いくつかのトレードオフもあるとのこと。

・アルゴリズムにランダム要素が含まれるため、ノードを1つ追加するだけで図が大きく変化する可能性がある

・DAGレイアウトには不向きである

・大きな図を書く場合に処理に時間がかかることがある

TALAはD2 v0.9.0以降にバンドルされており、D2をインストールして「--layout=tala」オプションを指定すれば利用することができます。また、ブラウザ上で実行可能なD2 Playgroundで「Layout engine」をTALAにすることでも利用できます。いずれもレイアウトエンジンを以前からD2に標準搭載されているDagre・ELKに切り替えることが可能であり、生成された図を比較すると場合によってはTALA以外のレイアウトの方が適切なことがあるかもしれません。



TALA・Dagre・ELKという3つのレイアウトアルゴリズムでアーキテクチャ図をレイアウトしてみます。Fulcro RADのアーキテクチャ図をTALAでレイアウトすると以下の通り。縦と横の配置をうまく利用して図を作成していることがわかります。



こちらはDagreによるレイアウト。かなり縦長になっています。



こちらはELKによるレイアウトですが、さらに縦長になってしまいました。場合によっては縦長のレイアウトの方がデータの流れを追いやすいかもしれないので、用途に応じた使い分けが重要だといえます。



次にCHERI-Mocha Secure Enclave SoCのアーキテクチャ図を用いた比較を行ってみます。TALAによるレイアウトはやはり縦横のバランスがよく、加えて「Peripherals」の内部構造がきれいにまとまっている、Mochaの外部要素が適切に分散して配置されている、といった点もよく仕上がっています。



Dagreによるレイアウトはやたらと横長になっており、「Legend」を右側に置いたせいでさらに横長の度合いが増しています。横長になっている主要因は「Peripherals」の内部構造がすべて横並びに配置されている点にあります。「Mailbox」「SRAM」「Debug」「Tag control」といった要素も横並びとなっており、Mochaの外部要素が全て図の下部に固めて配置されている点もあまりよくありません。せめて「CVA6-CHERI」は右じゃなくて上に持ってきてほしかったところです。



ELKによるレイアウトはDagreほど酷くなく、Mochaの外部要素は全て下部に配置されているものの適切に分散されています。ただ、「Peripherals」の内部構造が横並びに配置されていて全体のバランスを崩している点が少々残念です。



TALAはアーキテクチャ図の作成プロセスに「自動レイアウト」という新たな選択肢と可能性をもたらす注目すべき技術といえ、オープンソース化によるコミュニティの活性化がさらなる改善に繋がることが期待されます。