Seguimos con los especiales acerca de cuáles son las herramientas imprescindibles a la hora de embarcarte en un proyecto con tu lenguaje y/o framework preferido. En esta ocasión, os voy a describir las que yo considero más importantes para desarrollar aplicaciones en Ruby on Rails. Aunque estoy seguro que hay muchas otras que se os ocurren, así que os invito a que comentéis vuestras preferencias.
El editor o IDE
¿Usar un editor ligero, o un IDE que lo abarque todo? El eterno dilema. Yo la verdad es que soy de los que prefieren un editor más o menos sencillo, pero que sea fácilmente extensible a través de plugins. Mi elección ha sido desde hace mucho tiempo TextMate, un editor del que ya os hablé en su día.
No obstante, existen un buen número de IDEs para programar con Ruby on Rails que funcionan realmente bien, y que se pueden convertir fácilmente en tu centro de mando de todo el proyecto, gracias a su integración con sistemas de control de versiones, visor de base de datos, etc.
Uno de los IDEs más conocidos es RubyMine. Si bien no es gratuito (salvo que sea usado para proyectos de software libre), su precio no es descomunal, partiendo de 58 euros la versión para un desarrollador individual. A cambio de este dinero, se nos ofrece un entorno con un editor que permite el autocompletado de código, herramientas de ayuda para la refactorización, análisis de código al vuelo, visor del esquema de los modelos, soporte para Bundler o RVM, depurador, soporte para diversos sistemas de control de versiones… En definitiva, toda una navaja suiza. Está disponible para Windows, Mac OS X y Linux.
El otro IDE popular para programar en Ruby es NetBeans, que aunque es más conocido como un entorno para Java, existen unos módulos oficiales que permiten utilizarlo para este otro lenguaje. De nuevo, nos ofrece herramientas de ayuda a la refactorización, inferencia de tipos, navegación rápida entre ficheros relacionados, parseo de código mientras se escribe para detectar errores de sintaxis, y un largo etcétera.
El intérprete
Lógicamente, necesitamos una versión del intérprete de Ruby para poder trabajar. En los proyectos nuevos, ya no tiene tanto sentido utilizar la versión 1.8.x del intérprete oficial, y lo recomendable suele ser trabajar directamente con la versión 1.9.2 del mismo. No obstante, además de los intérpretes oficiales, existen muchos otros igualmente válidos, algunos de los cuales bastante potentes, y siempre que las librerías y gems que vayamos a utilizar en nuestro proyecto sean compatibles con estos, no existe ninguna traba para usarlos.
El intérprete oficial (también llamado CRuby) se puede descargar en sus diferentes versiones desde la página oficial del lenguaje, aunque si utilizas Linux seguramente te sea más fácil utilizar los paquetes que te proporcione tu distribución. Algunos de estos intérpretes alternativos a CRuby son: JRuby, Rubinius, Ruby Enterprise Edition, y otros muchos que aún tienen algunos problemas de compatibilidad con librerías habituales.
Si tuviera que mencionar un favorito de entre los alternativos, ese sería JRuby, ya que no sólo su rendimiento es espectacular, sino que además permite la ejecución de aplicaciones Rails en entornos donde sólo tienen cabida servidores de aplicaciones en entornos Java como pudiera ser GlassFish. Esto permite que puedas colocar tu aplicación Rails en servidores de empresas que ya están siendo usados para servir otras aplicaciones escritas en Java sin tener que cambiar mucho el entorno del servidor.
Si además deseas poder trabajar con varios intérpretes simultáneamente desde tu máquina, te aconsejo que le eches un buen vistazo a Ruby Version Manager (RVM). Aunque tengo intención de dedicarle un artículo por separado en breve.
Software de virtualización
Aunque a menudo Rails se utiliza como backend web de ciertas aplicaciones, es más habitual que sea usado para programar una aplicación web completa, incluido el frontend. Y claro, cualquier aplicación web que se precie ha de probarse bien en diversos navegadores, no sólo el que tengas en tu máquina. Es por ello que el uso de un software de virtualización se vuelve imprescindible.
Yo trabajo con Mac, pero dado que he de probar el renderizado de las vistas en Internet Explorer, he de instalarme una máquina virtual para poder tener Windows en ella con este navegador, que no existe para otras plataformas. Es más, lo normal es tener más de una máquina virtual, cada una con una versión diferente del navegador, para realizar las pruebas con un entorno lo más fiel posible a aquel que utilizará el usuario. Si trabajas en Windows, necesitarás poder probarlo en Safari. Si trabajas en Linux, puede que necesites probar tu aplicación en los dos navegadores anteriormente mencionados. En definitiva, seguramente necesites un software de virtualización.
De entre los más famosos, se encuentra VirtualBox (que ahora pertenece a Oracle), el cual corre en todas las plataformas y es gratuito. Aunque también puedes usar Parallels, una de las opciones preferidas si trabajas con Mac, o VMWare, un clásico del mundo de la virtualización que no defrauda.
ImageMagick
Es muy habitual que tu aplicación web necesite poder manipular imágenes subidas por los usuarios. Y aquí la navaja suiza suele ser ImageMagick, un software que permite hacer recortes, giros, redimensionados, adiciones de texto superpuesto, y decenas de otros efectos, a imágenes que estén en casi cualquier formato. Si bien lo normal es utilizar una gema de Ruby que facilite estas operaciones utilizando un DSL sencillo, estas gemas suelen luego traducir las especificaciones de tamaños y cambios de proporción que hayamos escrito en comandos que utilizan las herramientas ImageMagick. Así que es casi obligatorio tenerlas instaladas.
Firebug
Aunque he de decir que últimamente utilizo más las herramientas para desarrolladores de Chrome, la herramienta favorita para obtener resultados similares es sin duda Firebug. Gracias a esta extensión para Firefox, podrás inspeccionar el DOM, realizar cambios en el mismo, echar un vistazo a las peticiones HTTP realizadas, depurar código Javascript, analizar el rendimiento de tu aplicación, y otras muchas actividades realmente útiles durante el desarrollo. Imprescindible.
Cliente de base de datos
Si bien podemos operar con la base de datos desde línea de comandos, probablemente existan muchas operaciones (especialmente de consulta) que sería más cómodo realizarlas desde una interfaz gráfica más amigable. Si trabajas con MySQL y estás en Mac, te recomiendo que descargues Sequel Pro. Es una aplicación muy cuidada, y con la que podrás manipular a tu antojo cualquier aspecto de tu base de datos. Si prefieres tener una solución web, que corre en todas las plataformas, entonces te recomiendo phpMyAdmin, desde el cual podrás igualmente hacer la mayoría de las operaciones entrando con cualquier navegador.
Servidor de integración continua
Es realmente sano hacer que los tests escritos para tu aplicación se corran de forma automática cada vez que subes algo al repositorio de control de versiones. Para este propósito, mi preferido es Integrity, un servidor muy ligero pero no por ello menos potente escrito en Sinatra.
Organizador de tareas
Es necesario que llevemos un control de las tareas que hemos realizado, estamos realizando o pensamos realizar, así como que marquemos unos objetivos a corto plazo y registremos cualquier tipo de notas relacionadas con las tareas o bugs que nos sirvan de base de conocimiento. Para todo esto, y para organizar el trabajo en equipo, lo mejor es utilizar un servicio online que encaje con vuestra forma de trabajar. En este caso, mis preferencias se decantan por Pivotal Tracker, un servicio web de gestión de tareas online que encaja perfectamente con la filosofía de trabajo SCRUM. Pero si prefieres un entorno más clásico de tickets, milestones y cosas así, o si sencillamente prefieres poder instalar la herramienta de gestión en tu servidor, Redmine es probablemente tu mejor opción. Y como está escrita en Ruby on Rails, siempre puedes extenderla fácilmente para ir adaptándola a tus necesidades.
Conclusión
Estas son algunas de las herramientas que utilizo a diario, y que se han convertido en parte imprescindible de mi trabajo. Espero que te resulten útiles para empezar. Y si ya trabajas con Ruby on Rails, esperamos que nos cuentes cuáles son tus preferidas.