Cyberworkers

Ruby, une alternative à PHP ?

Si les Japonais l’ont adopté en premier c’est sans doute parce que son inventeur y est originaire. Grâce à Internet, le virus a vite été propagé aux pays occidentaux. Le leitmotiv de Ruby est la productivité et le plaisir du développeur.
Par Michel Fleith. 

 

D’ou vient Ruby ?

Yukihiro « Matz » Matsumoto a commencé l’écriture de ce langage en 1993 et a publié une première version en 1995. Le nom Ruby n’est pas un acronyme mais un jeu de mots sur Perl. Il connait un franc succès.

 

On parle de Ruby et Ruby On Rails, peux-tu expliquer la différence ?

Ruby est un langage Orienté Objet. Tout est un objet même les types. Ruby On Rails [2] (RoR pour les intimes) est un framework utilisant le langage Ruby et la technologie Rails incluant les fonctionnalités de développement pour le web.

Ruby On Rails est l’atout maître de Ruby. On lui doit notamment le succès du langage en dehors de son Japon natal.

Rails n’apporte rien de nouveau au développement web, cependant il remplace les servitudes du programmeur par des tâches automatiques et parie sur des conventions ou des comportements par défaut les plus rationnels possible.

La lecture, la mise à jour et l’effacement d’information sont les actions les plus courantes dans les applications web, Rails est brillant dans ce domaine.

La mise en route d’un projet démarre à chaque fois sur les chapeaux de roue.

Quelle est l’utilité d’un framework ?

Avant de découvrir Ruby je cherchais une façon moins barbante de développer.

J’avais fait le tour de PHP, et je commençais à m’ennuyer, lassé d’écrire des requêtes MySql avec des apostrophes à n’en plus finir, source d’erreurs qui plus est…

J’ai donc cherché un framework me permettant de moins coder et qui privilégie la réflexion sur l’aspect ergonomie et design de l’application.

Il existe quelques frameworks comme Cake ou Symfony ou Zend

Le problème est la documentation trop succincte de ces frameworks un peu trop « fait maison » par une bande de potes.

Il faut aussi dire qu’un framework est censé vous faire gagner du temps, ce que je n’ai pas pu constater, contrairement à « RoR ».

Comment peut-on comparer par rapport à Python/Django ou TurboGears, PHP/CakePHP ou Symfony ?

Sur le plan de la syntaxe, par exemple, Ruby est on ne peut plus clair. On peut reprocher le contraire a ceux cités dans la question.

Une syntaxe claire engendre un gain de temps dans le cas d’une demande d’évolution 1 an après avoir créé l’application.

Et aussi, dans le cas d’un projet en équipe, la syntaxe ruby est absolument formidable, très peu de commentaires sont nécessaires, les lignes de code parlent d’elles-mêmes.

Un atout énorme est le scaffolding, qui permet de générer en une ligne de commande les formulaires d’insertion, de modification et de suppression dans la base de données.

Bien sûr TurboGear en fait autant mais où sont les livres de chevet pour apprendre sérieusement ?

Pour ce qui est de Symfony on reste dans du PHP raccourci et toujours ce manque de documentation.

Il parait que Scoopeo et BaseCamp utilisent Ruby, ce sont les meilleurs exemples ?

En terme d’exemple, je ne pense pas qu’il y ait un réel avantage aux yeux du visiteur final, par contre le client verra ses applications fleurirent rapidement.

Il y a d’autres exemples :

- Odeo : le célèbre annuaire de podcast met à disposition de ses utilisateurs un million de références.
- List Apart : ce magazine en ligne sur le webdesign comptabilise 14 millions de pages visitées par mois (Page Rank de 9 ! assez rare pour être précisé ).
- Eins.de : ce site internet allemand dessert 1,2 millions de pages par jour (100Gb de trafic). Son architecture a récemment évolué pour améliorer ses performances.
- Eyeka.com : site français en béta qui a pour but de promouvoir et valoriser des photos et des vidéos de qualité

(Merci à blog.aysoon.com pour les liens !).

Quand on parle de Ruby, on parle aussi souvent d’Ajax, qui est d’ailleurs très à la mode avec les projets Web 2.0. Quel est le lien entre les 2 ? Quel est l’intérêt d’ajax ? As-tu des exemples d’ajax ?

Substruct Ecommerce est un système entièrement écrit en Ruby on Rails, il est Open Source et utilise de l’Ajax.

Il n’y a aucun lien entre Ruby et Ajax.

Par contre Ruby On rails est doté d’un joli répertoire « js » contenant prototype.js et scriptaculous.js

À l’aide d’assistants Rails il est très aisé de générer des applications web2.0

L’intérêt d’Ajax est la richesse de l’application, on ne recharge que ce qui est utile, on laisse la main à l’utilisateur en permanence dans 90 % des cas.

Revenons sur Ruby, ce langage est basé sur le modèle MVC qui a été inventé par Xerox. En t’adressant à des « non informaticien », comment expliquerais-tu le modèle MVC ?

Modèle – Vue – Contrôleur

Un vélo a deux roues une chaine et un cadre. Une application web a une base de donnée, un serveur web et l’affichage.

Le modèle contient les informations permettant de puiser dans la base de données.

Le contrôleur contient le code qui permet de poser des questions et d’exécuter des actions dans la base de données

La vue contient le code qui affiche à l’écran l’application.

Tout ça est très intéressant. Bon concrètement comment installe t-on Ruby si on veut faire 2,3 tests sur son PC ?

http://www.rubyonrails.org/down

OVH, Amen, Godaddy, etc proposent-ils Ruby sur leurs hébergements ?

Pour le moment il existe Typhon qui héberge sur des serveurs dédiés des applications RoR.

Chez OVH, en mutualisé il n’y a rien de proposé.

Mais personnellement, je suggère de rester sur du dédié. Il existe énormément de plugin à installer à partir de Gemme, il vaut mieux avoir la main sur son serveur plutôt que d’être tributaire.

Si on partait sur un exemple de code simple ?

Voici un premier programme Ruby, présentant quelques caractéristiques vitales. Notez que les programmes Ruby sont contenus dans des fichiers portant l’extension .rb.


# Méthode bonjour()
def bonjour(nom)
resultat = "Bonjour, " + nom
return resultat
end

# Programme principal
3.times do
puts bonjour("Bill")
end

Ce petit programme, une fois lancé, affiche le résultat suivant :


Bonjour, Bill
Bonjour, Bill
Bonjour, Bill

Nous voyons ici comme créer une méthode, transmettre un paramètre et créer une simple boucle.

def en Python permet de créer une fonction, tandis qu’en Ruby il crée une méthode de la classe Object , la racine de la hiérarchie des classes de Ruby. Toute méthode se termine par le mot-clef end. Notre méthode, bonjour() , prend un seul argument, que nous adjoignons à la chaîne "Bonjour, " via le signe de concaténation +. Nous mettons enfin le tout dans la variable resultat, qui ne sert qu’une fois, car renvoyée aussitôt par return vers l’instruction ayant appelé la méthode.

3.times est une construction particulière de Ruby : times est ici une méthode de l’objet 3. En effet, tout dans Ruby étant un objet,3 est donc automatiquement reconnu comme un objet de typeInteger (Entier) : il dispose donc de toutes les méthodes rattachées à cet objet. i.times est une méthode permettant de lancer une itération, c’est-à-dire une boucle, entre 0 et i-1. Les instructions placées entre les mots-clefs do et end seront donc répétées ici trois fois. Ruby dispose d’autres manières de créer des itérations ; notablement, chaque type de données dispose de son propre jeu d’itérateurs, ce qui rend le code beaucoup plus facile à lire et écrire.

puts, enfin, est l’équivalent Ruby du echo de PHP, du print de Python ou du sprintf() de C : elle affiche le contenu d’une chaîne à l’écran. En l’occurrence ici, la chaîne est renvoyée par l’appel de fonction bonjour(), le résultat est donc affiché trois fois. Ici encore, Ruby dispose d’autres méthodes permettant d’afficher une chaîne, puts étant propre à ce langage.

(Merci à Xavier Borderie, JDN Développeurs pour cet exemple)

Voir aussi : http://www.railsfrance.org/

Demandez un devis

  • Merci de décrire votre demande en précisant :
    • L'activité de votre entreprise.
    • Le contexte de votre demande.
    • Pourquoi et comment vous souhaitez sous-traiter.
    • A quel moment, nous pouvons vous contacter pour une première estimation.
  • Ce champ n’est utilisé qu’à des fins de validation et devrait rester inchangé.