RubyMine: IDE для Ruby. Часть 2Автор: Виктор Деревянко Опубликовано: 31.07.2009 Источник: SoftKey.info В первой части статьи речь шла о возможностях редактора RubyMine, средствах рефакторинга и отладки. Вторая часть посвящена более специализированным возможностям этой среды разработки - поддержке Ruby on Rails, интеграции с системами контроля верстки и средствами автоматизации тестирования.
Среда разработки RubyMine создана, в первую очередь, для Rails-разработчиков. Поддержка Ruby on Rails встроена в RubyMine на самом низком уровне и затрагивает практически все функциональные возможности среды: рефакторинг, средства навигации, автозавершение кода, анализ кода, запуск, отладку и т.д. RubyMine 1.0 поддерживает все версии Rails, начиная с 1.2 до текущей (2.3). RubyMine поддерживает все основные технологии, применяемые при разработки Rails-приложений, включая системы модульного тестирования, BDD, шаблоны RHTML и формат YAML.
Rails-приложения строятся на основе готового каркаса модель-представление-контроллер (MVC). При этом используются стандартные соглашения о конфигурации приложения, от которых отступают только в редких случаях. Соглашения накладывают определенные ограничения на файловую структуру проекта и на именование классов, выполняющих те или иные роли в MVC. Все эти соглашения учитываются функциями RubyMine.
В RubyMine есть отдельный тип проекта для Rails-приложения. При создании такого проекта формируется готовая инфраструктура Rails-приложения, в которую автоматически добавляются все необходимые составляющие. Окно менеджера проекта поддерживает специальный вид "Rails view", отображающий логическую структуру Rails-приложения. Классы приложения собраны в логические группы - контроллеры, модели, виды, тесты и т.д.
 | | Специальный Rails-view для отображения структуры проекта | RubyMine позволяет создавать компоненты Rails-приложения. Делается это с помощью Rails-генераторов. Генераторы создают шаблонную реализацию классов, которую разработчик в дальнейшем наполняет реальным кодом. Созданные генератором файлы автоматически размещаются в "правильных" директориях в соответствии с требованиями Rails-архитектуры. Вызвать генератор можно с помощью команды Generate в контекстном меню редактора или с помощью команды New в контекстном меню менеджера проекта.
 | | Список команд для создания конструкций Rails-приложения | Команда рефакторинга "Rename" в Rails-приложении так же учитывают структуру Rails-приложения. Переименование одного компонента приводит к переименованию всех связанных компонентов - контроллеров, видов, тестов и т.п. Например, переименование "PictureController" в "ImageController" приводит к замене "picture" на "image" в названиях файлов ("picture_helper.rb", "picture_controller.rb"), классов ("PictureControllerTest", "PictureController") и TODO-выражениях (:controller => "picture"). Нужно лишь следить за тем, чтобы при переименовании новое имя соответствовало соглашениям именования Rails (например, оканчивалось на Controller), иначе новое имя не будет правильно распознано и Rail-рефакторинг не сработает.
 | | Рефакторинг Rails-приложения | Средства навигации между Rails-компонентами расширены за счет команды "Navigate to Rails" (Alt+Shift+N), которая позволяет быстро перейти от контроллера к соответствующей модели, от теста к виду и т.п.
 | | Окно "Navigate to Rails", расширяющее возможности навигации в Rails-приложении | RubyMine позволяет построить диаграмму зависимости моделей ("Model Dependency Diagram"), наглядно демонстрирующую взаимосвязь моделей Rails-приложения. Находясь в окне диаграммы можно выполнить рефакторинг выбранного класса модели, найти все случаи его использования в проекте, перейти к выбранному классу и к описанию выбранной связи между моделями. Классы на диаграмме можно расположить несколькими стандартными способами (по кругу, ортогонально, иерархично и т.п.), можно подвигать по диаграмме вручную. Готовую диаграмму можно распечатать, экспортировать в графический файл.
 | | Диаграмма зависимости моделей ("Model dependency diagram") | Диаграмма зависимости моделей оказывается очень полезной при работе с базами данных. RubyMine поддерживает технологию объектно-реляционной проекции (ORM) в Rails, позволяющую записывать объекты программы в реляционную базу данных. В RubyMine предусмотрены генераторы, создающие таблицы в базе данных и задающие миграции, описывающие поля таблицы. Диаграмма зависимости моделей дает удобный способ просмотра структуры базы данных и зависимостей между таблицами.
В целом, учет структуры Rails-приложения функциями среды разработки - это мощный плюс. Навигация по коду - удобнее, рефакторинг - мощнее, автозавершение кода - точнее, просмотр структуры проекта - нагляднее, создание новых компонентов приложения - быстрее, работа с базами данных - проще. И, в результате, работать гораздо комфортнее.
Поддержка Unit Testing
Фреймворк Ruby on Rails нацелен на быструю и качественную разработку веб-приложений. Так что не удивительно, что при разработке Rails-приложений активно используется гибкая методология разработки ("agile development"). И, в частности, методики автоматизированного тестирования кода: модульное тестирование ("unit testing") и BDD ("Behavior Driven Development", разработка, основанная на функционировании).
RubyMine поддерживает несколько вариантов реализации методик автоматизированного тестирования: RSpec, Test::Unit, Test/Spec и Cucumber. Поддержка весьма широкая: автозавершение кода для RSpec, шаблоны файлов для создания Test::Unit и Test/Spec тестов, встроенные средства запуска текстов, полностью интегрированные в IDE и способные запускать тесты через Rake-tasks, команды для навигации между кодом и соответствующим тестом в Rails-приложении, специальные команды для запуска тестов для выбранного метода, класса, BDD-примера и т.д.
 | | Окно с результатами тестирования | Тесты можно запуска по отдельности, по несколько штук или все сразу. Результаты тестирования отображаются внизу, в окне "Run". Окно содержит две вкладки. На вкладке "Output" выводится информация о ходе тестирования и об ошибках. На вкладке "Statistics" показывается статистика по запущенным в данный момент тестам, причем статистика обновляется "налету", в процессе проведения тестирования. Имеется возможность быстро перейти к линии кода в которой произошла ошибка в тесте - со средствами навигации по коду в RubyMine полный порядок.
Контроль версий
Контроль версий в RubyMine двухуровневый. Первый уровень обеспечивается локальной историей ("Local History"). Локальная история - это персональная система контроля версий, учитывающая все внесенные в проект изменения, позволяющая отследить и отменить любые изменения. Локальная история независима от внешней системы контроля версий и работает даже тогда, когда никакая система контроля версий не используется. Включать локальную историю не требуется - эта функция включена всегда. Так же, как в обычной системе контроля версий, в локальной истории есть ревизии. Ревизии создаются автоматически по факту внесения изменений и при проведении каких-либо действий (например, при открытии, запуске и компиляции проекта). Ревизию можно создать вручную и пометить тегом. Локальная история хранится в файловом кеше, максимальный размер которого устанавливается в настройках. При перезапуске RubyMine локальная история не теряется. Локальная история учитывает изменения на всех уровнях: на уровне проекта, директорий, пакетов, файлов, классов, членов класса и даже выбранных фрагментов текста.
 | | Локальная история в RubyMine - встроенная система контроля версий. | Второй уровень контроля версий обеспечивается внешней системой контроля версий. RubyMine поддерживает интеграцию с Subversion, Git, CVS, StartTeam, SourceSafe и Perforce. С помощью плагинов можно добавить поддержку других систем. Большинство систем контроля версий поддерживают общий набор возможностей - загрузка файлов из репозиторий, запись изменений, обновление, добавление файлов в репозиторий и т.д. В RubyMine предоставляет общий интерфейс для вызова этих функций. Команды, специфичные для выбранной системы контроля версий, вызываются через отдельное меню. Например, при интеграции с Subversion команды "Update", "Commit", "Cleanup" можно вызывать через общий интерфейс, а команды "Lock", "Branch or Tag" - через подменю "Subversion".
 | | Интеграция с Subversion. Внизу - два списка изменений. | Все измененные файлы RubyMine автоматически добавляет в список измененных файлов ("changelist"). Подобных списков можно создать сколько угодно, но активным (в который файлы добавляются автоматически) можно сделать только один. Файлы между списками можно свободно перемещать, что дает возможность группировать изменения. Над группами изменений можно выполнять различные действия - сохранять изменения в системе контроля версий, отменять изменения, создавать патчи и, даже, временно откладывать изменения - "на полку". В RubyMine есть такая возможность - временно "отменить" выбранные изменения, а потом вернуть их обратно. Когда вы серьезно перерабатываете код проекта и, в этот момент, вам требуется срочно внести в текущую версию кода мелкую доработку, такая возможность просто не заменима.
Лицензии
RubyMine доступна под двумя лицензиями - коммерческая лицензия и бесплатная лицензия для opensource-разработчиков.
Расширяемость IDE
SDK для RubyMine пока нет. Но будет. Пока же возможности RubyMine можно расширять с помощью скриптов, написанных на Ruby.
Системные требования
IDE кроссплатформенная, есть версии для Windows, Mac OS X и Linux.
Конкуренты
NetBeans 6,
RadRails/Aptana Studio,
3rd Rail,
VIM for Rails,
TextMate,
Emacs for Rails и
Ruby In Steel (для любителей Visual Studio).
Выводы
RubyMine - среда разработки, оптимизированная для Rails-разработчиков. Rails-приложения используют ряд соглашений о конфигурации, которые накладывают ограничения на способы именования классов и файловую иерархию в проекте. RubyMine активно учитывает эти соглашения, в результате чего все привычные функции IDE изменяются и обрастают новыми (зачастую, качественно новыми!) и удобными возможностями. RubyMine позволяет использовать все основные версии Ruby, поддерживает несколько систем автоматического тестирования, интегрируется с большинством популярных систем контроля версий и, действительно, очень удобна в работе.
Несмотря на то, что продукт появился совсем недавно, его возможности впечатляют - сказывается наследие IntelliJ IDEA. Но все это - только начало. У разработчиков море идей и планов на будущее. Причем новые версии программы выходят одна за другой. И новую, предварительную версию RubyMine 1.5, с поддержкой Ruby 1.9, можно скачать и попробовать уже сейчас.
|