>_ DevTrendsnl

Taal

Home

Talen

Secties

Frontend Backend Mobiel DevOps AI / ML GameDev Blockchain Embedded Beveiliging
TypeScript

Hoe je architectuurbeslissingen in code niet meer kwijtraakt met Log4brains

Log4brains logo

Heb je ooit naar een module gekeken die anderhalf jaar oud is, een vreemde architectuurbeslissing zag, en werkelijk niet begreep waarom deze gemaakt was? Je handen jeuken om het te herschrijven. Maar dan kom je erachter dat deze eigenaardigheid specifiek ontworpen was om een bug in een third-party API of een bepaalde beveiligingsvereiste te omzeilen. De persoon die het bedacht heeft is allang naar een ander team verhuisd, Confluence is leeg, en alles wat er in git achterblijft is een commit met de lakonieke fix: refactor storage.

Het Architecture Decision Records (ADR) concept lost dit probleem al dertien jaar op. Maar handmatig markdown-bestanden onderhouden en georganiseerd houden is meestal iets waar iedereen te lui voor is. Franse ontwikkelaar Thomas Vaillant creëerde Log4brains, een tool die architectuurbeslissingen vastleggen omzet in een handige docs-as-code workflow.

Wat is deze tool

Log4brains neemt je ADR's, opgeslagen in de repository naast je broncode, parseert ze, en bouwt een snelle statische site met handige zoekfunctie en een tijdlijn.

Log4brains demo

De utility is geschreven in TypeScript en draait via de command line. Het project is echter niet gebonden aan het JS-ecosysteem. Je kunt het uitvoeren in Python, Go, Java, of Rust repositories via een wereldwijd npm-pakket of Docker-image.

Het punt van ADR's is dat deze documenten onveranderlijk zijn. Je legt het probleem vast, de context, de gekozen optie, en de gevolgen. Als een beslissing een jaar later achterhaald is, bewerk je het oude bestand niet achteraf. Je maakt een nieuw ADR met een supersedes status die verwijst naar de vorige. De gedachtegeschiedenis blijft intact.

Wat Log4brains kan doen

Onder de motorkap verbergt de utility verschillende praktische functies die tijd besparen bij het werken met documentatie.

Lokale preview met hot reload

Wanneer je documentatie schrijft in je IDE, is er geen noodzaak om de statische site constant handmatig te herbouwen. Het log4brains preview commando start een lokale server op basis van Next.js met Hot Reload. Je hebt het .md bestand opgeslagen — de browser werkt direct bij.

Interactieve CLI zonder starre beperkingen

Veel ADR-utilities vereisen strikte bestandsnummering zoals adr-0001.md, adr-0002.md. Dit wordt een nachtmerrie tijdens parallelle pull requests wanneer twee ontwikkelaars documenten met hetzelfde nummer maken.

Log4brains vertrouwt niet op starre nummering. Metadata (auteur, aanmaakdatum, status) wordt gelezen uit de tekst en git log. Templates kunnen worden aangepast aan je behoeften, hoewel het bewezen MADR-formaat standaard wordt gebruikt.

Een nieuw record maken ziet er eenvoudig uit:

log4brains adr new

Het commando zal interactief vragen naar de titel, een markdown-bestand maken van de template, en het in de projectstructuur plaatsen.

Monorepo-ondersteuning

Als het project is opgesplitst over meerdere packages, wordt documentatie vaak gescheiden gewenst. Log4brains kan globale top-level beslissingen en package-afhankelijke records aan binnen packages/service-name/docs/adr.

Hoe te beginnen

Alles begint met een paar commando's in de terminal. Je hebt Node.js LTS en Git nodig:

npm install -g log4brains
log4brains init

De setup-wizard stelt een paar basisvragen, maakt het .log4brains.yml configuratiebestand, voegt een template toe aan het project, en genereert je eerste welkomst-ADR.

De config blijkt compact te zijn:

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

Als je een monorepo hebt, kun je de structuur uitbreiden:

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

Publiceren naar CI/CD

Het meest waardevolle deel is het extern deployen van de kennisbank zodat het team via een webinterface kan zoeken naar oplossingen. Omdat de build schone statische bestanden uitvoert, is het eenvoudig om naar GitHub Pages, GitLab Pages, of S3 te pushen.

Voorbeeld voor 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

Een belangrijk detail: let op fetch-depth: 0. De utility heeft absoluut de volledige commit-geschiedenis nodig om de werkelijke aanmaakdatums en auteurs van elk document te extraheren.

Wie heeft baat bij dit project

Log4brains is een goede match voor teams van 3-4 engineers of meer, waar mensen periodiek vragen stellen als "waarom kozen we voor deze bibliotheek/database/patroon".

De tool past goed in het code review proces. Je bespreekt architectuur in een pull request, voegt de code samen samen met het .md bestand in dezelfde commit. Documentatie leidt geen apart bestaan op vergeten wiki-pagina's — het wordt automatisch bijgewerkt tijdens deployment.

Als het project klein is en je werkt solo, kan de overhead van beslissingen documenteren onnodig lijken. Maar voor langlopende producten is dit een van de meest pijnloze manieren om beslissingscontext te behouden.

Gerelateerde projecten