Um dos anúncios mais interessantes recentemente feito à comunidade Ruby foi o lançamento da IDE JetBrains RubyMine para aplicações Ruby e Ruby on Rails. Tal comunidade é conhecida por não utilizar um ambiente integrado de desenvolvimento (IDE), tal como desenvolvedores .Net ou Java fazem. Desenvolvedores Ruby normalmente atém-se à editores de texto puro como o TextMate, Vim e Emacs.
RubyMine 1.0 foi lançado à pouco tempo com a esperança de atrair os desenvolvedores Ruby com suas, muitas, características que tornam o programador mais eficiente.
A InfoQ teve a oportunidade de conversar com o desenvolvedor líder do RubyMine, Dmitry Jemerov de JetBrains, sobre o futuro da tecnologia.
Robert Bazinet (RB): O que é RubyMine?
Dmitry Jemerov (DJ): É uma nova IDE para projetos Ruby e Rails que vieram do JetBrains. É a primeira na família de IDEs leves criadas sobre a plataforma Intellij IDEA, para depois ser acompanhada por IDEs para desenvolvimento WEB (HTML/CSS/JS/PHP), Python e outras.
RB: Quem é você e qual seu papel no projeto RubyMine?
DJ: Sou o desenvolvedor líder do projeto. Minhas responsabilidades incluem todo o planejamento de lançamentos, projetar a arquitetura do produto, trabalhar com a plataforma Intellij IDEA (adaptando-a para o uso do RubyMine e outros produtos) e ajudar com a codificação, resolução de bugs e suporte sempre que preciso.
RB: Quem é o público alvo do RubyMine?
DJ: No momento nosso alvo principal são os desenvolvedores Rails, apesar de que tais desenvolvedores trabalhando em projetos não Rails também podem encontrar características úteis no RubyMine. Estamos estudando outros ambientes de trabalho que são populares na comunidade Ruby e é possível que alguns deles sejam suportados em futuras versões.
RB: Então, desenvolvedores que dominem Intellij podem usar um plugin e terão todas as funcionalidades do RubyMine?
DJ: Em geral, sim. O plugin Ruby para Intellij IDEA e rubyMine têm a mesma funcionalidade - eles foram construídos a partir do mesmo código base. Porém, RubyMine utiliza a plataforma Intellij mais nova publicamente disponível no momento (Intellij 8.x) portanto, algumas características podem não estar disponíveis no plugin por causa desta limitação. Uma vez que o plugin Intellij IDEA 9 seja lançado, o conjunto de funcionalidades do plugin e do RubyMine devem se tornar iguais. Você encontrará mais repostas no endereço http://www.jetbrains.net/devnet/docs/DOC-1146
RB: Muitos desenvolvedores Ruby e Ruby on Rails têm escolhido usar editores de texto puro como TextMate, Vim e Emacs. Você imagina estes usuários migrando para RubyMine?
DJ: Sim, já estamos vendo alguns usuários migrando e definitivamente queremos fazer o RubyMine atrativos para qualquer um que use editores de texto puro. Apesar de sempre existir uma diferença de desempenho entre editores de texto e uma IDE, achamos que as vantagens de produtividade oferecidas por uma boa IDE superará esta diferença. Somado à isto, planejamos tornar o nível de processamento feito em background pelo RubyMine mais configurável, assim quem quiser uma IDE mais rápida ao custo de não ter algumas características poderá fazê-lo com RubyMine.
RB: Desenvolvedores que usam TextMate, e suas facilidades, as terão suportadas pelo RubyMine?
DJ: Existe um esquema de teclado do TextMate disponível no RubyMine e planejamos criar conversores para esquemas de cores do TextMate e de snippets (para convertê-los para RubyMine live templates).
No momento não temos maiores planos que estes mas estamos abertos para idéias e ficaríamos felizes em ver plugins de terceiros suportando tais funcionalidades.
RB: No quê RubyMine é diferente de outras IDEs Ruby/Rails como NetBeans e Aptana RadRails?
DJ: Algumas das características inovadores do RubyMine são:
- Entende o significado dos parâmetros de chamadas específicas do Rails (como render, redirect_to, has_many etc., o que nos permite oferecer preenchimento de código, validação e assistentes para refatorar os parâmetros destas chamadas
- Refatoração consciente do Rails (renomeando controllers, views e etc. Atualização correta de todas partes ligadas da aplicação)
- Diagrama do modelo de dependência oferecendo uma visualização rápida da estrutura da aplicação Rails
- Bom suporte à HTML, CSS e JavaScript
- Boa integração com controle de versões, com características avançadas como Shelve Changes (permitindo deixar de lado grupos de atualizações no código fonte por um tempo) e Committed/Incoming Changes (fácil maneira de procurar mudanças feitas por outros membros da equipe)
RB: IDEs que têm tentado implementar auto preenchimento de código foram criticadas por sua falta de precisão, como a implementação do RubyMine garante esta precisão?
DJ: RubyMine atualmente entende a maioria da semântica do código Ruby, incluindo algumas características de meta programação como ganchos "incluídos". Por causa disto, praticamente nunca precisa mostrar a lista de todos os identificadores do projeto, fazendo-o somente para os identificadores ou membros visíveis no escopo atual.
RB: Notei, ao inicializar o RubyMine, referências ao JRuby, como ele é utilizado com o RubyMine?
DJ: Alguns dos componentes de alto nível do RubyMine (suporte à refatoração, algumas inspeções, ações de intenção, dentre outros) são escritos em Ruby e são executados em um interpretador JRuby. Também planejamos permitir que usuários escrevam suas próprias extensões RubyMine em Ruby.
RB: RubyMine irá permitir que desenvolvedores criem add-ons e plugins utilizando que tipo de SDk?
DJ: Até agora não oferecemos uma SDK similar com a disponível para Intellij IDEA. Isto será feito em verões posteriores.
Porém, alguns plugins Intellij já podem ser facilmente atualizados para serem utilizados com o RubyMine. Aqui um exemplo: http://plugins.jetbrains.net/plugin/?id=4255.
Também é possível estender o RubyMine utilizando scripts escritos em Ruby. Você pode ver diversos destes scripts no diretório <%RubyMine_Home%>/rb/scripts. E em %RubyMine_Home%>/rb/api você pode ver as versões preliminares da API Ruby. Esta abordagem ainda está em desenvolvimento e ainda não estamos a promovendo ativamente. No futuro adicionaremos um Script Manager com a UI para o gerenciamento de scripts. Mas agora não é o momento certo para isto.
RB: Você pode descrever um pouco o debugger do RubyMine?
DJ: O debugger do RubyMine utiliza o mesmo motor (ruby-debug-ide) que o NetBeans e o RadRails, e tem as mesmas características configuradas. Suporta breakpoints (incluindo os condicionais), visões de quadros, visualização de variáveis locais, threads, visualizadores, execução passo à passo, avaliação de expressões. Breakpoints também podem ser configurados em visões Erb. O suporte à Debugging remoto foi adicionado em RubyMine 1.0.5, lançado hoje (14 de maio).
RB: Que parser RubyMine está utilizando?
DJ: RubyMine utiliza seu próprio parser e lexser, desenvolvidos internamente pela JetBrains.
RB: Que tipo de suporte à refatoração RubyMine oferece?
DJ: RubyMine 1.0 oferece suporte à:
- Mudança de nome (Rails consciente, atualização correta em chamadas Rails e arquivos relacionados ao elemento que está sendo renomeado)
- Move (também com a devida atualização de suas referências)
- Introduce Variable (com a possibilidade de detectar duplicatas da expressão que está sendo extraída e trocá-la pela nova variável)
- Extração de métodos (com a análise completa do caminho dos dados para detectar os parâmetros de entrada e saída)
RB: Você poderia dar alguns detalhes aos leitores sobre outros pontos de suporte à refatoração nas próximas versões?
DJ: Aqui está a lista planejada para o RubyMine 1.2 que estará disponível no meio do verão.
- Introduce Constant
- Introduce Parameter
- Introduce Field
- Inline Local
- Pull Up / Push Down
- Extract Module
RB: Que tipos de suporte à TDD o BDD é oferecido no RubyMine e como vê isto sendo utilizado pelos desenvolvedores?
DJ: RubyMine 1.0 suporta Test::Unit e RSpec, e estamos trabalhando no suporte à Cucumber, que está planejado para o lançamento do RubyMine 1.1. A comunidade Rails tem uma cultura de testes muito forte, assim achamos que o suporte à testes é uma características necessária à qualquer IDE Ruby ou Rails.
RB: RubyMine trabalha com qualquer das variantes do Ruby, incluindo MRI Ruby 1.8.x, 1.9.x, JRuby, Rubinius, IronRuby, etc?
DJ: Testamos o RubyMine com o MRI Ruby 1.8.x, JRuby, IronRuby e MacRuby. No momento não provê suporte às novas características do Ruby 1.9; suporte este que está planejado para as próximas versões do RubyMine.
RB: Uma vez que RubyMine suporta IronRuby, este suporte foi testado no sistema operacional OS X com IronRuby sendo executado sobre Mono?
DJ: Nós não testamos esta característica de maneira muito minuciosa. Tal configuração não é suportada out-of-the-box, mas é possível fazê-la funcionar com alguma configuração manual. Se houver demanda para ela, providenciaremos suporte necessário em futuras versões.
RB: O que haverá de novo em versões futuras da IDE?
DJ: O planejamento para futuras versões do RubyMine pode ser encontrado em nosso portal Web.
Algumas características importantes de se salientar são:
- Suporte à refatoração mais ampla
- Suporte à HAML e SASS
- Integração com RCov
- Integração com bases de dados (execução de consultas built-in, suporte à realce de sintaxe SQL etc.)
RB: Como será a agenda para lançamentos e eles serão efetuados na medida que bugs forem relatados?
RB: Planejamos publicar versões principais do RubyMine de 3 a 6 meses, com diversas atualizações para resolução de bugs seguindo cada lançamento. No ínterim, Early Access Preview (imagens instantâneas da atual versão em desenvolvimento) serão publicadas a cada 1 ou 2 semanas.
RB: Dmitry, obrigado por dedicar seu tempo conversando comigo hoje. Maiores informações sobre RubyMine 1.0 podem ser encontradas no portal JetBrains.