Une application Rails pour l'administration : DSFR, ProConnect et les gems de beta.gouv.fr

Une bonne partie des services publics numériques français écrits en Ruby on Rails sortent du réseau beta.gouv.fr. Ses équipes ont publié des gems pour deux besoins que toute application de l'administration rencontre : afficher l'interface officielle de l'État et connecter les agents avec leur compte professionnel. Voici ce qu'elles font, ce qu'elles ne font pas encore, et à qui elles sont destinées.
Le Système de design de l'État, et qui peut l'utiliser
Le Système de design de l'État, ou DSFR, est l'ensemble de composants HTML, CSS et JavaScript qui donne leur apparence commune aux sites publics : en-tête avec le bloc-marque, typographie Marianne, boutons, formulaires, pied de page. Il est développé et maintenu par le Service d'information du Gouvernement (SIG).
Avant d'écrire une ligne de code, il faut lire ses conditions d'utilisation, résumées dans le dépôt officiel du DSFR. Le code est publié sous licence Etalab 2.0, à l'exception de certains éléments comme les fontes Marianne, mais son usage est encadré par des modalités d'utilisation. Le DSFR étant un marqueur de l'identité visuelle de l'État, il ne doit pas être utilisé par des entités extérieures à l'administration, et son emploi est limité en dehors des noms de domaine en .gouv.fr. Même pour une administration, l'utilisation est soumise à une demande d'agrément (articles 46 à 50 des modalités). Le dépôt précise aussi qu'en cas d'usage trompeur ou frauduleux, l'État se réserve le droit d'agir.
Concrètement, une entreprise qui développe une application pour son propre compte ne peut pas reprendre le DSFR pour « faire officiel ». En revanche, un prestataire qui développe un service pour une administration, sur un domaine de cette administration et avec son accord, travaille dans le cadre prévu. En cas de doute, la question se pose au commanditaire public avant le premier écran.
Les gems DSFR pour Rails
Trois gems, toutes publiées sous licence MIT par beta.gouv.fr, se partagent le travail. Les versions indiquées sont celles de RubyGems.org au 10 novembre 2026.
| Gem | Rôle | Version |
|---|---|---|
dsfr-assets | Embarque les fichiers statiques du DSFR (CSS, JavaScript, polices, icônes) pour les servir depuis l'application | 1.15.4 (22 octobre 2026) |
dsfr-view-components | Composants d'interface du DSFR sous forme de ViewComponent : alertes, badges, cartes, onglets, fil d'Ariane, en-tête, fenêtres modales… | 5.1.0 (2 octobre 2026) |
dsfr-form_builder | Constructeur de formulaires produisant le balisage DSFR des champs, libellés et messages d'erreur | 0.0.15 (28 octobre 2026) |
dsfr-view-components est un fork de govuk-components, l'équivalent britannique pour le GOV.UK Design System. Sa documentation indique qu'elle fonctionne avec Ruby 3.4 ou plus récent et Rails 8 ou plus récent : une application restée sur Rails 7 devra monter de version avant de l'adopter, ou se contenter de dsfr-assets et d'écrire le balisage à la main. Elle s'appuie sur la gem view_component, que l'application doit accepter comme dépendance.
Les formulaires sont volontairement exclus de dsfr-view-components. C'est le rôle de dsfr-form_builder, dont le numéro de version (0.0.x) signale qu'il est encore jeune : relisez son journal des modifications à chaque mise à jour et testez vos formulaires, en particulier l'affichage des erreurs de validation et l'association des messages aux champs, qui comptent pour l'accessibilité.
Ces gems ne sont pas réservées aux grands services. Dans notre analyse de 33 applications Rails du secteur public, dsfr-view-components apparaît dans 10 applications, toutes sur Rails 7 ou plus récent.
Connecter les agents avec ProConnect
ProConnect est présenté par l'État comme la solution officielle d'identification des professionnels du public et du privé : un seul bouton pour se connecter à de nombreux services avec son compte professionnel, l'utilisateur étant rattaché au numéro SIRET de son organisation. Techniquement, c'est un fournisseur OpenID Connect. Les applications s'inscrivent et se configurent sur l'espace partenaires ProConnect, qui héberge aussi la documentation technique.
Pour Rails, beta.gouv.fr publie omniauth-proconnect (version 0.6.2 du 29 septembre 2026), une stratégie OmniAuth. Son README explique pourquoi elle existe à côté de la gem générique omniauth_openid_connect : ProConnect renvoie les informations de l'utilisateur (/userinfo) sous forme de jeton JWT, et impose le paramètre id_token_hint dans l'adresse de déconnexion, alors que la spécification le rend facultatif. Le README juge aussi la gem générique peu maintenue ; sur RubyGems.org, sa dernière version, la 0.8.0, date du 4 juillet 2024.
Quelques points d'attention, tirés de la documentation de la gem :
- la valeur du domaine ProConnect à configurer n'est pas seulement l'hôte : elle doit se terminer par
/api/v2, erreur fréquente selon le README ; - le bouton de connexion doit envoyer une requête
POSTvers/auth/proconnect, avec Turbo désactivé sur ce bouton ; depuis OmniAuth 2, la phase de requête n'accepte plus leGETpar défaut, et la plupart des applications ajoutentomniauth-rails_csrf_protection(9 des 33 applications de notre analyse) ; - la déconnexion côté ProConnect passe par
/auth/proconnect/logout: sans elle, l'agent reste connecté chez le fournisseur d'identité après avoir quitté votre service ; - les informations normalisées arrivent dans
request.env["omniauth.auth"]["info"], le reste dansextra.
# config/initializers/omniauth.rb
Rails.application.config.middleware.use OmniAuth::Builder do
provider :proconnect,
client_id: ENV.fetch("PC_CLIENT_ID"),
client_secret: ENV.fetch("PC_CLIENT_SECRET"),
proconnect_domain: ENV.fetch("PC_DOMAIN"), # se termine par /api/v2
redirect_uri: ENV.fetch("PC_REDIRECT_URI"),
post_logout_redirect_uri: ENV.fetch("PC_POST_LOGOUT_REDIRECT_URI"),
scope: ENV.fetch("PC_SCOPES")
end
Pour l'affichage, dsfr-view-components fournit un composant de bouton aux couleurs de ProConnect (DsfrComponent::ProconnectButtonComponent), qui envoie justement un formulaire en POST vers la cible indiquée.
ProConnect ne remplace pas toujours un compte local. Une application peut le combiner avec Devise, sur lequel OmniAuth se branche, ou avec une authentification maison, pour les usagers qui n'ont pas de compte professionnel ; c'est le cas d'une des six applications de notre analyse qui utilisent ProConnect. Si vous gardez des mots de passe, appliquez la recommandation de la CNIL ; si vous stockez le profil renvoyé par ProConnect, prévoyez sa durée de conservation et sa suppression, comme expliqué dans notre article sur le RGPD et l'effacement des données.
Le reste de la pile
En dehors de ces gems propres à l'administration, les applications publiques ressemblent aux autres applications Rails : PostgreSQL, Puma, RSpec et FactoryBot pour les tests, Pundit pour les autorisations, Sentry pour le suivi des erreurs, Brakeman pour l'analyse statique de sécurité. Notre guide des gems d'autorisation (en anglais) compare Pundit à ses concurrents.
Deux habitudes méritent d'être reprises même hors de l'administration : publier le code, ce que font les équipes de beta.gouv.fr par défaut, et tenir Rails à jour. Sur ce second point, notre analyse montre de grands écarts : quelques équipes appliquent une version de sécurité en quelques jours, tandis que d'autres dépôts publics restent sur des séries qui ne reçoivent plus de correctifs depuis des années.
À retenir
- Le DSFR est réservé aux sites de l'État et soumis à agrément : vérifiez le cadre avant de l'intégrer.
dsfr-assets,dsfr-view-componentsetdsfr-form_buildercouvrent respectivement les fichiers, les composants et les formulaires ; la deuxième demande Rails 8 et Ruby 3.4.omniauth-proconnectgère les particularités de ProConnect (userinfo en JWT, déconnexion avecid_token_hint) ; configurez le domaine avec/api/v2et prévoyez la déconnexion.
Article mis à jour le 10 novembre 2026. Gemfile Review n'a aucun lien avec le SIG, la DINUM, ProConnect ou beta.gouv.fr ; les conditions d'utilisation et les procédures d'inscription peuvent changer, reportez-vous aux pages officielles.
DonnéesRails dans le secteur public : les chiffres
143 dépôts Ruby recensés par code.gouv.fr, 33 applications Rails analysées : 9 sur Rails 8.1, 21 sur une série antérieure à 8.0. Méthode et CSV.
Guides pratiquesMots de passe et recommandation CNIL
Entropie de 80 ou 50 bits, blocage après 10 échecs, stockage haché et salé : les réglages de Devise et de Rails 8 à revoir.
Guides pratiquesRGPD, suppression douce et historique
Une ligne « supprimée » avec deleted_at reste en base active, et PaperTrail garde une copie de l'enregistrement détruit. Comment purger pour de bon.