Installer et configurer un environnement de développement Ruby sur Mac OS X
Ces derniers temps, j’observe beaucoup de développeurs dans mon entourage voulant s’essayer à Ruby et/ou Rails. Je ne sais pas si c’est grâce à mon lobbying intensif ou si c’est parce que les gens commencent enfin à se rendre compte que PHP est un langage moisi, mais on ne va pas se plaindre.
Toujours est-il que quand on a toujours fait du LAMP/MAMP, il peut être un peu difficile de se plonger dans un écosystème totalement différent. Heureusement, le but de cet article est de vous aider dans cette voie !
Aujourd’hui, je vais donc vous expliquer en détail comment reproduire MON environnement de développement Ruby (et j’insiste sur le côté totalement subjectif de cet article).
D’ailleurs, certains des outils que je vais vous présenter sont totalement facultatifs (pour ne pas dire tous). Mais dans notre cas, le but est de mettre en place un environnement durable et agréable à utiliser. Bref, un truc qui nous simplifiera la vie au quotidien.
Et c’est exactement ce que vous propose ce tutoriel, à suivre dans l’ordre.
N. B. 1 Cet article n’a pas vocation à vous convaincre que Ruby c’est bien ou que Ruby c’est mieux. Il s’adresse donc surtout à des personnes déjà convaincues qui cherchent à mettre la main à la patte rapidement. Et qui ont un Mac. Pour les pauvres, désolé.
N. B. 2 En vrai, seules les parties 1, 2, 4 et 6 sont réellement réservées aux Mac users. Le reste de ce tutoriel est facilement adaptable aux autres systèmes UNIX.
Sommaire
1) Command Line Tools for Xcode
L’étape indispensable (et susceptible de prendre un peu de temps) est l’installation des Command Line Tools for Xcode. C’est un gros package contenant l’ensemble des outils qui vont nous être utiles pour la suite.
This package enables UNIX-style development via Terminal by installing command line developer tools, as well as Mac OS X SDK frameworks and headers. Many useful tools are included, such as the Apple LLVM compiler, linker, and Make. If you use Xcode, these tools are also embedded within the Xcode IDE, and can be installed on your system using the Downloads preferences pane within Xcode 4.5.
À noter que pour peu que vous ayez déjà développé sur Mac, il y a de grandes chances pour que vous ayez déjà installé la suite.
D’ailleurs, si vous avez Xcode (et que votre version est à jour, c’est important) vous pouvez directement vous rendre dans les préférences à l’onglet téléchargement, puis vous n’aurez plus qu’à cliquer sur un bouton.
Pour les autres, il vous faudra un compte développeur Apple (gratuit), puis vous rendre sur la page des téléchargements. Une fois là bas, sélectionnez la version des Command Line Tools correspondant à votre OS (Lion ou Mountain Lion).
2) iTerm 2
iTerm 2 est un remplaçant du Terminal fournit par défaut avec Mac OS X qui apporte tout un tas de fonctionnalités supplémentaires totalement indispensables : un vrai split pane (avec différentes sessions), la recherche, l’instant replay ou encore la possibilité de docker la fenêtre en haut ou en bas de l’écran et de lui assigner une hotkey (à la TotalTerminal). Plutôt qu’un long discours, je vous invite à consulter la liste des features.
Je vous conseille de chopper la version beta qui est bien assez stable (et qui en plus est Retina ready).
Adoptez-le et on passe à la suite !
3) zsh & oh-my-zsh
zsh est un shell Unix avec plein de features chouettes : la complétion et la correction des commandes, un historique partagé entre les sessions, etc.
Mais sa véritable puissance se révèle avec oh-my-zsh et ses plugins :
A community-driven framework for managing your zsh configuration. Includes 40+ optional plugins (rails, git, OSX, hub, capistrano, brew, ant, macports, etc), over 80 terminal themes to spice up your morning, and an auto-update tool so that makes it easy to keep up with the latest updates from the community.
Installation
Normalement, zsh est déjà présent sur votre machine.
Et oh-my-zsh s’installe en une ligne de commande :
$ curl -L https://github.com/robbyrussell/oh-my-zsh/raw/master/tools/install.sh | sh
En plus, le script se chargera même de remplacer votre shell par défaut !
Configuration
Une fois oh-my-zsh installé, vous trouverez un fichier .zshrc
dans votre home. Il s’agit du fichier de configuration de zsh (l’équivalent de .bashrc
pour Bash).
On éditera ce fichier au fur et à mesure de l’avancement, donc soyez attentifs. En attendant, jetez un oeil au fichier et regardez comme il est joliment commenté !
Bonus : Powerline
Si vous cherchez un thème sexy pour oh-my-zsh, essayez Powerline.
4) Homebrew
The missing package manager for OS X
Homebrew est LE gestionnaire de paquets pour OS X. Le seul. Si vous en utilisiez un autre jusque-là, voici les liens des procédures de désinstallation pour MacPorts et Fink.
Installation
La façon la plus simple pour installer Homebrew est d’ouvrir un terminal et de lancer la commande suivante :
$ ruby -e "$(curl -fsSkL raw.github.com/mxcl/homebrew/go)"
Toutefois, je ne saurais trop vous conseiller de parcourir leur wiki, qui vous en apprendra un peu plus sur le fonctionnement et l’utilisation de Homebrew. Notamment la page décrivant la procédure d’installation .
Une fois Homebrew installé, pensez bien à lancer un brew doctor
histoire d’être sûr que tout tourne sans problèmes. Si vous en avez, suivez les instructions et corrigez-les avant de passer à la suite.
Configuration zsh
Ouvrez votre .zshrc
et rendez-vous à la dernière ligne qui vous permet de personnaliser votre $PATH
(juste après # Customize to your needs…
).
Dans la liste des répertoires, ajoutez /usr/local/bin
en premier, afin que les formules que vous installerez soient prédominantes en cas de conflit avec des binaires systèmes.
Vous devriez donc avoir quelque chose dans ce genre là :
export PATH=/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
Bonus : ack, git, macvim
Maintenant que vous disposez d’une base clean, on peut installer quelques formules utiles !
ack
ack is a tool like grep, optimized for programmers
$ brew install ack
Super rapide et conçu pour la recherche de code, ack est devenu un de mes outils préférés. Par exemple par défaut, il recherche dans les sous-répertoires et ignore les dossiers de votre VCS. De la bombe !
git
$ brew install git
La version de Git livrée avec les Command Line Tools n’est pas à jour et… j’aime bien avoir un Git à jour !
macvim
$ brew install macvim --override-system-vim
MacVim offre l’avantage de fonctionner exactement comme Vim, mais en utilisant les raccourcis Mac, en plus d’être à jour par rapport à la version système. En bonus, il vient avec une GUI (que je n’ai jamais ouverte).
5) rbenv & Ruby
Ruby est déjà installé sur Mac OS X, mais la version 1.8.7
se fait vieillote et puis on ne veut pas utiliser la version système de toute façon.
Pour installer une version plus récente de Ruby, nous allons utiliser rbenv & ruby-build.
rbenv lets you easily switch between multiple versions of Ruby. It’s simple, unobtrusive, and follows the UNIX tradition of single-purpose tools that do one thing well.
rbenv vous permet de gérer différentes versions de Ruby depuis votre compte utilisateur (il n’altère en rien votre système).
Fonctionnement
Parce que je suis un mec sympa, je vous colle le How It Works de leur page GitHub :
rbenv operates on the per-user directory
~/.rbenv
. Version names in rbenv correspond to subdirectories of~/.rbenv/versions
. For example, you might have~/.rbenv/versions/1.8.7-p354
and~/.rbenv/versions/1.9.3-rc1
.
Each version is a working tree with its own binaries, like
~/.rbenv/versions/1.8.7-p354/bin/ruby
and~/.rbenv/versions/1.9.3-rc1/bin/irb
. rbenv makes shim binaries for every such binary across all installed versions of Ruby.
These shims are simple wrapper scripts that live in
~/.rbenv/shims
and detect which Ruby version you want to use. They insert the directory for the selected version at the beginning of your$PATH
and then execute the corresponding binary.
Because of the simplicity of the shim approach, all you need to use rbenv is
~/.rbenv/shims
in your$PATH
.
Installation de rbenv & ruby-build
On ouvre son terminal et on installe les 2 formules suivantes :
$ brew install rbenv
$ brew install ruby-build
Configuration zsh
Au choix, à faire dans votre .zshrc
:
- Activez le plugin rbenv (qui ajoute aussi d’autres choses)
OU
-
Rendez-vous à la fin du fichier et ajoutez sur une nouvelle ligne :
if which rbenv > /dev/null; then eval "$(rbenv init -)"; fi
Installation de Ruby
On commence par lister les versions disponibles avec rbenv :
$ rbenv install -l
Available versions:
…
1.9.3-p125
1.9.3-p194
1.9.3-p286
1.9.3-p327
1.9.3-preview1
1.9.3-rc1
2.0.0-dev
2.0.0-preview1
…
Puis on installe la dernière version stable, ici la 1.9.3-p327
:
$ rbenv install 1.9.3-p327
Enfin on définit la version globale de Ruby à utiliser par défaut :
$ rbenv global 1.9.3-p327
Et on vérifie que tout s’est bien passé :
$ ruby -v
ruby 1.9.3p327 (2012-11-10 revision 37606) [x86_64-darwin12.2.0]
Nota bene
Après l’installation d’une nouvelle version de Ruby, la commande rbenv rehash
est lancée automatiquement. Cette commande (qui sert à installer les shims
) est à lancer à chaque fois que vous installerez une gem qui contiendra des binaires.
6) Pow
Pow est un serveur Rack pour Mac OS X développé par les petits mecs de 37signals.
Pow is a zero-configuration Rack server for Mac OS X. It makes developing Rails and Rack applications as frictionless as possible. You can install it in ten seconds and have your first app up and running in under a minute. No mucking around with
/etc/hosts
, no compiling Apache modules, no editing configuration files or installing preference panes. And running multiple apps with multiple versions of Ruby is trivial.
Ça à l’air sexy hein ? Et ça l’est !
Installation
Comme pour la plupart des autres outils que l’on a utilisé jusque-là, une ligne suffit :
$ curl get.pow.cx | sh
Maintenant, en supposant que vous ayez une application Ruby myapp
dans votre dossier ~/Projects
, il ne vous reste plus qu’à créer un lien symbolique depuis le répertoire de Pow qui pointera vers le dossier de votre application :
$ cd ~/.pow
$ ln -s ~/Projects/myapp
Et vous pourrez voir directement votre application tourner sur myapp.dev
. Même plus besoin de lancer rails s
!
Configuration
On peut configurer pas mal de choses dans Pow en créant un fichier .powconfig
dans notre répertoire utilisateur.
Dans notre cas, il y en a surtout une qui nous intéresse. En effet, on utilise rbenv. Mais le truc, c’est que Pow n’en a aucune idée… Au point où il utilisera la version système de Ruby si on ne lui dit rien !
La solution est très simple, on crée donc notre .powconfig
dans notre répertoire utilisateur dans lequel on ajoute :
export PATH=$(rbenv root)/shims:$(rbenv root)/bin:$PATH
Suite à quoi il faudra redémarrer Pow :
$ touch ~/.pow/restart.txt
Ainsi, Pow utilisera la version de Ruby définie par rbenv et les gems associées ! Elle est pas belle la vie ?
Powder
Comme faire des ln
et des touch
était encore trop lourd pour gérer Pow, des mecs se sont amusés à nous pondre des gems pour nous simplifier la vie.
Et Powder est ma préférée !
On l’installe donc via un simple :
$ gem install powder
Maintenant, pour lier une application au domaine local .dev
correspondant, on se place dans le répertoire de l’app et on fait un :
$ powder link
And it’s done.
Powder rend l’utilisation de Pow vraiment magique. Pensez à faire un powder -h
pour voir tout ce qu’il apporte.
Bonus : Anvil
Anvil est un utilitaire qui vous permet de gérer vos sites configurés avec Pow via une interface graphique. Mais bon, ça serait trop facile.
7) Pry
Pry is a powerful alternative to the standard IRB shell for Ruby. It features syntax highlighting, a flexible plugin architecture, runtime invocation and source and documentation browsing.
Et croyez-moi, rien que pour le dernier point, ce shell Ruby est génial !
Si vous avez 17 minutes et 42 secondes devant vous, je vous conseille d’aller directement mater le screencast d’introduction de Josh Cheek. Vous aurez droit à un tour des fonctionnalités, puis Josh vous apprendra comment utiliser Pry en tant que debugger pour vos projets.
Installation
On suit les conseils de Josh et on installe Pry (avec pry-doc) de la façon suivante :
$ gem install pry pry-doc --no-rdoc --no-ri
Exemple d’utilisation
On exécute Pry :
$ pry
On crée une string s
en tapant au hasard sur le clavier :
[1] pry(main)> s = "! tsacneercs el retam rella'd tid suov no'uqsiup siaM"
=> "! tsacneercs el retam rella'd tid suov no'uqsiup siaM"
On cherche une méthode qui pourrait nous être utile avec find-method
(au hasard, reverse
) :
[2] pry(main)> find-method reverse s
String
String#reverse
String#reverse!
On se rencarde sur la méthode trouvée avec show-doc
:
[3] pry(main)> show-doc s.reverse
From: string.c (C Method):
Number of lines: 3
Owner: String
Visibility: public
Signature: reverse()
Returns a new string with the characters from str in reverse order.
"stressed".reverse #=> "desserts"
Et on fait ce que nous dit le monsieur :
[4] pry(main)> puts s.reverse
Mais puisqu'on vous dit d'aller mater le screencast !
=> nil
Conclusion
Si vous avez tenu jusqu’à la fin et suivi de manière attentionnée ce tutoriel, vous disposez dès à présent de l’environnement clean et fonctionnel du parfait hipster Rubyiste. Bravo !
Des remarques ? Des questions ? Ou mieux : des outils à partager ? Les commentaires sont là pour ça ! :)