33
 Qui suis-je ? Mathieu Fontaine, 25 ans Diplômé de Supinfo (promo 2008) Développeur Web (depuis 2005) Chef de projet / Développeur Rails (depuis 2008) about.me/spidou

Quelle place pour le framework Rails dans le développement d'application web

  • Upload
    5pidou

  • View
    970

  • Download
    0

Embed Size (px)

DESCRIPTION

Cette présentation a été réalisée dans le cadre des Rencontres Mondiales décentralisées du Logiciel Libre (RMLLd) qui se sont déroulées du 1er au 3 Juillet 2011 à Saint-Joseph (Ile de la Réunion).

Citation preview

Page 1: Quelle place pour le framework Rails dans le développement d'application web

  

Qui suis-je ?

Mathieu Fontaine, 25 ans

Diplômé de Supinfo (promo 2008)

Développeur Web (depuis 2005)

Chef de projet / Développeur Rails (depuis 2008)

about.me/spidou

Page 2: Quelle place pour le framework Rails dans le développement d'application web

  

Quelle place pourle framework Ruby On Rails

dans le développement d’applications web ?

Page 3: Quelle place pour le framework Rails dans le développement d'application web

  

Ruby

LibreInterprété

Orienté objet

Multi-plateforme

Multi-paradigme

Page 4: Quelle place pour le framework Rails dans le développement d'application web

  

Tout est objet

Pas d'opérateur1+2 <=> 1.send('+', 2) <=> 1.+(1)

+ est une méthode de Fixnum

1.methods.sort # ["%", "&", "*", "**", "+", "-", ...]

Pas de type primitif1.class # Fixnum7.next # 8"Vive les RMLLd".length # 14true.class # TrueClass

Page 5: Quelle place pour le framework Rails dans le développement d'application web

  

Syntaxe naturelle

PHP Rubyfor ($i = 0 ; $i < 7 ; i++) { echo "Hello World!";}

8.times do puts "Hello World!"end

if (say_hi()) { echo "Hello World!";}

puts "Hello World!" if say_hi?

Page 6: Quelle place pour le framework Rails dans le développement d'application web

  

Hello World!

Rubyputs "Hello World!"

Cint main(void) { printf("Hello World!\n"); return 0;}

Javapublic class HelloWorld { public static void main(String[] args) { System.out.println("Hello World!"); }}

Page 7: Quelle place pour le framework Rails dans le développement d'application web

  

Moindre surprise

La touche "F1" affiche l'aideLa touche "Suppr" envoie le fichier dans la corbeille

Voici un exemple avec la convention de nommage des méthodes :

method_namedangerous_method!question_method?setter_method=

Ruby a été écrit en respectant ce principe,et incite à en faire de même

Page 8: Quelle place pour le framework Rails dans le développement d'application web

  

YAML

YAMLspidou: on: Ubuntu firstname: Mathieu lastname: Fontaine skills: - skill: Web Developer since: 2006 - skill: Rails Project Manager since: 2008

XML<user id="spidou" on="Ubuntu"> <firstname>Mathieu</firstname> <lastname>Fontaine</lastname> <skills> <skill since="2006">Web Developer</skill> <skill since="2008">Rails Project Manager</skill> </skills></user>

Page 9: Quelle place pour le framework Rails dans le développement d'application web

  

Rails

LibreDon't Repeat Yourself MVC

Convention over ConfigurationRESTful

Page 10: Quelle place pour le framework Rails dans le développement d'application web

  

Java + Hibernate (1/2)persistence.xml<?xml version="1.0" encoding="UTF-8"?><persistence xmlns="[...]" xmlns:xsi="[...]" xsi:schemaLocation="[...]" version="[...]">

<persistence-unit name="default" transaction-type="RESOURCE_LOCAL"> <mapping-file>META-INF/orm.xml</mapping-file>

<class>com.mysite.User</class>

<properties> <property name="hibernate.cache.provider_class" value="net.sf.ehcache.hibernate.EhCacheProvider" /> <property name="hibernate.cache.use_query_cache" value="true" /> <property name="hibernate.cache.use_second_level_cache" value="true" /> <property name="hibernate.show_sql" value="true" /> <property name="hibernate.format_sql" value="true" /> <property name="use_sql_comments" value="false" /> <property name="hibernate.dialect" value="org.hibernate.dialect.MYSQLDialect" /> <property name="hibernate.c3p0.min_size" value="5" /> <property name="hibernate.c3p0.max_size" value="20" /> <property name="hibernate.c3p0.timeout" value="300" /> <property name="hibernate.c3p0.max_statements" value="50" /> <property name="hibernate.c3p0.idle_test_period" value="3000" />

<property name="hibernate.search.default.directory_provider" value="org.hibernate.search.store.FSDirectoryProvider" /> </properties>

</persistence-unit>

</persistence>

Page 11: Quelle place pour le framework Rails dans le développement d'application web

  

Java + Hibernate (2/2)

orm.xml<?xml version="1.0" encoding="UTF-8"?><entity-mappings xmlns="[...]" xmlns:xsi="[...]" xsi:schemaLocation="[...]" version="1.0">

<package>com.mysite</package>

<entity class="User"> <sql-result-set-mapping name="usernames"> <column-result name="username" /> </sql-result-set-mapping> <table name="User" /> <named-native-query name="myQuery" result-set-mapping="usernames"> <query><![CDATA[select u.username from User u]]> </query> </named-native-query></entity></entity-mappings>

Page 12: Quelle place pour le framework Rails dans le développement d'application web

  

ActiveRecord

users

id

username

created_at

updated_at

Base de donnéesModèle

class User < ActiveRecord::Baseend

User.all # (select * from users)@user = User.first # (select * from users limit 1)@user.username # "spidou"

Page 13: Quelle place pour le framework Rails dans le développement d'application web

  

MVC

Requête

Contrôleur Modèle

Vue

Réponse

Affichage

[Post1, Post2, ...]

Post.find(:all)

Page 14: Quelle place pour le framework Rails dans le développement d'application web

  

RESTful

Opération Site classique (en PHP) Site RESTful (en Rails)

Lister les utilisateurs GET /list_users.php GET /users

Créer un utilisateur POST /create_user.php POST /users

Afficher un utilisateur GET /show_user.php?id=1 GET /users/1

Modifier un utilisateur POST /edit_user.php PUT /users/1

Supprimer un utilisateur GET /delete_user.php?id=1 DELETE /users/1

Lister les commentaire d'un article GET /list_comments.php?post_id=1 GET /posts/1/comments

Supprimer un commentaireGET /delete_comment.php?id=1&post_id=1 DELETE /posts/1/comments/1

Page 15: Quelle place pour le framework Rails dans le développement d'application web

  

Rails poursuit son évolution

Page 16: Quelle place pour le framework Rails dans le développement d'application web

  

Arel (1/2)

@posts = Post.find(:all, :conditions => { :published => true })

@posts = Post.where(:published => true)

# Exécution de la requête SQL# @posts reçoit un tableau d'éléments

# La requête SQL n'est pas exécutée à ce moment# @posts reçoit un objet de type ActiveRecord::Relation

Rails 2

Rails 3

Page 17: Quelle place pour le framework Rails dans le développement d'application web

  

Arel (2/2)

@posts = Post.where(:published => true)

if params[:order] @posts = @posts.order(params[:order])end

@posts.each do |p| ...end

# La requête SQL est exécutée maintenant !

Page 18: Quelle place pour le framework Rails dans le développement d'application web

  

UJS (1/2)

<%= link_to_remote 'Profil utilisateur', @user %>

<a href="#" onclick="new Ajax.Request('/users/99',{ asynchronous:true, evalScripts:true, parameters:[...] })">Profil utilisateur</a>

<%= link_to 'Profil utilisateur', @user, :remote => true %>

<a href="/users/99" data-remote="true">Profil utilisateur</a>

UJS = Unobtrusive JavaScript = « Javascript discret »

Rails 2

Rails 3

Page 19: Quelle place pour le framework Rails dans le développement d'application web

  

UJS (2/2)

Rails 2

Rails 3

<%= link_to 'Supprimer', @user, :method => :delete, :confirm => "Êtes-vous sûr ?" %>

<a href="/users/99" onclick="if (confirm("Êtes-vous sûr ?")) {var f = document.createElement('form'); f.style.display='none';this.parentNode.appendChild(f); f.method='POST'; f.action='this.href';var m = document.createElement('input'); […] m.setAttribute('value', 'delete');f.appendChild(m) ; f.submit(); }; return false;">Supprimer</a>

<%= link_to 'Supprimer', @user, :method => :delete %>

<a href="/users/99" data-method="delete" ref="nofollow">Supprimer</a>

Page 20: Quelle place pour le framework Rails dans le développement d'application web

  

L'éco-système

Page 21: Quelle place pour le framework Rails dans le développement d'application web

  

Github (1/2)

Hébergement et gestion de développement de logiciel grâce à Git

Pas de publicité Gratuit pour les projets open source Navigation intuitive Facilite et incite la création de forks

Page 22: Quelle place pour le framework Rails dans le développement d'application web

  

Github (2/2)

Passe devant Sourceforce et Google Code en juin 2011 Github : 1 153 059 commits (54%)

Sourceforge : 624 989 commits (30%)

Google Code 287 901 commits (14%)

2 millions de dépôts

1 million d'utilisateurs prévus en septembre 2011

Quelques projets hébergés sur Github : PHP, Perl, Python, Symfony, Rails, Facebook, Diaspora

Redmine, JQuery, Script.aculo.us, Git, Linux

Page 23: Quelle place pour le framework Rails dans le développement d'application web

  

New Relic (1/2)

SaaS Monitoring et suivi des performances Aucun serveur à installer (cloud) Interface utilisateur extrêmement simple Un plugin Rails à installer, et ça marche !

Page 24: Quelle place pour le framework Rails dans le développement d'application web

  

New Relic (2/2)

Page 25: Quelle place pour le framework Rails dans le développement d'application web

  

Heroku (1/2)

Déploiement ultra simplifié via Git

Manipulations en ligne de commande ou via le site web

Mise à jour des ressources (CPU, mémoire) en fonction de la charge

43 add-ons (sendgrid, new relic, cron, memcache, etc.)

+ 153 300 applications déployées

Page 26: Quelle place pour le framework Rails dans le développement d'application web

  

Heroku (2/2)

Page 27: Quelle place pour le framework Rails dans le développement d'application web

  

Ils font confiance

Page 28: Quelle place pour le framework Rails dans le développement d'application web

  

Yellow Pages

1 500 requêtes/sec JavaEE + EJB = problèmes de maintenabilité, de design 125 000 lignes de code (0 test)

Avant 2007

Après migration vers Rails en 2007 20 000 lignes de code (tests compris) Réécriture en 3 mois (5 développeurs) Performances égales

Page 29: Quelle place pour le framework Rails dans le développement d'application web

  

Twitter (1/2) Créé en 2006

Développement initial en Rails

Fin 2008 :

100 million de tweets par trimestre Lève 15 million de dollars Valorisé à 500 million de dollars

Page 30: Quelle place pour le framework Rails dans le développement d'application web

  

Twitter (2/2) 2009 : Victime de son succès, Twitter migre progressivement

vers Scala

Fin 2010 :

Lève +140 million de dollars Valorisé à 3.7 milliard de dollars

Rails = rampe de lancement de projet

Page 31: Quelle place pour le framework Rails dans le développement d'application web

  

Osirails

ERP destiné aux PME/PMI

Adapté à la fabrication sur mesure

Modulaire Module Tiers (gestion des clients, fournisseurs, etc.)

Module RH (gestion des ressources humaines, congés, etc.)

Module Stocks (gestion des articles, inventaires, etc.)

Module Ventes (gestion produits, devis, facture, etc.)

...

En cours de développement chez EMR

En phase de test, bientôt en production

github.com/spidou/osirails/fork

Page 32: Quelle place pour le framework Rails dans le développement d'application web

  

Des questions ?

Page 33: Quelle place pour le framework Rails dans le développement d'application web

  

Crédits

Présentation réalisée grâce à LibreOffice sur Ubuntu 11.04

Sources : ruby-lang.org

rubyonrails.com

wikipedia.org

workingwithrails.com

Osirails osirails.spidou.com/wiki

github.com/spidou/osirails

EMR emr-oi.com

insideit.fr

blog-nouvelles-technologies.fr

blog.spidou.com