Le développeur Ruby on Rails écrit la partie serveur d'applications web et d'API : modèles ActiveRecord sur PostgreSQL ou MySQL, contrôleurs, jobs en arrière-plan, tests RSpec ou Minitest. Les écrans peuvent être rendus par Rails avec Hotwire, ou confiés à React, et une partie des offres demande un profil full stack Ruby et React. Les offres publiées en France sont peu nombreuses, et beaucoup visent des profils seniors.
Les versions comptent dans l'évaluation. Rails 8.0, sorti en novembre 2024, a apporté Solid Queue, Solid Cache et Solid Cable, qui rangent jobs, cache et messages temps réel en base au lieu de Redis, avec Propshaft, un générateur d'authentification et le déploiement par Kamal 2. Rails 8.1, en octobre 2025, permet de reprendre un job long après un redémarrage. Si votre application est encore en Rails 6 ou 7, la personne recrutée mènera la montée de version : demandez-en une qu'elle a faite.
Rails et Sidekiq figurent sur la plupart des CV de développeurs Ruby. L'expérience se voit dans les détails : un job lancé après le commit et pas avant, un index ajouté sans bloquer la table, une requête N+1 repérée dans les logs ou avec strict_loading. Le PDF contient 30 questions sur six axes et un cas de 20 minutes sur une facturation mensuelle.
La pile technique d'une application Rails
Ruby
Le langage, interprété et très dynamique. Blocs, modules et métaprogrammation permettent d'écrire peu de code, et parfois du code difficile à suivre. Ruby 3.4 et 4.0 sont les versions stables en 2026. YJIT, le compilateur à la volée fourni avec Ruby, accélère une application Rails sans changer le code, et Rails l'active par défaut depuis la version 7.2.
ActiveRecord
La couche qui relie les classes Ruby aux tables de la base. Une ligne de Ruby peut déclencher des dizaines de requêtes SQL sans que rien ne se voie dans le code. Le poste demande de lire le SQL généré, de poser les bons index et d'écrire des migrations qui ne bloquent pas une table en production.
PostgreSQL ou MySQL
La base principale de l'application. Depuis Rails 8, elle peut aussi porter les jobs, le cache et les messages temps réel, ce qui change la charge à surveiller. Demandez à la personne comment elle lit un plan d'exécution et comment elle règle le nombre de connexions.
Sidekiq et Solid Queue
Les files de jobs en arrière-plan : envoi d'e-mails, exports, appels à des API externes. Sidekiq s'appuie sur Redis et reste très répandu. Solid Queue, par défaut depuis Rails 8, stocke les jobs en base. Dans les deux cas, un job peut s'exécuter deux fois et doit pouvoir être rejoué sans effet en double.
Hotwire (Turbo et Stimulus)
Le front proposé par défaut depuis Rails 7. Le serveur renvoie du HTML, Turbo remplace une partie de la page ou la met à jour en direct, Stimulus ajoute un peu de JavaScript. Si vos écrans sont en React, ce sujet compte moins que la qualité des API JSON.
RSpec, FactoryBot et Minitest
Minitest est fourni avec Rails, beaucoup d'équipes lui préfèrent RSpec avec FactoryBot pour fabriquer les données de test. Les tests système passent par Capybara et un navigateur piloté. Une suite lente ou des tests qui échouent au hasard font partie des sujets à aborder.
Puma, Docker et Kamal
Puma sert l'application avec des workers et des threads. Rails 8 génère un Dockerfile et une configuration Kamal pour déployer sur ses propres serveurs, avec Thruster devant Puma. D'autres équipes restent sur Heroku, Render ou Kubernetes. Le réglage des threads et du pool de connexions vaut une question.
Brakeman et bundler-audit
Brakeman analyse le code et signale injections SQL, failles XSS ou paramètres non filtrés. bundler-audit liste les gems qui ont une faille connue. Rails génère la configuration de Brakeman depuis la version 7.2, et les deux outils tournent en intégration continue sur un projet tenu.
Le poste se décline de trois façons. Le développeur back-end Rails tient les modèles, les API JSON et les jobs, avec des écrans séparés en React ou en Vue. Le développeur full stack Rails écrit aussi les vues avec Hotwire, ou le front React. Le senior ou tech lead mène les montées de version, découpe un monolithe qui a grossi et règle les performances de la base. Le travail porte souvent sur du code écrit par d'autres il y a plusieurs années. Rails n'a pas de certification officielle, l'expérience se vérifie en entretien et sur du code.
Les compétences Rails à noter pendant l'entretien
- Langage Ruby et métaprogrammation
- ActiveRecord, SQL et index
- Jobs asynchrones et transactions
- API Rails et Hotwire
- Tests RSpec et FactoryBot
- Sécurité et montées de version Rails
Questions d'entretien Ruby on Rails, avec la réponse attendue
Chaque question vient avec ce qu'une bonne réponse contient et le signal qui doit vous alerter. Pas besoin d'être technique pour les poser : écoutez si le candidat raconte du vécu.
Question 1 · confirmé
Une page qui liste 50 commandes avec le nom du client met trois secondes à s'afficher, et les logs montrent 51 requêtes. Que faites-vous ?
Une bonne réponseC'est un N+1 : une requête pour les commandes, puis une par client. On charge l'association avec includes(:customer), en sachant que preload fait deux requêtes et eager_load une jointure. Pour éviter le retour du problème, strict_loading sur le modèle ou en développement, la gem Bullet, ou un test qui compte les requêtes. La personne vérifie aussi l'index sur orders.customer_id.
Signal d'alerte« J'ajoute du cache » ou « on prend un serveur plus gros ». Un joins à la place d'includes, qui filtre sans charger l'association.
Question 2 · confirmé
Un job Sidekiq lancé dans un after_save échoue de temps en temps avec ActiveRecord::RecordNotFound. Pourquoi, et comment le corrigez-vous ?
Une bonne réponseLe job est mis en file avant la fin de la transaction. Un worker rapide le prend et cherche un enregistrement que la base ne montre pas encore. On déplace l'appel dans un after_commit (ou after_create_commit), ou on utilise l'option de Rails 7.2 qui retarde la mise en file jusqu'au commit. On passe au job un identifiant, jamais l'objet lui-même.
Signal d'alerte« J'ajoute un sleep » ou « les retries finissent par passer », sans comprendre la cause.
Question 3 · senior
Vous devez ajouter un index sur une table PostgreSQL de 80 millions de lignes utilisée en continu. Comment écrivez-vous la migration ?
Une bonne réponseadd_index avec algorithm: :concurrently, et disable_ddl_transaction! dans la migration, car CREATE INDEX CONCURRENTLY ne s'exécute pas dans une transaction. Si la création échoue, il reste un index invalide à supprimer avant de relancer. Beaucoup d'équipes ajoutent la gem strong_migrations, qui bloque les opérations dangereuses. Pour supprimer une colonne, on la déclare d'abord dans ignored_columns, on déploie, puis on la retire.
Signal d'alerteUn add_index simple, qui bloque les écritures pendant toute la création, lancé en pleine journée sans y penser.
Question 4 · senior
L'application tourne en Rails 7.0. Comment la passez-vous en Rails 8.1 ?
Une bonne réponseUne version mineure à la fois : 7.1, 7.2, 8.0, puis 8.1, avec un déploiement à chaque étape. Il vérifie la version de Ruby demandée (3.2 au minimum pour Rails 8), corrige les avertissements de dépréciation avant de changer de version et les rend bloquants en test. Il contrôle la compatibilité des gems, lance rails app:update, active un à un les réglages du fichier new_framework_defaults, puis passe load_defaults. Certains montent un double démarrage (gem next_rails) pour faire tourner la CI sur les deux versions.
Signal d'alerteUn saut direct de 7.0 à 8.1, ou load_defaults changé d'un coup sans relire les nouveaux réglages. Aucune mention des tests.
Question 5 · junior à confirmé
Dans une méthode, un return placé dans un bloc, dans un proc et dans un lambda : que se passe-t-il dans chaque cas ?
Une bonne réponseDans un lambda, return sort du lambda seulement, comme une méthode. Dans un bloc ou un proc, return sort de la méthode qui les a définis, et lève une LocalJumpError si cette méthode est déjà terminée. Le lambda vérifie aussi le nombre d'arguments, le proc non. Pour renvoyer une valeur depuis un bloc sans quitter la méthode, on utilise next.
Signal d'alerte« C'est pareil », ou une confusion entre proc et lambda sans exemple. Un profil qui n'a jamais écrit de méthode qui prend un bloc avec yield.
Recevez la fiche d'entretien complète en PDF
La fiche pour mener l'entretien de bout en bout, prête à imprimer ou à partager avec le manager.
- 30 questions sur 6 axes, avec la bonne réponse, le signal d'alerte et la relance
- Le niveau visé pour chaque question
- Une mise en situation de 20 minutes et ce qu'on attend du candidat
- La grille d'évaluation de 1 à 4, axe par axe
Profils Ruby et Rails : réponses aux questions courantes
Faut-il exiger Rails 8 sur le CV ?
Non. Rails 8 est sorti fin 2024, et beaucoup de développeurs travaillent encore sur des applications en Rails 6 ou 7. Ce qui compte, c'est d'avoir suivi au moins une montée de version et de connaître les nouveautés : Solid Queue, Solid Cache, le générateur d'authentification, Kamal. Une personne qui a fait passer une application de Rails 6 à 7.2 prendra vite en main Rails 8. L'inverse, une seule application neuve en Rails 8, prépare moins bien à du code ancien.
Un développeur Django ou Laravel s'adapte-t-il vite à Rails ?
Les concepts se ressemblent : un ORM, des migrations, des contrôleurs, des jobs. L'adaptation porte sur Ruby lui-même, ses blocs et sa métaprogrammation, et sur les conventions de Rails, qui font beaucoup de choses sans les écrire. Comptez quelques semaines pour être autonome sur une application existante. En entretien, faites lire un modèle ActiveRecord avec ses associations et ses callbacks, et demandez combien de requêtes une page va lancer.
Projet à la maison ou exercice en direct pour un profil Rails ?
Un exercice court en direct apprend plus qu'un projet de plusieurs jours. Donnez un contrôleur et un modèle existants avec un N+1, un job lancé dans un after_save et un paramètre non filtré, et demandez à la personne de les trouver en commentant à voix haute. Ce test technique tient en trente minutes et montre l'habitude du code en production. Un projet à la maison favorise ceux qui ont du temps libre et se prépare plus facilement.
Quelles compétences demander en plus de Rails dans l'offre ?
Partez de votre pile réelle. SQL et PostgreSQL sont presque toujours utiles, avec la lecture d'un plan d'exécution. Ajoutez Sidekiq ou Solid Queue si les jobs sont nombreux, Hotwire si les vues sont rendues par Rails, React ou Vue si le front est séparé. Docker, Kamal ou Kubernetes comptent si l'équipe déploie elle-même. Évitez la liste de vingt gems, qui décourage des profils solides sans rien vous apprendre.
Pour structurer vos autres entretiens, consultez aussi nos pages sur les questions d'entretien de recrutement, la méthode de l'entretien structuré et la grille d'évaluation d'entretien.





