- Outil permettant de rédiger des diagrammes UML comme du code : quand on modifie la syntaxe textuelle à gauche, le diagramme rendu change en même temps
- Prend en charge de nombreux éléments de diagramme et notations de relations, notamment classes, composants, organigrammes, cas d’utilisation, bases de données et tables
- Le contenu édité est enregistré dans le localStorage du navigateur et peut rester disponible lors de la visite suivante, mais cette sauvegarde n’est pas garantie
- Le canevas peut être déplacé et agrandi/réduit par glisser-déposer et défilement dans le tiers droit de l’écran, et l’éditeur prend en charge une partie des raccourcis clavier de Sublime Text
- Les directives
#et les directives de style.permettent d’ajuster les polices, l’orientation, l’espacement, les couleurs, l’apparence des lignes et les styles de classificateurs personnalisés
Des diagrammes construits avec une syntaxe textuelle
- Nomnoml est un outil qui permet de créer et de rendre des diagrammes avec une syntaxe textuelle
-
Notation des relations
- Il est possible d’utiliser association, dependency, generalization, implementation, composition, aggregation, ball and socket, note, hidden, etc.
- Exemple :
[Car]->[Engine] - Exemple :
[Car] +-> 0..* [RustPatch] - Exemple :
[Car]o->[Manufacturer] - Exemple :
[Car]<:-[Pickup]
-
Classificateurs pris en charge
- Les diagrammes de classes prennent en charge, en plus de la classe par défaut,
abstract,instance,reference,packageetframe - Dans les diagrammes de composants, les notations
socketetlollipoppeuvent être utilisées - Les éléments d’organigramme incluent
start,end,state,choice,sync,input,sender,receiverettransceiver - Les diagrammes de cas d’utilisation prennent en charge
actoretusecase - D’autres éléments peuvent être utilisés, comme
note,label,hidden,database,pipeettable- Un exemple de table se présente sous la forme
[<table>Fruits| Apples | 17 || Oranges | 4711]
- Un exemple de table se présente sous la forme
- Les diagrammes de classes prennent en charge, en plus de la classe par défaut,
Édition, directives et styles
//en début de ligne est traité comme un commentaire//au milieu d’une ligne, comme dans[not //commented], n’est pas un commentaire
- L’attribut
idpermet de créer deux nœuds distincts avec le même nom affiché- Exemple :
[<actor id=a>User],[<actor id=b>User],[a] -- [b]
- Exemple :
-
Ajuster la mise en page et le rendu avec les directives
##import: filename#direction: down | right#edges: hard | rounded#background: transparent#font,#fontSize,#spacing,#padding,#stroke,#fill,#zoom#ranker: network-simplex | tight-tree | longest-path
-
Définir des styles de classificateurs avec les directives
.- Exemple :
#.box: fill=#8f8 dashed - Exemple :
#.blob: visual=ellipse title=bold - Des paires clé/valeur comme
fill,stroke,align,directionetvisualpeuvent être utilisées - Il est possible de définir le style du titre et du corps du texte, par exemple
title=left,italic,boldetbody=center,italic,bold - Les exemples d’utilisation incluent le changement de police, une mise en page compacte, la création de tables, les styles personnalisés et la séparation en plusieurs fichiers
- La séparation en plusieurs fichiers utilise une forme comme
#import: blobby_styles - Les modifications dans l’écran d’édition sont enregistrées dans le localStorage du navigateur, et le canevas peut être déplacé et agrandi/réduit par glisser-déposer et défilement dans le tiers droit de l’écran
- L’éditeur prend en charge une partie des raccourcis clavier de Sublime Text, et Nomnoml est hébergé sur GitHub
- Exemple :
1 commentaires
Avis sur Hacker News
Lien GitHub : https://github.com/skanaar/nomnoml
Au début, c’était assez déroutant, et je n’ai compris qu’après avoir trouvé le bouton about.
Peut-être que j’ai eu la chance de vivre sans savoir reconnaître l’UML au premier coup d’œil. Au début, je pensais que ça expliquait une sorte de syntaxe bidon en parler de pirate.
Je préfère largement cette approche, qui accepte que personne ne mémorise 10 types de flèches pour lire occasionnellement un diagramme UML : https://buck2.build/docs/concepts/concept_map/
Cela dit, c’est le cas de pas mal d’outils qui utilisent le terme « UML », et dans la pratique on a souvent besoin de quelque chose de moins précis et moins verbeux que l’UML théorique.
Il y avait autrefois un site open source qui comparait les outils de conversion « texte vers diagramme » : https://text-to-diagram.com/
nomnoml n’y figure pas.
[1] : https://d2lang.com/
J’aime bien Nomnoml. Dernièrement, je l’utilise dans un projet de gestion personnelle des connaissances (PKM) basé sur le navigateur sur lequel je travaille, pour visualiser une structure hiérarchique de tags.
Les mises en page ressortent plutôt proprement. Exemple : https://imgbox.com/9A1mDyNv
Le côté mobile semble avoir besoin d’un coup de propre. Je l’ai ouvert sur mon téléphone et le diagramme était dessiné par-dessus l’éditeur, ce qui rendait l’éditeur inutilisable.
La bibliothèque JavaScript sous-jacente peut rendre directement vers un canvas HTML ou en SVG depuis un programme Node.js, et on peut aussi l’exécuter en ligne de commande si on le souhaite.
Il y a quelque temps, j’ai construit quelques outils avec nomnoml, notamment des graphes de flot de contrôle et des graphes de dépendances pour du code assembleur GPU.
J’ai vraiment adoré, mais j’ai regretté de ne pas avoir de moyen fiable de forcer certains éléments à être placés près les uns des autres. Sur de très grands diagrammes, il fait parfois de mauvais choix et ça devient brouillon.
Même si la documentation n’est pas complète, le code est assez facile à modifier : j’ai pu le bricoler pour afficher des tooltips au survol et faire en sorte qu’un clic sur certaines boîtes mène à d’autres diagrammes. Je suis reconnaissant qu’un si bon outil soit open source.
Obtenir une bonne mise en page dépend trop de l’ordre de définition. Pour de grands diagrammes, cela peut devenir difficile à résoudre pour l’utilisateur, mais sur de petits diagrammes ça paraît acceptable.
Par exemple, si l’on écrit le même exemple de pirates dans un autre ordre, on obtient une mise en page valide mais peu agréable.
J’ai essayé plusieurs de ces produits de diagrammes pilotés par le code, en rêvant d’un monde où la documentation technique, diagrammes inclus, ferait partie du code source du projet ; mais il était difficile d’obtenir une mise en page acceptable, non seulement pour une diffusion externe, mais même en interne.
Cette frustration mène généralement à deux mauvais résultats : soit les diagrammes deviennent illisibles, soit ils ne sont plus maintenus.
Honnêtement, l’idée de relire la documentation en code review au moment du check-in relève presque du mythe. Les diffs de ce type de documentation sont très difficiles à comprendre, et il est quasiment impossible de vérifier de façon pertinente que le document est correct sans le rendre et regarder le résultat.
C’est le genre de problème que j’aimerais vraiment voir résolu, et peut-être qu’un jour il le sera.
Si l’on compare le tableau Pirate d’origine avec celui du commentaire parent, le haut et le bas sont inversés. Même en définissant d’abord beard et parrot dans l’ordre d’affichage souhaité, le résultat reste inversé.
C’est joli, et ça a l’air bien mieux que les diagrammes de classes PlantUML.
[0] : https://plantuml.com/class-diagram
Ça me fait penser à graphviz.