Il y a un mois environ, j’ai eu le plaisir de présenter Ruby on Rails avec Maxime Menant dans le cadre des SophiaConf 2010. Comme nous avions beaucoup de choses à raconter, nous avons décidé de ne pas faire une conférence mais deux, d’une durée d’une heure.

La première, que j’ai présentée, s’adresse principalement aux entrepreneurs, chefs de projet, directeurs techniques… Cette conférence explique pourquoi Ruby on Rails peut-être un très bon choix technologique, pourquoi ce choix peut faire gagner du temps et de l’argent…

La deuxième, présentée par Maxime, avait pour but de démontrer la puissance de cette technologie aux développeurs.

Dans ce billet, je vais présenter la première conférence. Je parlerai de la deuxième dans un autre billet que je publierai prochainement.

Ruby on Rails d’un point de vue non technique

[slideshare id=4731822&doc=pourquoirailsestgenial-100711194243-phpapp01]

Avant de montrer pourquoi Ruby on Rails est un bon framework, il est important de réfléchir à ce qu’est un framework de qualité. Pour ce faire, j’ai interrogé nombre de mes collègues, followers, amis ingénieurs…

Grâce à leurs réponses, j’ai pu composer une liste des principaux critères qui définissent ce qu’est un bon framework, en voici quelques-uns : Productivité, Agile, Hébergement, Déploiement, Performance, Licence, Evolution, Recrutement ,Actif, Confort, Coût, Bonnes pratiques, Communauté, Architecture, Sécurité …

Avant de voir comment Rails répond à ces différents critères, je vous propose une petit piqûre de rappel.

Ruby, le langage

Ruby est un langage de programmation interprété, orienté objet et multi-paradigme. Il est multiplate-forme et open source. Il vu la première fois le jour en 1995 grâce à son créateur Yukihiro Matsumoto (aka “Matz”).

Il existe plusieurs implémentations de machines virtuelles Ruby, chacune ayant ses spécificités :

MRI : Il s’agit de la machine virtuelle standard.

: Il s’agit de la machine virtuelle standard. JRuby : Cette implémentation de l’interpréteur Ruby repose sur la JVM (la machine virtuelle Java). Elle permet d’utiliser du code Java en Ruby et inversement. Elle est aujourd’hui principalement maintenue par Engine Yard.

: Cette implémentation de l’interpréteur Ruby repose sur la JVM (la machine virtuelle Java). Elle permet d’utiliser du code Java en Ruby et inversement. Elle est aujourd’hui principalement maintenue par Engine Yard. MacRuby : Cette implémentation est le pendant de JRuby mais avec l’Objective-C. Elle est aujourd’hui maintenue par Apple.

: Cette implémentation est le pendant de JRuby mais avec l’Objective-C. Elle est aujourd’hui maintenue par Apple. Rubinius : Il s’agit en quelque sorte de l’avenir de la machine virtuelle Ruby. Toujours en développement, elle devrait apporter d’importantes améliorations en terme de performance et de gestion de la mémoire.

Quelques chiffres intéressants :

+14 000 gems (bibliothèques packagées et faciles à utiliser)

+185 000 projets Ruby sur Github

10eme position au classement TIOBE (juin 2009)

Ruby on Rails, le framework web

Ruby on Rails, également appelé RoR ou Rails, est un framework web open source écrit en Ruby. Il a été extrait de Basecamp en 2004, un outil de gestion de projets développé par David Heinemeier Hansson (aka “DHH”). Rails est basé sur deux principes fondamentaux :

DRY (Don’t Repeat Yourself) : Tenter autant que possible de n’avoir des éléments de l’application qu’à un seul endroit. L’architecture MVC et la métaprogrammation en Ruby rendent cela possible.

: Tenter autant que possible de n’avoir des éléments de l’application qu’à un seul endroit. L’architecture MVC et la métaprogrammation en Ruby rendent cela possible. Convention over Conﬁguration : Il est inutile de préciser des détails lorsqu’ils respectent des conventions établies. Rails exploite cela en proposant des comportements par défaut pour la plupart de ses fonctionnalités.

Pourquoi Ruby on Rails est génial?

Ce framemork est un outil très puissant. Il a été pensé afin d’être élégant, efficace, scalable, sûr, agile… Voici pour moi quels sont les principaux éléments qui rendent ce framework si différent :

La structure : Rails impose une certaine structure au projet. De ce fait, lorsque vous commencez un nouveau projet, vous n’avez pas à vous casser la tête pour savoir comment l’organiser. De plus, comme chaque application Rails possède la même structure, lorsque qu’un développeur rejoint le projet il est très rapidement opérationnel car il n’a pas à étudier comment le projet est organisé.

: Rails impose une certaine structure au projet. De ce fait, lorsque vous commencez un nouveau projet, vous n’avez pas à vous casser la tête pour savoir comment l’organiser. De plus, comme chaque application Rails possède la même structure, lorsque qu’un développeur rejoint le projet il est très rapidement opérationnel car il n’a pas à étudier comment le projet est organisé. Les migrations : Rails permet grâce aux migrations de faire évoluer la structure et le contenu de la base de données de manière agile, le tout en restant indépendant du type de base de données (MySQL, Postgres, SQLite, Oracle…).

: Rails permet grâce aux migrations de faire évoluer la structure et le contenu de la base de données de manière agile, le tout en restant indépendant du type de base de données (MySQL, Postgres, SQLite, Oracle…). Active Record : Il s’agit de la partie de RoR offrant une abstraction sur la base de données. Active Record est un ORM permettant de manipuler les données de la base très simplement car il profite de la puissance de Ruby.

: Il s’agit de la partie de RoR offrant une abstraction sur la base de données. Active Record est un ORM permettant de manipuler les données de la base très simplement car il profite de la puissance de Ruby. Scaffold : Rails peut, grâce au scaffolding, générer tout le code nécessaire pour faire un CRUD (Create, Read, Update, Delete) autour d’une entité. Ceci rend Rails très efficace pour le prototypage d’applications.

: Rails peut, grâce au scaffolding, générer tout le code nécessaire pour faire un CRUD (Create, Read, Update, Delete) autour d’une entité. Ceci rend Rails très efficace pour le prototypage d’applications. Les environnements : Lorsque vous exécutez une application Rails, elle est exécutée dans un environnement spécifique. Par défaut, une application Rails possède 3 environnements : development, test et production. Chaque environnement possède ses propres paramètres de configuration, ses propres logs et permet de lancer des gems supplémentaires (par exemple des bibliothèques de test).

: Lorsque vous exécutez une application Rails, elle est exécutée dans un environnement spécifique. Par défaut, une application Rails possède 3 environnements : development, test et production. Chaque environnement possède ses propres paramètres de configuration, ses propres logs et permet de lancer des gems supplémentaires (par exemple des bibliothèques de test). La sécurité : Rails propose, par défaut, des systèmes de protection aux attaques les plus classiques (ex : CSRF, XSS, …). Il suffit de rester dans les rails et tout ira bien :)

: Rails propose, par défaut, des systèmes de protection aux attaques les plus classiques (ex : CSRF, XSS, …). Il suffit de rester dans les rails et tout ira bien :) Javascript : Une biblothèque JS est disponible par défaut dans Rails, Prototype + Scriptaculous. Il est possible simplement d’utiliser JQuery à la place. La force de Rails est de proposer d’implémenter des vues en RJS. Le RJS est du code Ruby qui génère du javascript, il peut être utilisé pour implémenter des vues.

: Une biblothèque JS est disponible par défaut dans Rails, Prototype + Scriptaculous. Il est possible simplement d’utiliser JQuery à la place. La force de Rails est de proposer d’implémenter des vues en RJS. Le RJS est du code Ruby qui génère du javascript, il peut être utilisé pour implémenter des vues. Cache : Evidement, Rails permet de mettre du cache un peu partout (page, partial, modèle, action…)

: Evidement, Rails permet de mettre du cache un peu partout (page, partial, modèle, action…) Test : Rails est livré avec tout ce qu’il faut pour rédiger des tests proprement. De plus, à chaque fois que vous créez un contrôleur ou un modèle, Rails vous créera automatiquement le squelette du test associé!

Cette liste est loin d’être exhaustive, mais elle permet déjà d’avoir un bon aperçu de ce qui rend Rails si unique.

Ruby on Rails 3

Ruby on Rails est un framework qui évolue vite. La version 3 de cet innovant framework devrait voir le voir le jour dans les semaines qui arrivent.

Rails 3 est en fait l’union de Merb et Rails 2. Merb est un framework web léger écrit en Ruby. Il privilégie la performance au confort alors que Rails 2 propose plutôt un compromis entre les deux. Rails 3 est modulaire. Vous pouvez ajouter/supprimer des couches d’abstraction en fonction des besoins en performance que vous avez.

Rails 3 arrive avec une pléiade de nouveautés : compatibilité HTML 5, Javascript non-obstrusif, Bundler (nouveau gestionnaire de dépendance des gems), réécriture de la partie modèle…

Une communauté prolifique

Ruby étant un langage de haut niveau, c’est-à-dire qu’il propose une forte abstraction, permet de développer très rapidement. De ce fait, il existe un très grande quantité de bibliothèques open source que l’on peut utiliser librement dans tout projet Ruby.

Dans le monde Rails, il y a des plugins pour tout : authentiﬁcation, tâches de fond, upload de ﬁchiers, paiement en ligne, NoSQL, indexation, BDD, pagination, geolocalisation, cache, Twitter, parsing, Facebook…

La communauté est également très active pour l’entre-aide. Lorsque vous avez besoin d’aide, de nombreuses sources d’information sont à votre disposition : documentation officielle, forums, les Guides Rails, des screencasts (railscast, learnivore…), des conférences, des livres…

Vous pourrez également retrouver toute l’actualité Ruby et Ruby on Rails sur la section Ruby de Human Coders News.

IDE

Souvent lorsqu’on parle de langages interprétés, nombreux sont les développeurs qui pensent que lorsqu’on code avec ce genre de langages il n’est pas possible d’avoir droit à un debugger, à de l’auto-completion, à de l’analyse statique de code, à faire du refactoring…

Je vous rassure tout de suite, cette époque est bel et bien terminé. Tout ceci est disponible avec les IDE Ruby de qualité qui sont aujourd’hui présents sur le marché : Rubymine, Netbeans, Aptana.

Pour ma part je vous conseille Rubymine.

Qui utilise Ruby on Rails?

Ruby on rails est utilisé pour de nombreux sites web à fort trafic. Voici un image présentant les applications web les plus connues faisant confiance à ce framework :

Parmis ceux-ci :

Scribd (39 700 000 visiteurs uniques/mois)

Twitter (30 000 000 visiteurs uniques/mois)

Hulu (24 900 000 visiteurs uniques/mois)

WhitePages (21 800 000 visiteurs uniques/mois)

Justin.tv (19 300 000 visiteurs uniques/mois)

Ruby on Rails est également utilisé en interne dans de grandes sociétés/organisation : Amazon, BBC, Capgemini, Cisco, CNet, Electronic Arts, IBM, Siemens, Nasa, Yahoo!, Oracle, The New York Times, Symantec, Pixar, LinkedIn…

Des outils et des hébergeurs uniques

Les développeurs Ruby, en plus d’avoir un langage et un framework web extraordinaires, ont des outils et des hébergeurs eux-aussi uniques!

Comme outils, on peut tout d’abord citer Github qui est un hébergeur Git beaucoup utilisé par les rubyistes. Ensuite, un outil que j’aime tout particulièrement : Newrelic. C’est l’outil idéal pour analyser et puis optimiser les performances de votre application. Les fonctionnalités de Newrelic sont assez vastes, c’est finalement un peu le Google Analytics de la performance des applications Rails. Si Newrelic vous intéresse vous pouvez utiliser le code suivant qui vous permettra de bénéficier gratuitement pendant 30 jours du service en version Gold : Sophia2010

Ensuite, coté hébergement, en plus des hébergeurs classiques, il y a Engine Yard et Heroku.

Engine Yard facilite grandement l’administration des serveurs. Pour résumer, EY sous-loue des machines Amazon EC2 sur lesquelles il installe une stack logicielle bien pensée qui permet l’exécution d’applications Ruby on Rails. Pour déployer une application sur ce service, il suffit d’indiquer l’URL de votre repository Git, de choisir la configuration de la/des machine(s) que vous souhaitez et de valider, Engine Yard s’occupe du reste! Il également possible d’ajouter/supprimer des machines à chaud ou encore de cloner un environnement entier (pour, par exemple, faire des tests de charge). Il est également important de noter que cette entreprise contribue à de nombreux projets open source comme : Ruby on Rails, Rubinius, JRuby…

Enfin, autre hébergeur remarquable, Heroku. Ce service est très différent de ce qui existe aujourd’hui. Il simplifie la tâche de l’administration serveur au maximum. Vous n’avez pas accès aux machines, tout se fait grâce à une interface web toute simple. Vous n’avez qu’à choisir le nombre de dynos (nombre de requêtes en parallèle), le nombre de workers (nombre de processus exécutant les tâches de fond), la taille de la base de données (Postgres) et les services que vous souhaitez intégrer. Pour déploiement, il suffit simplement de pusher votre repository Git chez eux!

Heroku est le service idéal pour lancer vos projets. Dernier point, le service de base est gratuit!

Le monde Ruby bouge!

Avant de terminer, quelques chiffres très intéressants :

L’utilisation de Ruby a augmenté de 40% en Amérique du nord entre 2008 et 2009 (source : Evans Data)

(source : Evans Data) Le nombre de développeurs Ruby devrait augmenter de 400% entre 2008 et 2013 (source : Gartner Group)

Conclusion

J’espère que cette conférence vous a convaincu, ou, du moins, intrigué. J’espère également que la prochaine fois que vous ferez un choix technologique, vous penserez à ajouter Rails sur la liste des choix possibles! :)

N’hésitez pas à réagir à ce billet en postant un commentaire si vous avez des questions ou des remarques.