Blog tech

RubyMine

Rédigé par Alexandre Salaun | 5 avril 2013

Afin d’avoir la productivité la plus optimisée possible, un développeur a besoin d’un environnement de travail adapté à ses besoins, ses envies et ses habitudes. Nous n’allons pas revenir ici sur le choix de l’OS mais plutôt sur celui de l’éditeur de texte ou de l’IDE.

Après avoir utilisé TextMate et SublimeText2, j’ai décidé de tester RubyMine. Contrairement aux deux premiers cités, RubyMine est un IDE donc par conséquent un certain nombre d’outils y sont intégrés tels que Git (ou un autre gestionnaire de sources), la gestion de la base de données…

RubyMine est disponible sous Mac OS X, Linux et Windows donc quelque soit votre OS vous pouvez l’utiliser. Il est par contre indispensable d’avoir auparavant installé Ruby (1.8.6 minimum). Le coût de licence n’est pas négligeable mais si l’utilisation justifie le coût alors pourquoi pas.

Nous allons commencer à utiliser RubyMine afin de voir ce qu’il est possible de faire avec puis nous verrons les points positifs et négatifs de celui-ci.

La configuration

Lors de la première utilisation de RubyMine, il vous est demandé quel système de raccourcis clavier vous souhaitez utiliser (TextMate, Emacs…). Ceci vous sera utile si vous êtes habitué à un éditeur de texte et donc à son système de raccourcis. Ce point me semble intéressant pour des utilisateurs habitué à des sytèmes autres que celui-ci et souhaitant changer sans perdre tous ses repères.

Ensuite, l’IDE vous offre un nombre incalculable de possibilités de personnalisation afin de trouver ce qui vous convient le mieux que ce soit en terme de couleurs, de plugins, de raccourcis…

Même si il y a un nombre conséquent de raccourcis clavier créés par défaut, je conseille tout de même de les revoir car certains sont manquants d’après moi (c’est un avis subjectif car cela dépend bien sûr des besoins de chacun). En effet, il n’y a, par défaut, pas de raccourcis pour lancer une tâche Capistrano ou Rake ou bien pour ouvrir la console Rails. C’est donc à chacun de voir quels raccourcis semblent les plus importants.

Une liste de plugins pré-installés est disponible dans la fenêtre de configuration de RubyMine mais il est très simple d’en installer de nouveaux, soit depuis le repository (il en existe un par défaut mais il est possible d’en ajouter un ou plusieurs), soit en installant un plugin présent sur votre poste.

Pour les habitués de VIM, il existe un plugin ideavim qui permet d’utiliser par exemple les macros. Il est également possible d’utiliser les bundles TextMate si besoin.

Les possibilités de configuration vous permettent donc d’avoir un IDE qui répond à vos attentes. Il faut y passer un peu de temps au départ mais l’investissement sera rentabilisé par la suite (comme pour tout changement d’outil, il est nécessaire de se familiariser et de trouver ses marques).

L’utilisation

Afin de tester RubyMine j’ai considéré deux cas d’utilisations, le premier consiste à créer un nouveau projet Rails et le second, à reprendre un projet Rails existant.

Nouveaux projets

Depuis le menu principal de RubyMine, il est possible de créer un nouveau projet. Le premier choix consiste à sélectionner le type de projet (répertoire vide, projet Rails, projet RubyMotion…) ainsi que le chemin du projet à créer.

Une fois cela effectué, une interface graphique permet de choisir la version de Ruby (parmi les versions installées sur le poste), la version de Rails mais aussi le système de gestion de base de données et la librairie Javascript à utiliser.

Il est également possible de sélectionner un template d’application Rails pour créer l’application. Les options de bases utilisées lors de la création d’un nouveau projet en ligne de commande sont donc disponibles dans RubyMine.

Une fois l’application créée, il est possible de modifier la version de Ruby depuis les préférences du projet.

Attention, si vous utilisez rbenv, lors de l’ouverture de l’IDE, le répertoire ~/.rbenv est scanné afin de détecter les versions de Ruby disponibles donc si elles ne sont pas présentes dans ce répertoire, elles ne seront pas disponibles dans l’IDE.

Il vous sera néanmoins possible de les ajouter à la main par la suite depuis le panneau Ruby SDK and Gems de la configuration de RubyMine.

Pour ce qui est de l’application Rails en elle même, il n’y a aucune différence entre la création depuis l’IDE et depuis la ligne de commande.

Projets existants

Il est possible depuis RubyMine d’ouvrir des projets déjà existants (sur votre machine ou dans un dépôt Git par exemple).

Pour un projet existant sur votre machine, rien de plus simple, il suffit, depuis le menu principal, de sélectionner le répertoire du projet (File > Open Directory).

Pour un projet distant utilisant un gestionnaire de sources, il vous faut passer par le menu VCS puis de cliquer sur Checkout from version control afin de pouvoir ensuite sélectionner le gestionnaire de sources utilisé puis de spécifier l’url du dépôt ainsi que le répertoire de la machine où sera copié le projet et son nom.

Gestion de sources

La présence d’une interface graphique pour le gestionnaire de sources peut aider les plus réfractaires. En effet, pour les personnes n’étant pas adeptes des lignes de commandes, le fait de pouvoir consulter les modifications effectuées et effectuer toutes les manipulations nécessaires (pull, push, commit…) dans une interface graphique depuis l’IDE est un plus.

Il n’est donc plus nécessaire d’ouvrir un terminal pour la gestion de sources puisque c’est intégré dans l’IDE. Cependant, je ne trouve pas l’interface graphique très claire (les boutons ne sont pas explicites).

Des cas d’utilisation de fonctionnalités plus précises sont également à voir. En effet, certaines features de RubyMine semblent intéressantes, comme le fait de pouvoir accèder à la base de données directement dans l’IDE par exemple.

Bases de données

L’un des points plutôt agréable de RubyMine est la gestion de la base données directement dans l’IDE.

Pour un projet Rails par exemple, si vous avez votre fichier config/database.yml qui spécifie les bases de données utilisées, celles-ci sont listées dans l’onglet Database et vous pouvez les consulter directement.

Pour cela, il faut les synchroniser (menu déroulant disponible lors d’un clic droit sur l’une des bases) avec RubyMine. Une fois ceci effectué, vous pouvez, comme si vous étiez dans un une application de gestion de BDD, consulter la structure et le contenu de votre base.

Les tests

L’interface concernant les tests présente dans RubyMine est assez claire. Lors de l’éxécution de ces derniers, on retrouve la liste de tous les tests effectués et pour chacun d’eux une icone permet de savoir si oui ou non il est passé avec succès.

Le fait de double-cliquer sur un test nous amène directement aux lignes de code correspondantes ce qui est appréciable afin de voir le code du test sans avoir à rechercher le fichier correspondant.

De plus, le temps d’éxécution de chaque test est indiqué dans la partie droite de l’interface dédiée aux tests.

Il est également possible d’obtenir le pourcentage de couverture du code lors de l’exécution des tests.

Un autre aspect intéressant dans l’exécution des tests est le fait de pouvoir les relancer automatiquemet dès qu’un fichier est enregistré.

C’est en fait le même principe que l’on peut retrouver si l’on utilise guard et spork comme indiqué dans notre article concernant la stack de tests avec Rails.

Il existe bien sûr d’autres fonctionnalités mais je ne vais pas ici toutes les citer. C’est à chacun, en fonction de ses besoins de voir ce qui paraît intéressant ou non.

Avantages et inconvénients

Le principal intérêt d’un IDE est de ne plus avoir besoin d’autres outils en dehors de celui-ci pour développer. Avec RubyMine, le fait d’avoir le gestionnaire de sources, la gestion de la base de données, l’accès à la console et bien sûr l’éditeur de texte permet de se passer d’autres outils.

En plus des fonctionnalités citées ci-dessus, d’autres sont intéressantes à utiliser également comme la création de Gist (sur un fichier complet ou uniquement sur une sélection), un outil pour voir les différences entre différentes version d’un fichier ou l’intégration de Capistrano pour le déploiement.

L’autocomplétion proposée par RubyMine est complète et bien utile lorsque l’on cherche la signature ou le nom d’une méthode.

C’est également l’avantage d’un IDE par rapport à un éditeur de texte classique (même si certains éditeurs permettent d’avoir la complétion également).

Cela permet d’avoir la liste des méthodes existantes et également la documentation correspondante. C’est un point vraiment utile lorsque l’on débute sur un nouveau langage ou un nouveau framework par exemple. En ce sens, le support de RubyMotion est un avantage par exemple.

D’autres points peuvent paraître intéressant au premier abord mais soit il y a des bugs, soit cela ne correspond pas à ce que j’attendais en voyant le libellé.

Par exemple, RubyMine affiche directement dans le code les chaines traduites via I18n plutôt que d’afficher l’appel à ce dernier. En effet, dans votre éditeur de texte habituel vous visualisez dans le code l’appel suivant :

I18n.t("views.title")

Dans l’IDE, ce n’est pas ce morceau de code qui est affiché mais la chaîne traduite et c’est uniquement au survol de celle-ci que l’on peut voir le code correspondant à l’appel à I18n :

Mon super titre
# au survol => I18n.t("views.title")

Ce dernier point peut paraitre perturbant au départ car si l’on ne fait pas attention on peut croire que la chaîne de caractère est écrite en dur dans le code alors qu’elle est bien traduite (il y a une différence de coloration entre les chaînes en dur et les chaînes traduites affichées).

Le principal souci de cette fonctionnalité n’est sans doute pas le fait que cela puisse perturber l’utilisateur mais plutôt qu’elle ne fonctionne pas tout le temps. En effet, parfois, le code d’appel à I18n reste afficher (plutôt que le chaîne traduite) avec un message indiquant que la clé indiquée ne correspond à aucune traduction et pourtant la traduction est bien présente.

Autre point, l’installation de gems via une interface graphique. En effet, il est possible depuis le panneau “Ruby SDK and Gems” de l’interface de configuration de votre projet (ou depuis le menu Tools > Quick install gems) d’ajouter ou de mettre à jour des gems.

Mais là encore, le comportement n’est pas optimal. La gem n’est pas ajoutée au Gemfile. Elle est disponible de façon globale sur votre machine (pour la version de Ruby utilisée), elle est présente lorsque vous lancer la commande gem list mais n’est pas spécifiée dans le projet, ce qui sera donc problèmatique lors du déploiement.

D’autres points concernant l’utilisation de RubyMine me dérangent également. L’IDE crée des fichiers (dans le répertoire /.idea du projet) ce que je trouve toujours génant puisqu’ils ne sont pas utilisés pour le développement en lui-même.

Il est cependant simple de les exclure des fichiers à commiter (dans le panneau où l’on voit les fichiers qui ont été modifiés, il y a un bouton pour ajouter des fichiers à ignorer).

Une feature à laquelle je me suis habitué avec SublimeText2 est l’ouverture du fichier (qui est en fait un aperçu si l’on ne modifie pas ce dernier) lors du simple clic sur ce dernier. Avec RubyMine, il est obligatoire d’effectuer un double clic pour ouvrir un fichier.

Conclusion

RubyMine est donc un IDE complet. Pour avoir utilisé Eclipse un temps je préfère sans aucun doute RubyMine (à voir si depuis Eclipse à évolué).

Cependant, entre un éditeur de texte tel que SublimeText2 et un IDE je ne vois pas de raison évidente de changer à l’heure actuelle.

Il est clair que le fait de regrouper tous les outils dans une seule application est un avantage mais encore faut il pouvoir faire tout ce que l’on souhaite sans problème.

Pour une personne habituée à l’utilisation d’un IDE ou qui ne souhaite pas utiliser (ou le moins possible) la ligne de commandes, je pense que RubyMine est une solution viable.

Pour moi qui suis habitué à un éditeur de texte classique combiné à un terminal et les différents autres outils nécessaires (application pour les bases de données…), je n’en ressens pas l’intérêt.

Pour les personnes qui utilisent RubyMine, n’hésitez pas à me faire part de vos retours. Je suis intéressé par l’avis de développeurs qui utilisent cet IDE tous les jours.

L’équipe Synbioz.

Libres d’être ensemble.