← Retour à la liste←
★★★★½ 4.7 / 5
Catégorie 04 — SKILLS

Drupal Obsidian

config/sync/*.yml → vault Obsidian vivant — 14 entités, Dataview audit, graphes HTML

Installation
Via npx (recommandé)npx skill add ThomasRoger76/drupal-obsidian
Via gitgit clone https://github.com/ThomasRoger76/drupal-obsidian.git ~/.claude/skills/drupal-obsidian
Vérifier dans Claude Code/skills
VersionPython 3.12, Obsidian 1.x, Dataview
PrixGratuit
Plateformes
Drupal 10Drupal 11
Commandes8
Exemples3
SKL
À propos

Skill de connaissance pure qui transforme Claude en expert documentation architecturale Drupal via Obsidian — génère le script Python d'extraction, les templates de notes et les queries Dataview d'audit, permettant de transformer n'importe quelle config Drupal en documentation vivante en moins d'une heure. Contenu injecté : patterns d'extraction Python (14 types d'entités depuis config/sync/*.yml, ThreadPoolExecutor 8 workers pour 1000+ fichiers, gestion YAML malformés sans crash), frontmatter standardisé avec wikilinks bidirectionnels automatiques (CT↔Fields↔Views↔Workflows↔Templates), queries Dataview pour l'audit d'architecture (CT sans tests, Paragraphs sans template Twig, champs critiques backlinks > 3, timeline des modifications), intégration skill graphify pour les Knowledge Graphs HTML interactifs avec clustering communautaire, pipeline CI/CD GitLab (job extract-vault déclenché sur config/sync/**, vault auto-commité dans la branche MR, job vault-health-check avec commentaire MR automatique). Pas d'agents — skill de connaissance pure. Gain mesuré : documentation architecturale auto-générée et toujours à jour (vs documentation manuelle qui se périme en 2 sprints), audit d'architecture en temps réel via Dataview sans effort, Graph View révèle des dépendances architecturales invisibles dans le code.

Fonctionnalités clés
Extraction Python — 14 types d'entités détectés automatiquementScript Python qui parse config/sync/*.yml et détecte le type depuis le nom de fichier. ThreadPoolExecutor 8 workers pour 1000+ fichiers en quelques secondes, gestion des YAML malformés sans crash.
Frontmatter standardisé + wikilinks bidirectionnelsChaque note générée inclut type, machine_name, label, fields/views/templates en wikilinks [[...]]. Le Graph View Obsidian affiche automatiquement les dépendances architecturales sans configuration.
Dataview — audit d'architecture en temps réelDASHBOARD.md avec queries Dataview : CT sans tests (tests_coverage: false), Paragraphs sans template Twig (via backlinks), champs critiques backlinks > 3, timeline des modifications.
Graph View — clusters et hubs de dépendancesLes wikilinks génèrent un graphe dans Obsidian sans configuration. Clusters visibles (modules isolés, entités partagées), identification des champs critiques (nombreux backlinks = ne pas supprimer).
graphify integration — Knowledge Graph HTML exportableVia le skill graphify, le vault se transforme en Knowledge Graph HTML avec force-directed layout, clustering communautaire, filtres par type. Déployable comme page web pour les présentations d'architecture.
CI/CD GitLab — vault jamais obsolète, auto-commitéJob déclenché sur les changements de config/sync/**. Extraction + git commit + push automatiques dans la branche MR. Job vault-health-check avec commentaire automatique sur les incohérences.
Commandes
CommandeDescription
python drupal-to-obsidian.py --config=config/sync/ --output=vault/Extraction complète config/sync/*.yml vers notes Obsidian (14 types d'entités)
python drupal-to-obsidian.py --type=content_type --output=vault/content-types/Extraire uniquement les Content Types (node.type.*)
python drupal-to-obsidian.py --parallel --workers=8Extraction parallèle ThreadPoolExecutor pour les projets 1000+ YAML
python drupal-to-obsidian.py --diff --since=2024-01-01Mettre à jour uniquement les entités modifiées depuis une date donnée
grep -r "type: content_type" vault/ | wc -lCompter les Content Types documentés dans le vault Obsidian
python scripts/vault-health-check.pyDétecter les liens cassés et le frontmatter incomplet dans le vault
python scripts/export-to-gitlab-wiki.py vault/ wiki/Exporter le vault Obsidian vers un GitLab Wiki en Markdown standard
find vault/ -name "*.md" -newer vault/last-update.txtLister les notes modifiées depuis la dernière extraction
Exemples
Script Python — extraction complète config/sync vers ObsidianCODE
#!/usr/bin/env python3
import yaml, pathlib, argparse
from concurrent.futures import ThreadPoolExecutor

ENTITY_PATTERNS = {
  'node.type.': ('content_type', 'content-types/'),
  'paragraphs.paragraphs_type.': ('paragraph', 'paragraphs/'),
  'field.storage.': ('field_storage', 'fields/'),
  'views.view.': ('view', 'views/'),
  'workflows.workflow.': ('workflow', 'workflows/'),
  'user.role.': ('role', 'roles/'),
}

def extract_entity(yaml_file: pathlib.Path, output: pathlib.Path) -> None:
  try:
    data = yaml.safe_load(yaml_file.read_text())
  except yaml.YAMLError:
    return  # Ignorer les YAML malformés sans crasher
  for prefix, (entity_type, subdir) in ENTITY_PATTERNS.items():
    if yaml_file.name.startswith(prefix):
      name = yaml_file.stem.replace(prefix.rstrip('.'), '').lstrip('.')
      note_dir = output / subdir
      note_dir.mkdir(parents=True, exist_ok=True)
      note = f"---\ntype: {entity_type}\nmachine_name: {name}\nlabel: {data.get('label','')}\ntests_coverage: false\n---\n\n# {data.get('label', name)}\n"
      (note_dir / f"{name}.md").write_text(note)
      break

if __name__ == '__main__':
  p = argparse.ArgumentParser()
  p.add_argument('--config', default='config/sync/')
  p.add_argument('--output', default='vault/')
  p.add_argument('--workers', type=int, default=8)
  args = p.parse_args()
  files = list(pathlib.Path(args.config).glob('*.yml'))
  out   = pathlib.Path(args.output)
  with ThreadPoolExecutor(max_workers=args.workers) as ex:
    ex.map(lambda f: extract_entity(f, out), files)
  print(f"{len(files)} fichiers YAML traités → {args.output}")
Dashboard Dataview — audit d'architecture DrupalCODE
# vault/_index/DASHBOARD.md

## Santé du vault
```dataview
TABLE length(rows) AS "Total"
FROM ""
GROUP BY type
SORT type ASC
```

## Content Types sans tests
```dataview
TABLE tests_coverage AS "Tests couverts"
FROM "content-types"
WHERE type = "content_type" AND tests_coverage = false
SORT file.name ASC
```

## Champs critiques (utilisés dans + de 3 Content Types)
```dataviewjs
const fields = dv.pages('"fields"').where(f => f.type === 'field_storage');
fields.filter(f => (f.file.inlinks ?? []).length > 3)
      .forEach(f => dv.paragraph(`[[${f.file.name}]] — ${f.file.inlinks.length} CT`));
```

## Paragraphs sans template Twig
```dataviewjs
const paragraphs = dv.pages('"paragraphs"');
const templates  = dv.pages('"templates"');
paragraphs.filter(p => !templates.some(t => t.file.inlinks?.includes(p.file.link)))
          .forEach(p => dv.paragraph(`⚠️ [[${p.file.name}]] — aucun template`));
```
Pipeline GitLab CI — vault auto-mis à jour à chaque MRCODE
# .gitlab-ci.yml
extract-vault:
  stage: docs
  image: python:3.12-slim
  rules:
    - changes: [config/sync/**]
  script:
    - pip install pyyaml -q
    - python scripts/drupal-to-obsidian.py --config=config/sync/ --output=docs/vault/ --workers=8
    - git config user.email "ci@example.com"
    - git config user.name "CI Bot"
    - git add docs/vault/
    - git diff --staged --quiet || git commit -m "docs: vault Obsidian mis à jour [skip ci]"
    - git push origin HEAD:$CI_COMMIT_REF_NAME

vault-health-check:
  stage: docs
  image: python:3.12-slim
  script:
    - python scripts/vault-health-check.py --vault=docs/vault/ --output=report.json
    - python scripts/post-mr-comment.py --report=report.json
  artifacts: { paths: [report.json] }
Points forts & faibles
Points forts
+Documentation vivante auto-générée depuis la config — toujours à jour
+Graph View révèle les dépendances cachées et entités critiques
+Dataview queries = audit architectural sans effort manuel
+CI/CD intégré — vault mis à jour sans action humaine à chaque MR
Points faibles
−Nécessite Obsidian installé localement (application desktop)
−Le vault peut devenir volumineux sur les gros projets (500+ notes)
Verdict

Skill unique qui transforme la config Drupal en documentation vivante et explorable. Le Graph View révèle des dépendances architecturales invisibles dans le code, les queries Dataview automatisent les audits.

→ Architectes Drupal, tech leads, équipes qui veulent documenter leur architecture sans effort manuel