Publish, un générateur de sites statiques en Swift

Nicolas Furno |

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.

Capture d’écran de la documentation de Publish.

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.

Un site Publish ouvert dans Xcode. Dans ce fichier, vous pourrez définir les principales caractéristiques du site, comme son URL, le titre et la description ou encore le thème. Dans la barre latérale de gauche, on distingue les fichiers en entrée (dossier Content) et les fichiers en sortie (dossier Output).

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.

avatar Dark Phantom | 

Intéressant, il faudrait que j’ai du temps pour me pencher là-dessus

avatar pat3 | 

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 ?

avatar Nicolas Furno | 

@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.

avatar pat3 | 

@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.

avatar Nicolas Furno | 

@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.

avatar pat3 | 

@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.

avatar Nicolas Furno | 

@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

avatar pat3 | 

@nicolasf

Ok merci, je n’avais pas regardé aussi loin.

avatar lawappe | 

Écrire en Swift et MD, pour générer du HTML et CSS ? 😳

avatar Nicolas Furno | 

@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.

avatar lawappe | 

@nicolasf

Ah ok, merci pour la précision.

avatar Derw | 

Est-il possible d’utiliser du SASS (SCSS) ?

avatar Nicolas Furno | 

@Derw

Pas en l'état je crois, mais c'est exactement ce qu'un plugin pourrait offrir.

avatar Derw | 

@nicolasf

Malheureusement, je ne pense pas que la création d’un tel plugin soit à ma portée... à surveiller donc comment cela évolue...

avatar Shralldam | 

@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.

avatar harisson | 

J'espère que SwiftWasm buzzera un peu cette année...

avatar cafeine65 | 

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.

CONNEXION UTILISATEUR