Présentation de Zola (pas l'écrivain, ni le rappeur)

Temps de lecture : 7 minutes 15/06/2020 #info #web #rust

J'aime beaucoup faire des sites statiques. C'est un des trucs qui m'amuse le plus en info, même si c'est quelque chose de simple. Ça représente pas un défi, mais c'est chouette de voir un site naître petit à petit sous ses yeux. C'est aussi beaucoup moins lourd et redondant qu'un site avec une partie « serveur » : on a pas à gérer tout un tas de truc répétitifs comme les comptes, les permissions, etc. alors qu'on veut juste pouvoir publier quelques textes.

En plus de ça, les sites statiques « consomment » beaucoup moins de ressources : pas besoin d'avoir autre chose que NGINX ou Caddy sur son serveur, on peut juste déposer les fichiers et c'est bon. Pas de base de données à migrer non plus.

Bien sûr la plupart du temps je passe par un générateur, pour gagner du temps, et utiliser des technologies un peu plus sympas que du HTML et du CSS pur. L'idée d'un générateur c'est juste qu'il prend tout un tas de fichiers lisibles pour les humains (du markdown, notamment), et qu'il en fait des pages HTML. Avec quelques modèles de pages, un peu de CSS (ou de SCSS), et le contenu à afficher, on arrive très vite à un site sympa.

J'ai déjà testé un certain nombres de générateurs de sites, tous plus ou moins différents, même si le principe de base reste le même. Parmi ceux dont je me souviens, il y a :

Dans cet article je voulais surtout parler d'un générateur qui s'appelle Zola, et de pourquoi je l'aime bien, mais pour comprendre ses avantages, je vais faire un petit résumé de ce que je n'aime pas chez les autres.

Ce que j'aime pas chez les autres

Ça fait très longtemps que je n'ai plus touché à Pelican, mais dans mon souvenir il fonctionnait assez bien. Le principal défaut était qu'il y avait beaucoup d'options et que c'était parfois dur de s'y retrouver, mais peut-être que ça a évolué depuis le temps. Aussi, il se base sur Python, donc il faut d'abord installer Python, puis Pelican. Je ne vais pas m'attarder dessus, ça fait trop longtemps que je n'ai pas regardé pour pouvoir faire une vraie critique.

Les quelques fois où j'ai testé Hugo, j'ai aussi eu du mal à m'y retrouver, mais c'est peut-être parce que je n'avais pas l'habitude et je n'y ait pas passé assez de temps. Je trouve aussi la syntaxe des templates assez… laide (c'est subjectif je sais, mais ça gâche mon plaisir de faire des sites de devoir écrire avec cette syntaxe). Un petit exemple qui vient de leur documentation :

{{ if or (isset .Params "alt") (isset .Params "caption") }} Caption {{ end }}

Par contre, il beaucoup plus simple à installer que Pelican, puisqu'il est en Go. On a donc un seul exécutable à télécharger, et pouf, on peut commencer à travailler.

La communauté est aussi assez importante il me semble, donc trouver de l'aide et des ressources est assez simple.

Enfin, Middleman, celui avec lequel j'ai le plus joué (j'ai fait le site de Plume, la documentation, et mon cours d'OCaml avec notamment). J'aime bien sa façon de faire, où les fichiers « sources » correspondent toujours à leur emplacement final, et les extensions de fichier qui indiquent comment les compiler : par exemple truc.html.md.erb sera d'abord interprété comme un template ERB (Middleman est en Ruby), puis comme un fichier Markdown, et enfin sera transformé en HTML.

La configuration est assez minimale, et il est plutôt rapide à prendre en main à mon avis. Mais j'ai quelques reproches à lui faire :

Et Zola alors ?

Zola

J'ai découvert Zola il y a quelques temps en traînant sur GitHub. Il y a quelques semaines je l'ai testé pour la première fois, et j'ai beaucoup aimé. Je l'ai donc aussi utilisé pour ce blog.

Tout ce que je n'aimait pas trop avec les autres générateurs semble être résolu avec Zola.

Il est écrit en Rust, et pas trop mal codé a priori. Donc les performances sont bonnes. Mon premier site avec avait près de 400 pages de contenu (sans compter les listes de tags, et autres pages d'accueil donc, qui devaient bien rajouter 200 pages en plus), et il se génèrait quasi-instantannément.

Il est donc aussi très simple à installer : comme pour Hugo, on télécharge un exécutable, on le range au bon endroit (/usr/bin par exemple), et c'est bon.

La syntaxe des templates est agréable à mes yeux : ça utilise Tera, qui s'inspire de Jinja (que Pelican utilise). Au début de Plume on utilisait aussi Tera d'ailleurs, donc je connais assez bien les différentes fonctions de base du moteur.

La documentation est assez complète, au moins pour ce que j'ai eu à faire pour le moment.

Bref, il semble avoir toutes les qualités que je demande, donc je pense que je vais continuer d'expérimenter avec. Peut-être que je convertirais certains de mes anciens sites vers Zola aussi.

Le gros défaut c'est que ça me semble encore un peu expérimental, et par exemple l'index de recherche ne fonctionne que si le site est en anglais. Mais ça reste un projet très prometteur, et déjà utilisable dans la plupart des cas.

Vue d'ensemble du fonctionnement

Une fois que Zola est installé, on peut utiliser la commande zola init pour créer un nouveau site :

zola init mon-super-site

Il va alors nous demander quelques informations comme l'URL, ou si on veut activer le SCSS, puis il va générer un squelette de base pour notre site. Le dossier mon-super-site ressemble à ça :

content/
sass/
static/
templates/
themes/
config.toml

On peut facilement installer un thème parmi ceux proposés, en le git clone-ant dans themes, et commencer à écrire. Ou on peut tout faire à la main.

Il faudra alors définir ses templates dans templates/ : index.html sera la page d'acceuil, et page.html la page pour un « contenu ». Il y en a d'autres si on veut un site plus élaboré, mais ces deux là sont la base.

On peut écrire du SCSS ou du SASS dans sass/. Le dossier static/ peut contenir des images, des polices, etc.

Le contenu quand à lui va dans content/. On peut y mettre des fichiers Markdown, organisés dans des dossiers. Zola gardera la même organisation quand il génèrera le site.

Pour tester en local, on utilise zola serve (comme ça il y a un rafraîchissement automatique de la page à chaque changement), et pour générer le site c'est zola build. On peut aussi vérifier qu'il n'y a pas d'erreur sans pour autant générer le site avec zola check.


Bref, Zola m'a bien plu jusqu'à présent, j'espère que je ne serais pas déçue. C'est un chouette petit projet, et ça fait plaisir de travailler avec des outils comme ça.