Wat is een Apps Script library
Een Apps Script library is een herbruikbaar script-project dat je kunt delen met andere projecten of gebruikers. In plaats van dezelfde code te kopiëren naar meerdere projecten, definieer je gemeenschappelijke functies eenmalig in een library en importeer je die waar nodig.
Typische use cases zijn: gemeenschappelijke helper-functies, herbruikbare API-wrappers, configuratie-utilities en gestandaardiseerde logging.
Library of clasp-package?
Een library is de native manier om code te delen tussen projecten en is gekoppeld aan een Script ID. Wil je code juist letterlijk inbakken in elk project (zonder runtime-afhankelijkheid), dan kies je voor een build-tool zoals clasp. Voor de meeste teams binnen Workspace is een native library de eenvoudigste keuze.
Library aanmaken en publiceren
Library publiceren in 6 stappen
- Maak een nieuw Apps Script project aan.
- Schrijf de functies die je wilt delen (zie het voorbeeld hieronder).
- Ga naar Deploy en kies New deployment.
- Klik op het tandwiel naast Select type en kies Library.
- Voer een beschrijving en (impliciet) een versienummer in via Save new version.
- Klik Deploy en noteer het Script ID voor de import.
const LibVersie = '2.1.0';
function getVersie() {
return LibVersie;
}
function formateerDatum(datum, tijdzone = 'Europe/Amsterdam', formaat = 'dd-MM-yyyy') {
if (!(datum instanceof Date)) {
datum = new Date(datum);
}
return Utilities.formatDate(datum, tijdzone, formaat);
}
function stuurSlackBericht(webhookUrl, tekst, kanaal = null) {
const payload = {text: tekst};
if (kanaal) payload.channel = kanaal;
const response = UrlFetchApp.fetch(webhookUrl, {
method: 'POST',
contentType: 'application/json',
payload: JSON.stringify(payload),
muteHttpExceptions: true,
});
return response.getResponseCode() === 200;
}
function slugify(tekst) {
return tekst
.toLowerCase()
.replace(/[àáâãäå]/g, 'a')
.replace(/[èéêë]/g, 'e')
.replace(/[ìíîï]/g, 'i')
.replace(/[òóôõö]/g, 'o')
.replace(/[ùúûü]/g, 'u')
.replace(/[^a-z0-9\s-]/g, '')
.replace(/\s+/g, '-')
.replace(/-+/g, '-')
.replace(/^-|-$/g, '');
}
Library importeren in een project
Library toevoegen aan een doelproject
- Open het doelproject in de Apps Script editor.
- Klik op het plusje naast Libraries in de zijbalk.
- Plak het Script ID van de library en klik Look up.
- Selecteer de gewenste versie in de dropdown.
- Kies een identifier (bijvoorbeeld
Utils). - Klik Add.
function gebruikLibrary() {
const versie = Utils.getVersie();
Logger.log(`Library versie: ${versie}`);
const datum = Utils.formateerDatum(new Date());
Logger.log(`Datum: ${datum}`);
const slug = Utils.slugify('Hallo Wereld! @2026');
Logger.log(`Slug: ${slug}`);
}
Kies altijd een vaste versie in productie
Selecteer bij import altijd een specifiek versienummer voor productie-projecten, niet HEAD. Een import op HEAD (de development-modus) wijst naar de laatst opgeslagen code en kan stilzwijgend breaking changes binnenhalen zodra je de library aanpast. Een vaste versie blijft stabiel tot je hem bewust ophoogt.
Naamruimte en zichtbaarheid
Alleen functies die niet beginnen met een underscore zijn beschikbaar in importerende projecten. Gebruik underscores voor interne helper-functies:
function publiekeFunctie() {
return _internHelper();
}
function _internHelper() {
return 'intern resultaat';
}
Versie-management
Houd binnen de library bij welke wijzigingen per versie zijn doorgevoerd. Dat maakt het voor importerende projecten duidelijk wanneer een upgrade veilig is en wanneer er een breaking change in zit.
const VERSIE_INFO = {
major: 2,
minor: 1,
patch: 0,
datum: '2026-06-02',
wijzigingen: [
'v2.1.0: slugify-functie toegevoegd',
'v2.0.0: Breaking change: handtekening formateerDatum gewijzigd',
'v1.0.0: Initiele release',
],
};
function getVersieInfo() {
return JSON.stringify(VERSIE_INFO);
}
function checkMinimumVersie(vereistMajor, vereistMinor) {
return VERSIE_INFO.major > vereistMajor ||
(VERSIE_INFO.major === vereistMajor && VERSIE_INFO.minor >= vereistMinor);
}
Werk met semantische versienummers
Verhoog patch bij bugfixes, minor bij nieuwe functies die niets breken, en major bij wijzigingen die bestaande aanroepen breken. Importerende projecten kunnen dan met checkMinimumVersie() controleren of ze met de juiste versie draaien.
Library testen
Schrijf testfuncties in het library-project zelf en draai ze daar. Zo controleer je de functies los van elk importerend project.
function runLibraryTests() {
const fouten = [];
const datum = formateerDatum(new Date('2026-01-15'));
if (datum !== '15-01-2026') fouten.push(`formateerDatum fout: ${datum}`);
const slug = slugify('He Wereld!');
if (slug !== 'he-wereld') fouten.push(`slugify fout: ${slug}`);
const versie = getVersie();
if (!versie.match(/^\d+\.\d+\.\d+$/)) fouten.push(`versieformaat fout: ${versie}`);
if (fouten.length === 0) {
Logger.log('Alle tests geslaagd');
} else {
fouten.forEach(f => Logger.log('FOUT: ' + f));
throw new Error(`${fouten.length} tests mislukt`);
}
}
Praktisch voorbeeld: gedeelde Slack-helper
Stel dat meerdere automatiseringen in je team een Slack-melding moeten sturen bij een fout. In plaats van de webhook-logica in elk project te dupliceren, plaats je stuurSlackBericht() eenmaal in een library en roep je hem overal aan via Utils.stuurSlackBericht(...). Verandert er iets aan de aanroep van Slack, dan pas je het op een plek aan en hoog je de library-versie op.
Bewaar webhook-URLs niet hardcoded
Zet geen webhook-URLs, API-sleutels of tokens als platte tekst in je library-code. Gebruik PropertiesService (Script Properties) of geef de waarde mee als parameter, zodat geheime gegevens niet meereizen met de gedeelde code.
Kan ik een library prive houden?
Ja. Alleen gebruikers met leestoegang tot het library-script kunnen het importeren. Deel het script via Drive met de specifieke collega's die het nodig hebben en houd het verder besloten.
Hoe update ik een library in al mijn projecten?
Ga in elk importerend project naar Libraries en selecteer de nieuwe versie. Dit gaat niet automatisch bij een vaste versie, en dat is juist de bedoeling: zo bepaal jij per project wanneer je upgradet.
Wat is het verschil tussen HEAD en een vaste versie?
HEAD wijst naar de laatst opgeslagen code en verandert mee zodra je de library aanpast, handig tijdens ontwikkeling. Een vaste versie is een bevroren snapshot die stabiel blijft, de juiste keuze voor productie.
Kan een library zelf andere libraries importeren?
Ja, libraries kunnen ook afhankelijkheden hebben. Houd er rekening mee dat geneste libraries de complexiteit en de opstarttijd verhogen, dus gebruik dit met mate.
Hoe debug ik een library-functie?
Voeg tijdelijk Logger.log() toe in de library-code en draai de tests vanuit het library-project zelf. In het importerende project zie je de logs van de library niet altijd direct, dus testen aan de bron is betrouwbaarder.
Waarom is mijn functie niet zichtbaar na import?
Functies die met een underscore beginnen zijn opzettelijk niet beschikbaar voor importerende projecten. Hernoem de functie zonder underscore als je hem wel publiek wilt maken.
Libraries zorgen voor consistentie en vermijden code-duplicatie over meerdere Apps Script projecten. Door een centrale library bij te houden voer je verbeteringen op een plek door, zonder elk project apart te wijzigen.