Les 10 avantages de Ruby on Rails pour apprendre à bien coder

Cet article est le deuxième volet d’une série s’articles sur les avantages de l’utilisation de Ruby on Rails pour développer une application Web. Le premier volet parlait des avantages exclusifs de Ruby.

Nous concluions l’article précédent par le fait que l’une des forces principales de Ruby est la présence du framework Ruby on Rails. Ruby on Rails, comme tout framework, est une série d’outils et de fonctions pré-écrites qui permettent de faciliter le développement, en l’occurrence web ici.

Bien entendu, Ruby on Rails n’est pas le seul framework de développement web sur le marché : en Ruby il y a aussi Sinatra (le plus léger), Padrino (l’intermédiaire);  en Python Django; en Php, Zend Framework, Symfony, CakePHP et de nombreux autres; en javascript avec node.js, Express.js, Compound.js ou Sails.js, Derby.js ou Meteor.js pour ne citer qu’eux; en Java, Spring, JSF, Struts, Google Web Toolkit, Grails, etc. ; en Scala Play (marche aussi en Java); et beaucoup d’autres…

Si certains framework précédemment cités peuvent être plus adaptés pour des applications particulières, Rails est sans doute l’un des premiers frameworks auquel vous devriez vous former car il apporte avec lui des méthodes et des bonnes pratiques de développement web que nous allons lister ici.

1. MVC : Model View Controller

Dans un projet web, a fortiori d’envergure, il est primordial d’organiser le code. La logique MVC, en français Modèle, Vue Contrôleur est à ce titre très utilisée dans les différents framework, en particulier Rails.

Pour simplifier, les modèles permettent de gérer l’interaction avec les données, les contrôleurs les différentes actions que l’on peut faire avec ses données et les vues gèrent l’affichage. Par exemple, si nous avions une application web qui liste les différents frameworks, il y aura un modèle Framework qui définit ce que c’est qu’un framework et qui fait le lien avec la base de donnée où ces derniers sont stockés, un contrôleur qui possède plusieurs actions (créer, mettre à jour, supprimer, afficher la liste, afficher un en particulier, notamment) faisant le lien entre le modèle et les vues, et les vues, c’est-à-dire les pages telles qu’elles s’affichent dans votre navigateur (formulaire pour la création et l’édition, la liste de tous les framework, et une page de détails sur chacun des framwork). Pour aller plus loin, j’ai listé ici les principaux tutoriels.

Il y a plusieurs avantages à la structure MVC :

  • Le MVC se marie très bien avec la programmation orientée objet de Ruby et rend le code très lisible : un nouveau développeur comprend ce que fait l’application en quelques minutes.
  • Le découplage entre le design et la logique du site facilite le travail en équipe : pendant que les développeurs front-end intègrent le design dans les vues, les développeurs back-end travaillent sur les modèles et les contrôleurs, par exemple.
  • Le maintient du code notamment lorsque votre application se complexifie

2. ORM (Object-Relational Mapping)

L’ORM est le lien entre les modèles et la base de donnée. Par défaut pour des bases SQL (comme SQLite, PostgreSQL, MySQL), l’ORM de Rails est ActiveRecord. La première force d’ActiveRecord est que les relations entre les objets sont prises en charge par Rails ainsi que les requêtes de base (Insert, Select, Update, Delete). En gros, à moins de vouloir améliorer la performance de votre application (ce qui peut être nécessaire une fois que vous commencez à avoir pas mal de trafic), vous n’écrirez plus de SQL. Fini les requêtes complexes avec les INNER JOIN, LEFT JOIN, etc… Par exemple, si vous avez une table Firms et une table Employees et que vous avez la relation Firm HAS MANY Employees, il vous suffit de faire Firm.first.employees pour avoir la liste des employés de la première firme…

La création et la mise à jour de la base de donnée est gérée par les migrations, ce qui permet d’avoir beaucoup de souplesse dans la conception de l’application. Il n’est plus nécessaire de prévoir la structure globale de données tout de suite, car il est très aisé d’ajouter/de supprimer une colonne ou une table dans la base de donnée. Comme nous le verrons dans un prochain article, cette logique de migrations simplifie grandement la mise en place du MVP (Minimum Viable Product, produit minium viable), de Lean Startup et c’est l’une des raisons pour lesquelles Rails est très utilisé en Startup. Si vous travaillez pour un client, cela vous aidera à concevoir avec lui l’application car pour pourrez rapidement faire un prototype fonctionnel.

Il existe d’autres ORM si vous utilisez d’autres bases de données, par exemple NoSQL (ex : Mongoid pour MongoDB).

3. DRY : Don’t Repeat Yourself

En programmation, il faut le plus possible éviter de réécrire le même code, car la maintenance devient dès lors très compliquée et source d’erreurs. Imaginez devoir changer toutes les pages du site si vous ajoutez un élément au menu…

La logique MVC, la notion de layout pour le design (en gros le layout est la partie commune du design, par exemple le header et le footer) et de rendering pour les éléments de page vous permettent de décomposer la page en modules et de n’écrire le code qu’une seule fois.

4. RESTful Architecture

C’est sans doute l’une des principales forces de Rails. Rails vous oblige à utiliser au mieux le protocole HTTP, sur lequel repose la navigation web. En gros, il y a 4/5 types de requêtes principales en HTTP : GET (afficher une page), POST (poster un formulaire par exemple), PATCH (modifier partiellement une ressource, ou PUT qui modifie entièrement la ressource) et DELETE (supprimer une ressource). Suite à chaque requête, le serveur envoie une réponse.

Les contrôleurs et votre application sont conçues selon le paradigme REST, qui sans entrer dans les détails techniques, permet de découpler ce qu’il se passe chez le client (navigateur web) et sur le serveur, et permet de gagner en performance car le serveur n’a pas besoin de maintenir la connexion avec le client et peut donc répondre à d’autres requêtes, et la mise ne cache est facilité. De plus, L’URL (ou l’URI plus précisément) est remise au centre de l’interaction client-serveur.

Pour aller plus loin, lisez l’excellent livre : RESTful Web APIs, de L.Richardson, M.Amundsen et S. Ruby

En effet, il y a 7 actions de base dans chaque contrôleur Rails, par exemple pour le contrôleur employees_controlleur :

  • SHOW : affiche un employé en particulier (requête HTTP GET http://monsite.com/employees/1)
  • INDEX : affiche la liste de tous les employés (requête HTTP GET http://monsite.com/employees)
  • NEW : affiche le formulaire pour créer un nouvel employé (GET http://monsite.com/employees/new)
  • CREATE : une fois le précédent formulaire complété, créé l’employé (POST http://monsite.com/employees)
  • EDIT : affiche le formulaire d’édition d’un employé (GET http://monsite.com/employees/1/edit)
  • UPDATE : vous mettez à jour cet employé (PUT et PATCH en rails 4 http://monsite.com/employees/1)
  • DESTROY : vous supprimez cet employé (DELETE http://monsite.com/employees/1)

L’architecture REST s’est beaucoup développée avec le web 2.0 et l’utilisation de plus en plus fréquente des requêtes asynchrones en javascript (le fameux AJAX) qui permet d’avoir un site qui se met à jour sans recharger la page (par exemple les nouveaux posts sur Facebook).

Dans la pratique, votre application ne sera jamais à 100% RESTful, notamment si vous utilisez les sessions pour maintenir la connexion d’un utilisateur sur son compte membre ou des Cookies. De plus, l’architecture REST n’est aujourd’hui plus forcément la plus adaptée sur le mobile, car elle demande de nombreux aller-retours entre le client et le serveur, induisant ainsi un temps de latence et une augmentation de consommation de la batterie.

5. Tests

En Rails, il est très facile de tester son application. Rails offre une interface pour réaliser les différents tests, du test unitaire, au test d’intégration en passant par le test fonctionnel. Plus d’infos dans leur excellente documentation ici (en anglais).

6. Sécurité

En développement web, il faut être particulièrement vigilant sur les problèmes de sécurité. Il existe des failles classiques comme l’injection SQL ou le Cross Site Request Forgery (CRSF). En suivant la méthodologie prônée par Ruby on Rails ici, vous devriez vous prémunir contre 90% des attaques. Vous ne serez en revanche jamais à l’abris à 100% des hackers les plus aguerris ou des organisations gouvernementales comme la DGSE en France ou de la NSA aux USA… D’ailleurs, Rails se met régulièrement à jour dès qu’une faille de sécurité est détectée.

7. Environnements de développement, de test, de production

Rails découple les différents environnements que vous utiliserez.

  • L’environnement de développement est optimisé pour le déboggage et vous permet notamment de voir en tant réel, sur votre navigateur les modifications effectuées.
  • L’environnement de test est optimisé pour les différents tests unitaires, d’intégration et fonctionnels.
  • L’environnement de production offre des performances et une sécurité optimisés.

De plus, avec le Bundler (cf article précédent pour plus d’infos), vous gérez toutes vos dépendances tierces et pouvez très facilement créer un nouvel environnement et migrer votre application sur un nouveau serveur ou un nouvel ordinateur.

8. L’utilisation des lignes de commandes

Rails vous force à utiliser les lignes de commandes pour créer et gérer votre application. La plupart des services liés à Rails, comme l’hébergeur Heroku, vous force également à utiliser les lignes de commandes et la connexion ssh.

C’est sans doute le point le plus exigeant pour les débutants…

Néanmoins, si cela vous changera beaucoup du serveur FTP et du client Filezilla pour gérer votre blog WordPress sur OVH, c’est pour votre plus grand bien car vous gagnerez en productivité et en maîtrise de ce que vous faîtes.

9. Contrôles de version et Git

La plupart des Gems en Ruby sont hébergés sur Github et vous aurez du mal à maîtriser Rails sans vous y connaître un minimum le protocole de gestion décentralisée Git. L’hébergeur Heroku vous demande par exemple d’utiliser Git pour mettre en ligne votre application… C’est également pour votre plus grand bien car Git, à l’instar de SVN, est un outil très puissant pour gérer les différentes versions de votre code et travailler en équipe.

10. Conclusion : cache, performance, autres bonnes pratiques

En somme, les développeurs en Rails adorent la nouveauté et sont très au fait des dernières bonnes pratiques de développement. En particulier, vous aurez une documentation abondante pour maîtriser, sur Ruby on Rails, les concept suivants (excusez-moi pour le « franglais ») : la mise ne cache, les worker queues, les thread et le process management, les base de données no-sql, l’optimisation du filesystem et du kernel, la configuration d’un proxy, la redondance et le monitoring…

Nous verrons dans un prochain article comment Rails vous permet d’augmenter votre productivité.

 

Les 10 avantages de Ruby on Rails pour apprendre à bien coder

2 réflexions au sujet de « Les 10 avantages de Ruby on Rails pour apprendre à bien coder »

  1. anonyme dit :

    Bonjour!
    On peut faire le même constat pour n’importe quel framework MVC de n’importe quel autre langage. Le premier qui me vient : spring en java. Je dirai même que les particularités de rails sont les plus gros inconvénients pour moi.
    1. La dépendance avec Git : je prefère un langage qui nous permette d’utiliser ce qu’on veut pour gérer nos version. Pourquoi pas mercurial? Or c’est la vraie galère pour construire un gem avec autre chose que Git.
    2. L’héritage du modèle avec ActiveRecord : rien de mieux pour isoler les couches d’accès aux données!! Le repository est appelé directement avec le nom de la classe du modèle : youhou c’est super simple mais alors hyper bien architecturée!!

    Pour fnir je dirais que rails veut tellement tout simplifier qu’au final, il ne laisse plus aucune liberté aux développeurs c’est comme un chef de projet de plus au dessus de nous qui nous impose quels technos et quelle archi utiliser. Le problème certains choix faits par rails pour nous ne peuvent pas être adaptés pour tous les projets.

    Voilou!

    1. admin dit :

      Bonjour, merci pour ton commentaire et je suis tout à fait d’accord avec toi!

      Je suis un grand fan de Java et de Spring en particulier et Gradle est super. Je pense que Rails est excellent pour faire un site de type CRUD assez rapidement. La contre-partie est en effet la lourdeur du framework… Une librairie comme Sinatra est intéressante pour avoir une web app sans la lourdeur de Rails en Ruby… Concernant ActiveRecord, c’est un peu le problèmes de tous les ORM. La lisibilité du code est améliorée au détriment souvent de la souplesse et de la performance. J’aime bien personnellement écrire mes propres requêtes SQL afin de tenir compte des index que j’ai créé.

      Maintenant, pour des besoins plus particuliers de backend, il est clair que des langages comme Java, Scala, C++, .Net, Go seront beaucoup plus adaptés. Par exemple s’il l’ont veut utiliser WebSocket, un système de Queues AMQP pour des base de données un peu plus variées tout en ayant une très bonne maîtrise de ce qui se passe sous le capot.

      En effet, un language compilé sera bien plus performant et le code sera beaucoup plus aisé à maintenir…

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *