>_ DevTrendsit

Lingua

Home

Linguaggi

Sezioni

Frontend Backend Mobile DevOps AI / ML GameDev Blockchain Embedded Sicurezza
TypeScript

Come smettere di perdere le decisioni architetturali nel codice con Log4brains

Log4brains logo

Ti è mai capitato di guardare un modulo vecchio di un anno e mezzo, vedere una strana decisione architetturale e non capire davvero perché sia stata presa? Vorresti riscriverlo. Ma poi scopri che questa particolarità era specificamente progettata per gestire un bug in un'API di terze parti o un particolare requisito di sicurezza. La persona che l'ha pensata è ormai passata a un altro team, Confluence è vuoto, e tutto ciò che rimane in git è un commit con il laconico fix: refactor storage.

Il concetto di Architecture Decision Records (ADR) risolve questo problema da tredici anni. Ma mantenere manualmente i file markdown e organizzarli è qualcosa che tutti sono troppo pigri per fare. Lo sviluppatore francese Thomas Vaillant ha creato Log4brains, uno strumento che trasforma la cattura delle decisioni architetturali in un comodo workflow docs-as-code.

Cos'è questo strumento

Log4brains prende i tuoi ADR, archiviati nel repository insieme al codice sorgente, li analizza e costruisce un sito statico veloce con ricerca comoda e una timeline.

Log4brains demo

L'utilità è scritta in TypeScript e funziona tramite riga di comando. Tuttavia, il progetto non è legato all'ecosistema JS. Puoi eseguirlo in repository Python, Go, Java o Rust tramite un pacchetto npm globale o immagine Docker.

Il punto degli ADR è che questi documenti sono immutabili. Registri il problema, il contesto, l'opzione scelta e le conseguenze. Se una decisione diventa obsoleta un anno dopo, non modifichi il vecchio file retroattivamente. Crei un nuovo ADR con uno stato supersedes che fa riferimento al precedente. La cronologia dei pensieri rimane intatta.

Cosa può fare Log4brains

Sotto il cofano, l'utilità nasconde diverse funzionalità pratiche che fanno risparmiare tempo quando si lavora con la documentazione.

Anteprima locale con ricarica a caldo

Quando scrivi documentazione nel tuo IDE, non c'è bisogno di ricostruire manualmente il sito statico costantemente. Il comando log4brains preview avvia un server locale basato su Next.js con Hot Reload. Hai salvato il file .md — il browser si aggiorna istantaneamente.

CLI interattiva senza restrizioni rigide

Molti strumenti ADR richiedono una numerazione rigorosa dei file come adr-0001.md, adr-0002.md. Questo diventa un incubo durante i pull request paralleli quando due sviluppatori creano documenti con lo stesso numero.

Log4brains non si affida a una numerazione rigida. I metadati (autore, data di creazione, stato) vengono letti dal testo e dal log git. I template possono essere personalizzati secondo le tue esigenze, anche se il formato MADR collaudato viene utilizzato per impostazione predefinita.

Creare un nuovo record sembra semplice:

log4brains adr new

Il comando chiederà interattivamente il titolo, creerà un file markdown dal template e lo posizionerà nella struttura del progetto.

Supporto monorepo

Se il progetto è suddiviso in più pacchetti, spesso si desidera separare la documentazione. Log4brains può gestire decisioni globali a livello superiore e record dipendenti dal pacchetto all'interno di packages/service-name/docs/adr.

Come iniziare

Tutto inizia con un paio di comandi nel terminale. Avrai bisogno di Node.js LTS e Git:

npm install -g log4brains
log4brains init

La procedura guidata di configurazione farà alcune domande di base, creerà il file di configurazione .log4brains.yml, aggiungerà un template al progetto e genererà il tuo primo ADR di benvenuto.

La configurazione risulta essere compatta:

project:
  name: My Service
  tz: Europe/Moscow
  adrFolder: ./docs/adr

Se hai un monorepo, puoi espandere la struttura:

project:
  name: Core Platform
  tz: Europe/Moscow
  adrFolder: ./docs/adr
  packages:
    - name: auth-service
      path: ./packages/auth
      adrFolder: ./packages/auth/docs/adr
    - name: billing-service
      path: ./packages/billing
      adrFolder: ./packages/billing/docs/adr

Pubblicazione in CI/CD

La parte più preziosa è distribuire la knowledge base esternamente per permettere al team di cercare soluzioni tramite un'interfaccia web. Poiché il build produce file statici puliti, è facile eseguirne il push su GitHub Pages, GitLab Pages o S3.

Esempio per GitHub Actions:

name: Publish Log4brains
on:
  push:
    branches:
      - main
jobs:
  build-and-publish:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
        with:
          persist-credentials: false
          fetch-depth: 0 # обязательно, утилите нужна история git
      - uses: actions/setup-node@v4
        with:
          node-version: lts/*
      - name: Build
        run: |
          npm install -g log4brains
          log4brains build --basePath /${GITHUB_REPOSITORY#*/}/log4brains
      - name: Deploy
        uses: JamesIves/[email protected]
        with:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
          BRANCH: gh-pages
          FOLDER: .log4brains/out
          TARGET_FOLDER: log4brains

Un dettaglio importante: presta attenzione a fetch-depth: 0. L'utilità ha assolutamente bisogno della cronologia completa dei commit per estrarre le date di creazione effettive e gli autori di ciascun documento.

Chi trarrà beneficio da questo progetto

Log4brains si adatta bene a team di 3-4 ingegneri o più, dove le persone periodicamente fanno domande come "perché abbiamo scelto questa libreria/database/pattern".

Lo strumento si integra bene nel processo di code review. Discuti l'architettura in una pull request, fai il merge del codice insieme al file .md nello stesso commit. La documentazione non vive una vita separata su pagine wiki dimenticate — viene aggiornata automaticamente durante il deployment.

Se il progetto è piccolo e ci lavori da solo, il sovraccarico di documentare le decisioni potrebbe sembrare non necessario. Ma per prodotti di lunga durata, questo è uno dei modi più indolori per preservare il contesto delle decisioni.

Progetti correlati