Pourquoi Rails?

Lorsque vous apprenez un nouveau cadre, votre choix est extrêmement important. Il faut un nombre incalculable d'heures et d'efforts pour devenir compétent et apprendre toutes les meilleures pratiques, même pour les développeurs expérimentés..

C'est pourquoi il est nécessaire de comprendre les particularités d'un cadre le plus tôt possible afin de déterminer si c'est la bonne solution au problème que vous essayez de résoudre. Dans cet article, je vais couvrir de nombreux domaines clés du cadre Ruby on Rails et expliquer pourquoi je considère que c'est un excellent choix pour les développeurs Web..


Un peu d'histoire

Ruby on Rails a été extrait de l’application de gestion de projet Basecamp.

Ruby on Rails a été open source en 2004, par David Heinemeier Hannson, après avoir été extrait de l'application de gestion de projet Basecamp..

Il est basé sur le langage de programmation Ruby, et la version stable actuelle est la 3.2 - avec la 4.0 à portée de main!

RoR est une pile d'applications Web complète. à partir de la version 3.1, il comprend également des installations et des bibliothèques pour la gestion du code frontal, prenant en charge Sass et CoffeeScript dès la livraison, sans outil externe pour gérer le processus de compilation. Le processus d'opinion est le nom du jeu avec Rails.

Pour le développement, il intègre son propre serveur Web, de sorte que vous n'avez pas besoin d'installer de logiciel supplémentaire en dehors d'une installation Ruby fonctionnelle..


Pourquoi l'apprendre?

Il existe d'innombrables raisons pour apprendre Rails, qu'elles soient techniques, commerciales ou productives. Nous allons aborder chacun un par un.

La technologie

Ruby a été conçu pour être un "plaisir à utiliser".

Comme son nom l'indique, Rails est basé sur le langage Ruby. Inventé en 1993 et ​​publié pour la première fois en 1995 par Yukihiro Matsumoto (connu simplement sous le nom de "Matz"), Ruby est un langage interprété orienté objet qui présente une syntaxe fortement inspirée de Perl et Lisp. Depuis sa création, Ruby a été conçu pour être un "plaisir à utiliser" - ce qui signifie un accent particulier mis sur la lisibilité et l'élégance..

Langage de niveau supérieur, Ruby est extrêmement puissant et polyvalent, tout en maintenant un bon équilibre entre clarté et performance (en gardant à l’esprit que le langage est toujours interprété et dynamique)..

L'interprète original Ruby (l'interprète Ruby de Matz, abrégé en IRM) est écrit en C, mais ce n'est pas le seul disponible à ce jour (quelques alternatives notables sont JRuby, qui s'exécute sur la JVM, et Rubinius)..

Ruby contient plusieurs bibliothèques livrées avec son noyau, y compris une très puissante unité de test, appelée Minitest (avant Ruby 1.9, Ruby utilisait TestUnit)..

Rails est un moyen populaire de s’impliquer avec Ruby. Il n’est donc pas rare de trouver aujourd’hui des personnes (dont moi-même) dont le premier contact avec Ruby s’est fait par le biais de Rails..

Apprenez les bases de Ruby avec Tuts + Premium.

Structure

Rails a une forte opinion sur les décisions architecturales

Rails est un framework MVC indépendant de la base de données qui opte pour une convention plutôt que pour une configuration, ce qui signifie qu'il est très avisé en matière de décisions architecturales, de conventions de dénomination, de chemins et de modèles..

Plus en détail:

  • MVC signifie qu'il suit le paradigme Model-View-Controller (Contrôleur de vue Modèle-Vue), de sorte que vous puissiez clairement séparer les préoccupations lors du développement d'une application. Cela permet de regrouper votre logique métier centrale en un seul endroit, en évitant les doublons et en facilitant la maintenance..

  • Il suit une approche RESTful, orientée ressources, ce qui signifie qu'il vous encourage à réfléchir à votre logique métier du point de vue des données, en exposant les ressources aux points finaux qui exécutent des actions CRUD. Par exemple, vous connecter à un site peut être considéré comme "créer une session"; se déconnecter en tant que 'détruire une session'. Cette approche prend un certain temps pour s'y habituer, mais une fois que vous avez adopté cet état d'esprit, elle aide à garder vos interfaces cohérentes et prévisibles par les autres développeurs. Les applications Rails ont tendance à tourner autour de modèles, qui gèrent la persistance des données.

  • Il utilise Bundler comme outil de gestion des dépendances, exploitant la puissance de la communauté Rubygems. Cela garantit une approche cohérente pour l'ajout de fonctionnalités tierces à une application, avec un format explicite précisant les bibliothèques dont nous avons besoin et les versions, y compris la résolution des dépendances imbriquées..

  • Il peut prendre en charge une large gamme de bases de données, avec SQLite par défaut (bon pour le développement) et MysQL et PostgreSQL en tant que premier choix pour la production. MongoDB peut également être intégré avec un effort minimal.

  • Convention signifie que les noms, les chemins et les modèles sont généralement prévisibles et partagés par les autres développeurs de Rails. Cela garantit une courbe d'apprentissage plus facile, axée sur la logique métier de l'application, une maintenance simplifiée et moins de documentation..

  • Il est facile de tester, avec des outils qui s'intègrent également au framework pour les tests unitaires et l'intégration (avec support JavaScript). De plus, la communauté Ruby elle-même préconise fortement le développement piloté par les tests. Un bon développeur Rails est donc probablement assez expérimenté dans les tests..

  • Une application Rails peut être facilement déployée sur des infrastructures cloud, telles que Heroku, ou directement sur des serveurs privés (elle fonctionne très bien sur Ubuntu Linux, par exemple)..

CARACTERISTIQUES de base

Voici un aperçu de ce que Rails peut faire par défaut, ainsi que des exemples de code. Veuillez noter que, même si vous n'avez jamais travaillé avec Rails auparavant ou que vous ne connaissez pas encore Ruby, cela ne devrait pas vous empêcher de les comprendre, car ils sont assez lisibles..

  • Prise en charge de la définition du modèle de données par le biais de migrations, c'est-à-dire des instructions agnostiques de base de données répétables et réversibles, qui manipulent la structure de la base de données. Considérez la migration suivante:

    classe CreateEvents < ActiveRecord::Migration def change create_table :events do |t| t.string :title t.date :start_date t.date :end_date t.boolean :live, :default => false t.timestamps fin fin fin

    Cette migration crée un événements table, avec quelques données de base, comme un Titre, et utilise des types de données spécifiques mappés à des types de colonne spécifiques dans la base de données sous-jacente. Par exemple, par défaut, chaîne utilise un VARCHAR (255) colonne, si vous utilisez MySQL. Cette migration peut être écrite manuellement à partir de rien, ou générée à partir de la ligne de commande, puis modifiée avant d'être exécutée..

  • Interface de modèle de base de données agnostique pour les actions CRUD. Voici quelques exemples, donnés un Nouvelles modèle:

    news = News.new (title: 'Sample news') # => renvoie une instance de news non enregistrée dans la base de données news.save # => exécute une requête d'insertion et met à jour l'instance avec l'ID renvoyé de la base de données news.title. = 'Sample news news' # => définit le titre sur la nouvelle valeur sans enregistrer dans la base de données news.save # => exécute une requête de mise à jour pour cet élément news.destroy # => exécute une requête de suppression pour cet élément

    De plus, Rails fournit une interface simple pour effectuer des requêtes de sélection, y compris des jointures entre modèles..

    News.where (published: true) .order ('created_at DESC'). Limit (5) # => produit 'SELECT * à partir de nouvelles où publié = 1 commande de created_at DESC limit 5'
  • Support pour les validations; un un événement modèle peut toujours nécessiter la présence d’un titre unique. Dans ce cas, il est possible d’exprimer clairement ces exigences dans le un événement classe:

    événement de classe < ActiveRecord::Base validates :title, :presence => true,: unicité => true end

    Cette fonctionnalité garantit qu'aucun enregistrement non valide n'est enregistré dans la base de données et fournit également toutes les liaisons nécessaires pour afficher les erreurs de validation à l'utilisateur (par exemple, dans un formulaire)..

  • Session et cookies avec de simples assistants pour définir des valeurs, les récupérer et les supprimer, avec signature transparente.

  • Protection contre la falsification de formulaires, de sorte que tout formulaire généré via Rails soit automatiquement signé avec un jeton garantissant son authenticité..

  • Stratégie de protection XSS agressive activée par défaut, de sorte que tout élément de formulaire que vous utilisez soit protégé par défaut, à moins que vous ne le mettiez explicitement sur la liste blanche (faites attention quand vous le faites!).

  • Gestion simple pour OBTENIR et POSTER données, accessibles via un simple hachage disponible dans chaque action du contrôleur.

  • Des liaisons simples pour connecter des contrôleurs, des modèles et des vues, avec des règles claires et conventionnelles qui simplifient la gestion de fichiers et le code. Par exemple, considérons le contrôleur suivant responsable du rendu d’une page de liste de discussion au http://example.com/news:

    classe NewsController < ApplicationController def index end end

    Même sans écrire de code pour définir quoi indice fait, Rails fournit un comportement par défaut, qui consiste à rendre le app / views / news / index.html.erb vue. Cela réduit le besoin de code passe-partout, étant donné que, la plupart du temps, il est simplement nécessaire de remplacer le comportement, quand il est non conventionnel..

  • Intégration avec des services externes; Rails offre un riche écosystème d'applications que vous pouvez utiliser pour surveiller, maintenir et améliorer votre application (certaines d'entre elles fonctionnent également avec d'autres frameworks). New Relic aide à surveiller les performances, Airbrake Bug Tracker collecte des exceptions pour informer l'équipe de développement, Code Climate analyse votre base de code pour en déterminer la qualité, la complexité et la duplication. Tddium et TravisCI peuvent exécuter votre suite de tests à distance par rapport à différentes versions de Ruby..

  • Comme indiqué précédemment, Rails offre également un environnement intégré pour travailler avec Coffeescript et Sass, avec une compilation transparente dans le développement et le prétraitement et le contournement du cache pour le déploiement, de sorte que votre application de production serve des fichiers uniques et minifiés avec une signature dans le nom du fichier. De cette façon, vous pouvez être absolument certain que tout navigateur chargera et mettra toujours en mémoire cache la dernière version du fichier..


Valeur commerciale

Vous êtes-vous déjà demandé pourquoi Rails est le premier choix de nombreuses startups Web? Il y a deux raisons principales:

  • Il vous permet de travailler sur des fonctionnalités avec un passe-partout minimal, en supprimant une grande partie du travail non lié aux affaires du processus de développement. Cela se traduit par une vitesse accrue lors du développement et du déploiement de nouvelles fonctionnalités, ce qui est essentiel pour comprendre si le produit est solide..

  • La structure de Rails facilite l’adaptation au changement. Cela est certainement vrai pour de nombreux frameworks MVC, même si Rails est particulièrement doué pour restructurer le flux de vos applications, en réutilisant les composants de manière simple..

Il est important de se rappeler que, fréquemment, le temps de développement est plus coûteux qu'un serveur supplémentaire..

Il y a toujours une conversation en cours sur les performances de Rails et sur la manière dont elles peuvent devenir un goulet d'étranglement lorsque vous obtenez des milliers de visites à la minute. Le problème est que pour atteindre ce niveau de trafic, il faut un effort énorme. La vérité est la suivante: 9 fois sur 10, l’évolutivité est un problème auquel de nombreuses entreprises n’ont jamais à faire face. Pour eux, la capacité d'effectuer des modifications, une facilité d'entretien et de prévisibilité sont beaucoup plus utiles..

En outre, il est important de noter que le temps de développement est souvent plus coûteux qu'un serveur supplémentaire. Un framework tel que Rails est souvent préféré, car même s'il nécessite un matériel plus puissant, il reste rentable dans d'autres domaines..

Cela ne signifie pas que vous ne devriez pas vous soucier des performances de votre code ni vous soucier de sujets tels que la mise en cache et l'optimisation des requêtes. Au lieu de cela, cela implique de prendre en compte l’ensemble des modifications matérielles et logicielles que vous pouvez apporter; Parfois, il est judicieux de postposer une partie du travail axée sur les performances et de disposer temporairement d'un matériel plus puissant pour continuer à travailler sur des fonctionnalités importantes..


Étendre le cadre

Les rails peuvent facilement être étendus avec une grande variété de bibliothèques externes, distribuées par Rubygems. La plupart du temps, toutes les fonctionnalités que vous avez besoin de créer sont déjà offertes via un joyau. Cela ne signifie pas pour autant que l’ajout de pierres précieuses soit la solution idéale; chaque dépendance à une tierce partie que vous ajoutez à une application devient un facteur de risque.

Parfois, il est préférable de lancer votre propre version avec du code personnalisé.

Cela dit, vous ne devriez pas réinventer la roue. De nombreuses applications Rails utilisent les mêmes joyaux pour fournir des fonctionnalités spécifiques. cela peut être considéré comme un avantage. N'oubliez pas: l'utilisation étendue se traduit par des tests étendus. Il est donc considéré comme une pratique sûre d'utiliser certains joyaux bien connus pour accomplir des tâches clés. Voici quelques exemples:

  • Concevoir, pour l'inscription, la connexion et la gestion des utilisateurs
  • Formulaire simple, pour une génération de balisage de formulaire facile et personnalisable
  • Kaminari, pour la pagination
  • ActiveAdmin, pour les pages d'administration rapide

Cette liste pourrait facilement être longue, mais le fait est que Rails exploite la modularité d'une approche basée sur Rubygems et peut considérablement accélérer le développement, en mettant l'accent sur les caractéristiques de construction qui importent pour le produit sur lequel vous travaillez, plutôt que sur les bases standard..


Pourquoi j'aime travailler avec des rails

Je peux me concentrer sur ce qui compte pour les clients sans compromettre la qualité du code..

Il y a environ deux ans, je travaillais dans un rôle de marketing / gestion de produits (développement web en tant que passe-temps); cela signifiait se concentrer sur les caractéristiques des produits, leur valeur commerciale et les coûts associés à leur développement. Lorsque j'ai décidé de changer de carrière, Rails 3.0 venait juste d'être publié. J'ai passé un après-midi à regarder des vidéos et à lire des tutoriels. J'ai rapidement décidé que Rails était ce sur quoi je voulais concentrer mes efforts..

La raison - et cela recoupe quelque peu ce dont nous avons déjà discuté - est que je pouvais voir une approche pratique dans le cadre, un objectif clair pour être productif et se concentrer sur le produit et son développement. Je pourrais faire les choses en peu de temps. Après quelques mois d'auto-formation intensive à travers divers tutoriels Web et quelques exemples d'applications, j'ai postulé à mon poste actuel en tant que développeur Rails chez New Bamboo..

J'aime travailler avec Rails tous les jours, car je peux me concentrer sur ce qui compte pour les clients sans compromettre la qualité du code. Pour moi, c'est le point de départ idéal pour la plupart des applications Web.

Cela ne résout pas tous les problèmes que vous rencontrerez lors de la création d'applications Web volumineuses. Parfois, vous voyez clairement que Rails n'est pas adapté à un type de service spécifique, mais c'est le moment de scinder l'architecture en applications plus petites..


Conclusion

Rails est un cadre puissant qui peut vous aider à devenir plus productif et plus confiant lorsque vous travaillez sur des projets complexes. Cela est possible grâce à ses conventions solides et à sa structure solide. Les grandes entreprises, telles que 37 Signals, Pivotal Labs, Groupon (ou même Twitter dans le passé) ont choisi Rails comme architecture de base pour leurs applications principales. Il y a une raison pour laquelle!

Prêt à démarrer Ruby on Rails?