Ce qui se passe
Quand on décrit un schéma en texte, c'est le moteur de placement qui décide de tout. Or les moteurs livrés avec D2 — Dagre et ELK — viennent du monde des graphes orientés sans cycle : ils font pousser le dessin dans une direction.
Un schéma d'architecture ressemble plutôt à un tableau blanc : des boîtes réparties dans un plan, des liens qui partent dans tous les sens. C'était la spécialité de TALA (Terrastruct's AutoLayout Algorithm), moteur orthogonal et jusqu'ici propriétaire.
Il passe en open source sous MPL-2.0, la même licence que D2, et arrive directement dans D2 v0.9.0 :
d2 --layout=tala architecture.d2 architecture.svgSans rien installer, play.d2lang.com l'exécute aussi — entièrement côté client.
TALA combine des idées tirées de plusieurs articles de recherche en dessin de graphes (cités dans le code source) et optimise plusieurs critères d'esthétique en même temps : symétrie, distance médiane, flux, regroupement des nœuds semblables.
La propriété qui le distingue
Les positions et les tailles des nœuds sont personnalisables : on peut verrouiller
des coordonnées avec top et left, et laisser le moteur placer le reste. Dans les
exemples publiés, quatre nœuds épinglés cohabitent avec dix ou onze nœuds placés
automatiquement.
L'auteur relève l'usage qui en découle : c'est bien adapté aux modèles de langage, qui savent raisonner en deux dimensions et placer des boîtes, mais restent mauvais pour router des liens. On laisse donc au modèle la disposition, et à TALA le tracé.
Ce qu'il faut savoir avant d'adopter
Le billet est franc sur les compromis, ce qui est assez rare pour être signalé.
- L'algorithme comporte de l'aléatoire. Il tire 3 graines par défaut et retient la mieux notée. À entrée et graines identiques, le rendu est reproductible — mais ajoutez un seul nœud et le schéma peut changer entièrement, là où Dagre et ELK se contentent de l'insérer. Sur un schéma versionné dont on relit les différences, c'est un vrai inconvénient.
- Il est moins bon sur les DAG. Pour un graphe qui coule dans une seule direction, l'auteur préfère lui-même Dagre ou ELK.
- Il coûte plus cher. Le temps de calcul croît de façon non linéaire avec la
taille du diagramme ; un dépôt de bancs d'essai public,
d2lang/d2-benchmarks, permet de comparer.
Les comparaisons publiées ne sont d'ailleurs pas triées sur le volet : l'auteur a pris des fichiers D2 publics trouvés sur GitHub, et admet que le résultat non-TALA sera parfois préférable.
À retenir
Une option de plus, gratuite, sur un outil déjà installé : la barrière à l'essai est d'un argument de ligne de commande. Elle vaut surtout pour les schémas d'infrastructure et les vues d'ensemble — pas pour les enchaînements linéaires, où les moteurs existants restent meilleurs.
Source : D2