Ruby on Rails : le framework MVC pour les applications Web complexes

En 2004, l’entreprise américaine de développement Web 37signals (aujourd’hui Basecamp) a publié Basecamp, une application de gestion de projet incluant des fonctionnalités telles que des to-do listes, un gestionnaire de temps et un système de messagerie. Une partie du programme était une architecture basique conçue par le programmeur David Heinemeier Hansson, mais elle a été extraite la même année, et publiée en 2005 en tant que framework open source indépendant pour le Web. Son nom est devenu Ruby, et est aujourd’hui plus connu sous le nom de Ruby on Rails, que l’on abrège parfois en RoR ou simplement Rails. Le fait que le framework, aujourd’hui géré par une équipe de plusieurs développeurs, soit devenu l’une des solutions les plus recherchées pour la création de nouvelles applications Web, était probablement difficile à imaginer à l’époque.

Ruby on Rails : définition

Depuis que Ruby on Rail a été publié sous licence MIT, le framework a continué à être développé. A cet égard, il est resté fidèle à sa philosophie de départ, le principe Don’t repeat yourself (« ne vous répétez pas »). Dans un projet basé sur le framework Rails, chaque information doit donc n’être disponible qu’une seule fois. Par exemple, définir les colonnes d’un tableau uniquement dans la base de données est suffisant, et il n’y a pas besoin de garder cette information dans le code source ou dans un fichier de configuration séparé. Le module implémenté Active Records lit lui-même depuis la base de données.

Le second paradigme conceptuel s’intitule convention over configuration (« la convention avant la configuration »). Le framework RoR spécifie en effet plusieurs conventions, en particulier en ce qui concerne les classes de noms. Pour un développeur, s’appuyer sur ces conventions permet de gagner un temps considérable. Toutefois, Ruby on Rails permet également des configurations alternatives, ce qui signifie qu’il reste une grande flexibilité dans la programmation de votre application Web.

Ruby : le langage flexible et indépendant du framework Rails

Au milieu des années 90, le japonais Yukihiro Matsumoto a publié le langage orienté objet Ruby. D’abord utilisé essentiellement au Japon, le langage de script s’est peu à peu établi en tant qu’alternative populaire aux leaders du marché tels que PHP, Python, etc. Ce succès n’est pas dû au hasard : le but de Matsumoto est de faire de Ruby un outil qui rend la programmation divertissante et réunit les meilleures caractéristiques des autres langages. Il s’agit d’un langage de script interprété : le code est donc exécuté par un interprète, ce qui rend Ruby légèrement plus lent que les scripts compilés, mais également bien plus flexible et dynamique. Dans la mesure où il existe des interprètes spécifiques pour la plupart des systèmes d’exploitation courants, le code Ruby n’est pas dépendant d’une plateforme en particulier.

L’une des autres caractéristiques essentielles de Ruby est sa capacité multi-paradigmes, ce qui est également le cas de C++ par exemple. L’utilisateur n’est pas lié à un paradigme de programmation en particulier. Grâce au « principe de moindre surprise », l’utilisation du langage de script est intuitive et ne présente pas, en principe, de comportement inattendu. En tant que programme open source sous licence BSD, Ruby jouit d’une communauté large et active, qui a contribué à créer de nombreuses bibliothèques de programmes. La plupart d’entre elles sont soumises à la même licence et jouent un rôle majeur dans le développement de nouvelles applications Web. Elles peuvent être installées, utilisées et mises à jour grâce à RubyGems. L’un de ces Gems (dont fait également partie l’API Web public de Google et Facebook), est le framework Rails.

L’architecture modèle-vue-contrôleur (MVC)

Les environnements d’exécution Ruby-on-Rails sont des systèmes fermés. Ils contiennent les interprètes, les bibliothèques de programmes nécessaires et les scripts respectifs. Chaque projet rail fait automatiquement l’objet d’une structure de répertoire regroupant les scripts, les configurations, les classes, le contenu, etc. Cette approche structurelle, ainsi que la gestion indépendante des données et de leurs ajustements, rend la maintenance des applications Web plus facile. On parle dans ce cas d’une architecture modèle-vue-contrôleur (MVC), dont les différents composants sont les suivants :

Le modèle

En général, les applications Rails sont liées à des bases de données relationnelles. Le framework Ruby a besoin de modèles pour communiquer avec le système de gestion de chaque base de données, ainsi que pour créer et manipuler les entrées. Ces modèles représentent des classes sur des tableaux de bases de données, ainsi que des attributs individuels pour les colonnes appropriées. Par défaut, la couche du modèle est basée sur le framework ORM (object relationnal mapping). Depuis Rails 3.0 il est également possible d’utiliser d’autres bibliothèques ORM comme Sequel.

Les vues

Les couches de vue ou de présentation ont besoin que le framework puisse accéder aux données de la couche de modèle et les visualiser. Pour ce faire, Ruby on Rails utilise la classe Action View, compatible avec de nombreux formats de sortie. View présente les données correspondantes sous forme de fichiers HTML. Les documents XML ou JSON sont utilisés pour accéder aux entrées de bases de données disponibles pour d’autres programmes ou services.

Les contrôleurs

Les contrôleurs constituent l’interface entre les couches de modèle et de vue. Ils exécutent les demandes entrantes grâce au navigateur Web, extraient les modèles concernés de la base de données, et les transfèrent aux vues qui mettent la visualisation en œuvre. En tant qu’unité centrale de contrôle de l’application Rails, le contrôleur gère aussi la mémoire cache, ou regroupe en une seule session des requêtes de différents clients effectuées dans la même période de temps.

Les composants standard du framework Ruby

En tant que framework pour applications Web, Ruby on Rails propose, dans sa configuration standard, tous les composants nécessaires à un développeur pour programmer une application puissante. La seule condition supplémentaire est que Ruby, le gestionnaire de paquets RubyGems et une base de données SQL soient installés. Pour la suite, l’équipe de Rails recommande la bibliothèque de programmes open-source écrite en langage C SQLite, qui contient un système de base de données relationnelle. Voici les modules standards du framework Ruby on Rails :

  • Action Controller : ce module permet de créer des interfaces entre les entrées de la base de données d’une part, et les programmes et les utilisateurs qui y accèdent d’autre part.
  • Action View : Action View vous offre la possibilité de générer une visualisation pour chaque entrée et chaque contrôleur. En ce qui concerne les appellations, la convention veut que chaque vue soit nommée d’après le contrôleur respectif.
  • Active Record : il s’agit d’un module central pour la manipulation de la base de données de votre application Rails. Pour créer un modèle individuel avec Active records, une configuration poussée n’est pas nécessaire, tant que l’on adhère aux conventions, d’appellation notamment. À cette fin et grâce à son système d’échafaudage, Ruby on Rails propose le meilleur outil pour créer des interfaces adaptées aux quatre opérations CRUD, qui présentent une base de données orientée objet.
  • Active Resource : ce module met en œuvre le mapping objet-relationnel (ORM) pour les services Web REST. À l’instar d’Active Record, ce composant s’efforce de minimiser les configurations.
  • Action Mailer : ce module permet d’envoyer et de recevoir des emails dans votre application Web. Pour ce faire, il est facile de créer une adresse email et un nom d’utilisateur.
  • Active Support : le module Active support contient plusieurs classes de programmes d’aide utiles, et des extensions de bibliothèques standards.
  • Railties : Railties est conçu pour permettre à tous les composants du framework RoR de fonctionner ensemble. Pour cette raison, chaque module a mis en œuvre son propre Railtie, par exemple pour commencer le processus d’initialisation ou pour effectuer les configurations du framework. Railties est également nécessaire pour ajouter les modules propres à Ruby on Rails.

Ruby on Rails : avantages et inconvénients du framework Web

Il existe une blague bien connue sur les choix de langages de script :

 « Deux développeurs discutent des langages de programmation qu’ils utilisent. Le premier dit : « je travaille avec Java, et je laisse mes enfants jouer avec PHP ». Le second lui répond : « je joue avec mes enfants, et je laisse Ruby travailler pour moi ! ».

Cette petite blague fait certes montre d’une pointe d‘exagération, mais le cœur du propos est fondé. Java, considéré comme une solution de premier choix, est souvent utilisé pour les frameworks dans le domaine professionnel. Toutefois, programmer avec ce langage qui ne dépend d’aucune plateforme est tout sauf simple : c’est généralement compliqué et nécessite beaucoup de temps à cause de la structure souvent complexe. En tant que langage de script, Ruby n’est donc apparenté à aucune plateforme en particulier. Mais en même temps, un code créé avec Ruby est plus rapide, facile à personnaliser et moins lourd. En revanche, le langage d’interprétation rend la vitesse des applications développées plus lente que les mêmes applications développées avec Java.

Par rapport à Java, PHP présente également des avantages importants en termes de simplicité et d’effort de développement. Dans le développement Web, il s’agit de la solution de référence par excellence, qui est à la base, entre autres, de nombreux systèmes de gestion de contenu comme Wordpress, TYPO3 ou Joomla. Dans la mesure où PHP a été agencé de façon plutôt arbitraire et qu’il n’est pas toujours orienté objet, il est parfois pénible de mettre à jour des applications Web qui ont été développées avec des versions plus anciennes. Ruby on Rails, au contraire, a été entièrement orienté objet depuis ses débuts : les applications développées avec des anciennes versions présentent donc un code plus clair que les projets PHP standard.

Ruby on Rails contient un framework intégré, qui permet de tester les fonctionnalités de votre application à tout moment. Grâce à cette possibilité, les erreurs peuvent être décelées et corrigées dès le début. Des techniques de Web 2.0 telles qu’AJAX peuvent être utilisées en quelques lignes. De plus, Ruby et le framework Rails disposent d’une énorme communauté qui ne cesse de grandir, comme en atteste le large choix d’extensions disponibles.

La philosophie innovante de Rails, c’est-à-dire la recherche de la plus grande simplification possible pour le développeur, que Matsumoto a mis en œuvre dès le début avec le système d’échafaudage, les conventions fixes ou la structure MVC, a servi de modèles à de nombreux frameworks ultérieurs. C’est un principe que l’on retrouve dans les frameworks PHP Symfony, CakePHP et Zend Framework.

Pour qui le framework Ruby est-il adapté ?

Ruby on Rails offre tout ce dont a besoin un développeur pour créer des applications Web modernes : une structure pour la création d’interfaces de premier choix, une connexion facile à une base de données SQL, ainsi que la possibilité d’installer des technologies Web telles qu’AJAX. Les principes clairs Don’t repeat yourself et Convention over configuration fournissent la base d’un code net et léger, facile à gérer et à personnaliser, et qui s’écrit facilement. La configuration ne pose par conséquent aucun problème, dans la mesure où Ruby offre au programmeur toute la liberté dont il a besoin. C’est ce qui rend le framework facile à utiliser tant par des débutants que par des programmeurs confirmés, qui travaillaient jusqu’alors avec d’autres langages de script. Dans les deux cas, un temps d’adaptation sera toutefois nécessaire.

Grâce au système d‘échafaudage, il est possible de réaliser rapidement des prototypes de projets Web planifiés. C’est sans doute l’un des atouts principaux du framework Ruby. Grâce à l’environnement incluant des tests, il est possible de tester régulièrement l’application en cours de développement pour rechercher d’éventuelles erreurs. Ruby on Rails est également équipée pour les applications complexes. Grâce aux extensions RubyGems, qui sont comprises dans le framework, il est possible d’ajouter facilement des interfaces, des bibliothèques, ainsi que des fonctionnalités ou des options visuelles. Puisque Ruby et le framework RoR sont soumis à la licence BSD gratuite, vous ne payez que les frais d’hébergement de votre projet Web.

Il ne faut toutefois pas imaginer qu’aucune connaissance en programmation n’est nécessaire pour utiliser Ruby on Rails. Le script ne s’écrit évidemment pas tout seul comme le prétend le développeur de la blague ci-dessus. En ce qui concerne la rapidité, les applications RoR ne peuvent pas totalement rivaliser avec la concurrence. Le code n’est pas exécuté avant que les utilisateurs n’accèdent au contenu en question : c’est la raison pour laquelle les requêtes mettent logiquement un peu plus longtemps à aboutir qu’avec des lignes de code précompilé.

Si vous souhaitez organiser votre application avec système de gestion de contenu tel que Drupal, Joomla ou WordPress, le framework Rails n’est pas nécessaire. Ces exemples, comme beaucoup d’autres plateformes, sont basés sur PHP. Il existe toutefois des solutions CMS basées sur Ruby on Rails comme Alchemy CMS. Il est difficile de prévoir si le développement de RoR est susceptible de menacer les leaders du marché, tels que PHP, Java et Python, mais les avantages et la popularité croissante du framework Ruby parlent d’eux-mêmes.