Publish, un générateur de sites statiques en Swift
Pour publier un site sur internet, il y a toujours deux grandes méthodes : utiliser un gestionnaire de contenus comme WordPress, ou générer un site statique composé de fichiers HTML. La première méthode est la plus courante de nos jours, mais la deuxième conserve quelques avantages en termes de performances et de sécurité ou encore de prix d’hébergement. En revanche, coder à la main toutes les pages d’un site devient vite ingérable et c’est pourquoi on utilise des outils qui génèrent les pages.
Publish est un nouveau générateur de sites statiques open-source qui a la particularité d’être écrit en Swift. Le langage de développement d’Apple sert surtout à créer des apps pour les appareils iOS, les Mac, montres et autres Apple TV, mais il ne se limite pas à ce domaine. Le constructeur lui-même a lancé un groupe de travail pour l’adapter au monde des serveurs, mais ce n’est pas dans ce cadre que ce nouvel outil vient se placer.

En effet, Publish est un générateur de sites qui va convertir des fichiers source en fichiers HTML et CSS, prêts à être publiés sur un serveur. Il peut fonctionner sur un serveur Linux grâce à un outil en ligne de commande et un système d’API, mais il a été pensé pour l’écosystème Swift et on peut ainsi également l’utiliser avec Xcode, l’outil de développement créé par Apple. D’ailleurs, Publish est proposé sous la forme d’un paquet Swift et vous devrez le récupérer avec le gestionnaire de paquets officiel.
L’intégration de la philosophie générale de Swift va encore plus loin que cela. La plupart des générateurs de sites statiques fonctionnent sur la base d’un outil en ligne de commandes et de dossiers et fichiers organisés d’une certaine manière. La configuration pour le site est en général enregistrée dans l’un de ces fichiers et l’outil s’en sert pour créer le site. Rien de tel avec Publish, où chaque site est défini sous la forme d’un autre paquet Swift.
Le site entier est défini par un fichier Package.swift
qui pourra être ouvert dans Xcode. À l’intérieur, on trouvera toute la configuration essentielle, comme le nom du site, son thème ou encore les types de contenus qui seront générés (articles, pages, recettes, films…). Pour générer le site, la commande Product > Run de Xcode pourra être utilisée et le site statique sera généré dans un dossier « Output ». D’autres méthodes permettent d’atteindre le même résultat sans passer par un Mac, mais toute la phase de configuration initiale devra se faire dans cet environnement de travail.
Quand tout est configuré, Publish fonctionne comme n’importe quel autre générateur de site statique. Tous les contenus doivent être placés dans des fichiers Markdown et organisés dans une hiérarchie spécifique, avec des en-têtes à respecter pour les métadonnées. La phase d’approche est plus complexe et nécessite quelques connaissances de base en développement et de préférence en Swift.

C’est un choix assumé par le créateur de Publish, John Sundell, qui est aussi l’auteur du site Swift by Sundell (qui est d’ailleurs généré avec cet outil). En contrepartie de cette approche plus difficile, ce générateur est extrêmement souple et devrait permettre d’en faire plus que ses concurrents. Il y a un système de plug-ins qui reposent également sur des paquets Swift, et les modèles de pages (templates en anglais) sont générées avec Plot, un outil du même développeur pour écrire du HTML également en Swift.
C’est un projet très ambitieux, qui pourrait aboutir à un écosystème riche si d’autres développeurs s’y intéressent. Pour le moment, c’est tout nouveau et il n’y a pas vraiment de plug-ins à utiliser, ni de thème prêts à emploi. Tout reste à inventer, mais comme il y a beaucoup de développeurs qui écrivent du Swift au quotidien, Publish a une bonne chance de connaître le succès.
Publish est un projet open-source distribué sur GitHub. Tous les développeurs qui le souhaitent peuvent l’utiliser et y contribuer en apportant des améliorations.
Intéressant, il faudrait que j’ai du temps pour me pencher là-dessus
Intéressant , merci pour cette découverte. Cependant, il y a quelque chose que je n’ai pas compris : « les thèmes sont créés avec Plot, un outil du même développeur pour écrire du HTML également en Swift. »
Les thèmes ne sont-ils pas écrit essentiellement en CSS ? Et ça te dire que Plot écrit du HTML et du CSS ?
@pat3
Thème dans le sens de modèle de page, *template* en anglais. Il y a aussi du CSS en effet pour le style, mais Plot sert à organiser chaque élément sur les pages.
Je vais tenter de préciser ce passage.
@nicolasf
Ok, j’avais bien compris le sens de template; mais une fois les éléments choisis en HTML, leur organisation et leurs spécificités sont écrites en CSS, d’où ma question.
@pat3
Je crois que le mieux pour comprendre Plot, c'est de voir la documentation : https://github.com/johnsundell/plot#write-html--in-swift
C'est plus clair ainsi je pense.
@nicolasf
Merci, j’y vais de ce pas.
[edit] en effet, Plot édité des templates nus. Je n’ai pas repéré comment les habiller dans la documentation. D’autres générateurs de site incluent des fonctionnalités d’habillage;par exemple, https://github.com/mixu/markdown-styles.
@pat3
Il y a aussi du CSS, dans le dossier des ressources. Le thème dépend d'ailleurs de ce dossier, donc ma première version de l'article était bien incorrecte.
Du coup, le thème par défaut très simple qui sert de base : https://github.com/JohnSundell/Publish/blob/master/Resources/FoundationTheme/styles.css
@nicolasf
Ok merci, je n’avais pas regardé aussi loin.
Écrire en Swift et MD, pour générer du HTML et CSS ? 😳
@lawappe
On n'écrit pas en Swift, Swift est utilisé pour le générateur. On écrit en Markdown, pour générer du HTML et CSS en effet.
@nicolasf
Ah ok, merci pour la précision.
Est-il possible d’utiliser du SASS (SCSS) ?
@Derw
Pas en l'état je crois, mais c'est exactement ce qu'un plugin pourrait offrir.
@nicolasf
Malheureusement, je ne pense pas que la création d’un tel plugin soit à ma portée... à surveiller donc comment cela évolue...
@Derw
Avec Jekyll c’est possible. Ça fonctionne dans l’ensemble sur un principe que ce qui est décrit dans l’article : articles et pages rédigées en Markdown, thèmes et styles rédigés en SASS, utilisation de fichiers YAML pour la config… Mais c’est du Ruby et en termes de performances, ce nouvel outil sera probablement plus rapide.
J'espère que SwiftWasm buzzera un peu cette année...
A suivre.
il existe aussi Hugo https://gohugo.io/ (multi plateforme) que j'utilise il développé en Golang il est extrêmement rapide et de nombreux thèmes sont dispo.