На чем разрабатывать Oracle разработчику в 2019-м году (и после)
Некоторое время назад я в очередной раз сменил место работы. Новый работодатель был настолько любезен, что разрешил мне выбрать любую IDE, которая понравится, и оплатить лицензию (но в разумных пределах). Также (в кои-то веки) у меня были права администратора на рабочем компьютере, так что я мог ставить что угодно и пробовать сколько угодно. Я попробовал: Oracle SQL Developer, TOAD, Alt SQL Developer и (ВНЕЗАПНО!) IntelliJ IDEA (PL/SQL Developer не пробовал, но много работал раньше). Если вы регулярно пишете PL/SQL код, или хотя бы время от времени делаете запросы к Oracle Database, думаю, вам будет интересно почитать, к каким выводам я пришел.
Сразу хочу предупредить. Не могу сказать, что каждую из IDE изучил досконально, а PL/SQL Developer, кроме всего прочего, видел последний раз 5 лет назад. Поэтому всегда может оказаться, что когда я говорю «этого в IDE нет», на самом деле это там есть, просто я не нашел. А когда я говорю о PL/SQL Developer, я имею в виду версию, кажется, 8 (на которой писал 5 лет назад). Не исключено, что потом там многое изменилось, и не обязательно в лучшую сторону.
Участники соревнований
Итак, что у нас есть? В первую очередь, это то, что можно назвать большой тройкой Oracle-разработки: TOAD, PL/SQL Developer и Oracle SQL Developer. Эти продукты уже давно на рынке, их все знают, у каждого продукта есть своя армия фанатов. Я несколько раз сталкивался с мнением, что TOAD больше любят DBA, а PL/SQL Developer — разработчики. Про Oracle SQL Developer ничего такого не слышал, а армия его фанатов, судя по всему, состоит в основном из менеджеров, — и то только потому, что он бесплатный.
Кроме этого, я решил включить в обзор Alt SQL Developer (продукт, долгое время, а может быть, и до сих пор, разрабатываемый ОДНИМ человеком) и IntelliJ IDEA (он же Гоша, он же Гога, он же DataGrip).
Система там примерно такая: есть IntelliJ IDEA Community Edition — она бесплатная и для джавы. Есть несколько похожих платных продуктов (порядка пары сотен долларов/евро) — RubyMine для Ruby, DataGrip для баз данных, и так далее. И есть IntelliJ IDEA Ultimate Edition, которая дороже всего (примерно 650, кажется), но объединяет в себе функциональность всех продуктов JetBrains. Все эти продукты имеют идентичный интерфейс и очень сильно похожи, благодаря чему переходить с одного на другой проще простого — даже проще, чем с одной версии экселя на другую.
Поэтому далее по тексту мы говорим IDEA — подразумеваем DataGrip, мы говорим DataGrip — подразумеваем IDEA.
PL/SQL Developer
Я начал работать с ораклом в 2011-м году, и это была первая IDE, с которой я столкнулся. Так сложилось, что следующие три года везде, где я работал, использовался именно PL/SQL Developer. Я изучил его довольно неплохо, и он казался отличным инструментом. И хотя 2014-й год был последним годом, когда я запускал эту IDE, даже сейчас она кажется мне неплохим выбором. Главный минус — работает только под Windows.
Oracle SQL Developer
Бесплатная IDE, выпускаемая ораклом. Кроме бесплатности, имеет и другой плюс — кроссплатфоренность. Можно запускать и на линуксах, и на маках. Но, пожалуй, на этом плюсы и заканчиваются. Я ее впервые начал использовать году так в 2015-м. Работает сносно, но есть куча раздражающих мелочей. Дешево и сердито.
TOAD
Я пробовал начать работать с TOAD несколько раз в свой карьере. Каждый раз я запускал его и тут же у меня возникал вопрос — и чё дальше? Куда нажимать, чтобы начать работать? Последний раз был несколько недель назад, и я наконец-то ее осилил! Разобрался, где какая кнопка, где какая закладка. Эта IDE довольно мощная, но как-то бестолково организованная, имхо. Куча окон и закладок, в которых легко запутаться. И тоже только под Windows.
Alt SQL Developer
Знакомство с этой IDE началось с топика на форуме. На форум пришел какой-то чувак и сказал, что пишет свой PL/SQL Developer с блекджеком и шлюхами. Я никогда не пользовался этой IDE всерьез, только пару недель назад поставил и попробовал поработать один день. Выглядит как PL/SQL Developer, из которого выкинули весь ненужный мусор. К сожалению, несмотря на семилетнюю историю, она до сих пор сыровата. Не помню уже, с чем именно я там столкнулся, но для работы на моем текущем проекте она не применима, к сожалению. И вообще, закрадывается мысль, что автор разработку забросил. А жаль, для продукта, разрабатываемого одним человеком, — это очень достойный результат. Респект, уважуха и лучи поддержки! Опять же, только Windows, но в данном случае не будем придираться.
Intellij IDEA
Вообще-то сначала я просто хотел немного поизучать джаву и писал в этой IDE. А потом для одного из хобби-проектов понадобилось сделать базу на PostgreSQL, и оказалось, что и с БД IDEA отлично справляется! На текущем проекте начал плотно работать с этой IDE и в целом доволен. Правда, без ложки дегтя не обошлось: наткнулся на багу, которая серьезно попортила кровь (IDE перестала показывать объекты одной из схем — на беду, одной из самых необходимых). Написал баг-репорт, воркэраунд посоветовали на форуме JetBrains через пару дней, а до этого пришлось помучиться.
В разговоре с коллегами я как-то упомянул, что некоторое время назад решил начать изучать java — ну так, чисто для себя в основном. Начал с Eclipse, просто потому что слышал про эту IDE раньше. А потом, через год или два, знакомый посоветовал IDEA, я попробовал — и это была любовь с первого взгляда. Казалось, эта IDE понимает меня и чуть ли не читает мысли. Тут один из коллег спросил:
— А чем она тебя так зацепила?
— Ну, даже хотя бы чисто эстетически — там есть темная тема оформления, например.
— Но в Eclipse тоже есть темная тема!
— Нет, ты не понимаешь. Я скачал «Идею», установил, и при первом запуске первое, что она показала — это две картинки рядом. Темная тема или светлая — выбирай.
В этот момент наш фронтэндщик поднял палец вверх и многозначительно изрек:
— ВОООООТ! Юзер экспириенс!
Цена вопроса
Цены взяты с официальных сайтов, из расчета на одного разработчика. Как правило, у всех есть пакеты для большого числа разработчиков, и тогда все еще дешевле.
PL/SQL Developer: 216 долларов + 60 годовая поддержка.
Oracle SQL Developer: бесплатно.
TOAD: 1054 евро (ЛОЛШТО??? Может, я просто не туда посмотрел?)
Alt SQL Developer: 99 долларов
DataGrip: 199 евро первый год, 159 второй и по 119 последующие.
Разработка на PL/SQL в IDE
Пишем код
В первую очередь, процесс разработки состоит из чтения и написания кода. Ну, тут понятно: подсветка синтаксиса, автодополнение, навигация, всплывающие подсказки и все такое. Как справляются с этой задачей конкурсанты?
Если брать практическую сторону вопроса, то флагманы уверенно идут впереди. Автодополнение и навигация, имхо, лучше всего работали в PL/SQL Developer. В TOAD и IDEA чуть хуже, а вот Oracle SQL Developer мне так и не удалось заставить автодополнять удобным мне способом (а кроме того, у меня в нем постоянно слетают настройки — они почему-то вообще не сохраняются при выходе). Отдельно хочу отметить такой мелкий нюанс: если окно предложений для автодополнения уже закрылось по какой-то причине, то PL/SQL Developer умеет показывать его снова по Ctrl+Пробел. А еще всплывающие подсказки с названиями и типами агрументов функций. Остальные IDE не умеют, а если и умеют, то я не знаю, по какой клавише, и как эти опции называются в настройках, я тоже не знаю.
Также у PL/SQL Developer было еще несколько прикольных фишек, нужных именно для работы с SQL: сгенерировать в один клик перечень всех полей таблицы через запятую, поиск по коду в ALL_SOURCE, специальный режим отображения результатов селектов, когда поля идут в столбик, а в соседнем столбике одна строка данных. ОЧЕНЬ удобно, когда нужно посмотреть, какие поля и какие примерно данные есть в незнакомой таблице. Из всего этого у конкурентов я нашел только в IDEA поиск по коду и генерацию списка столбцов таблицы.
Настройки форматирования SQL и PL/SQL тоже есть у всех, более-менее одинаковые по мощности, и превью тоже есть. Разве что у TOAD они как-то слишком сложно сформулированы.
А вот с эстетической стороной вопроса флагманы справляются как-то не очень. Если в IDEA есть целая темная тема, то в остальных можно максимум сделать темный фон в редакторе кода. Фон в других окнах останется белым (в PL/SQL Developer, помнится, это частично тоже настраивается, но все в разных местах, чокнуться можно, у остальных вообще никак). Oracle SQL Developer единственный из оставшихся имеет несколько готовых наборов цветов для подсветки синтаксиса, включая набор с темным фоном. Остальные IDE по умолчанию имеют просто вырвиглазные высококонтрастные цветовые схемы и шрифт Courier new — имхо, самый уродливый моноширинный шрифт в этой части Вселенной. IDEA использует шрифт Consolas, он как-то поприятнее. Отдельно отличился TOAD (у меня версия 11.5): там есть баг, из-за которого символы %, &, * и ^ (а первые три очень часто используются в PL/SQL) не попадают ни в один набор символов в настройках, что приводит к невозможности задать им цвет шрифта. То есть они всегда остаются черными, и темная тема означает боль и страдания. И это продукт за штуку зелени? Это фиаско, братан.
Запросы, PL/SQL блоки и скрипты
Тут все на удивление ровно. Работа выглядит более-менее одинаково у всех, хотя без небольших сюрпризов не обходится. В Oracle SQL Developer очень неудобно включается вывод в консоль (нужно больше одного клика мышкой), а IDEA выводит таймстемпы, которые не отключаются — это мешает отлаживать процедуры, использующие динамический SQL.
Еще TOAD и IDEA умеют делать экспорт данных из таблицы в виде INSERT выражений.
PL/SQL Developer имел честный режим эмуляции SQL*Plus — отдельное окно, куда можно писать команды прямо как в самом SQL*Plus — с выводом прямо тут же. Остальные могут просто тупо выполнять скрипты, а output выплевывать в соседнее окно.
Еще стоит сказать об умении определять границы SQL-запросов. Oracle SQL Developer, PL/SQL Developer и Alt SQL Developer требуют обязательно отделять запросы точкой с запятой (а PL/SQL блоки — слэшем), а иначе они не понимают, где один запрос закончился, а другой начался. IDEA в этом плане немного умнее (и TOAD, кажется, тоже) — там можно написать два корректных запроса, не отделяя их друг от друга точкой с запятой, поставить курсор на один из них и выполнить его. Кроме того, IDEA перед запуском обводит распознанный запрос зеленой рамочкой, дополнительно позволяя убедиться, что выполнится именно то, что нужно.
Еще один важный пункт — это пошаговая отладка, но она, кажется, выглядит одинаково вообще у всех IDE, начиная чуть ли не с TurboPascal 7.0. И да, буквально неделю назад на форуме JetBrains написали, что пошаговая отладка PL/SQL в IDEA готова. Народ уже во всю тестирует.
Браузер объектов
Самые удобные браузеры объектов — у PL/SQL Developer и Alt SQL Developer. У них есть панелька слева с браузером, а справа можно писать код, а у PL/SQL Developer еще в добавок были возможности поиска и фильтрации объектов в той же панели. У Oracle SQL Developer почти так же хорошо, но мне нравится немного меньше. У TOAD мне не нравится то, что если смотришь браузер объектов, то в левой панели показаны собственно объекты, а справа, на остальной части экрана, отображаются их многочисленные свойства. А сделать так, чтобы слева были объекты, а справа — редактор кода, не получится. То есть информации TOAD дает может даже и побольше, но юзабилити — не его конек. У IDEA браузер объектов — самое слабое место, на троечку с минусом. С одной стороны, их можно понять, не ораклом единым, и даже не одними реляционными БД жив DataGrip, а с другой: назвался груздем — полезай в короб.
Зато IDEA умеет рисовать ER-диаграммы для уже существующих в БД таблиц, и вызывается эта функция из браузера объектов. За это ей жирный плюс.
Контроль версий
С контролем версий ситуация тяжелая. Так исторически сложилось (уж не знаю как, но это факт), что люди, работающие с Oracle, в основной своей массе довольно дремучи в вопросах организации процессов разработки в команде. Можете представить себе Senior Java (или С/С++/фронтенд) девелопера, который ни разу в жизни не работал ни с одной системой контроля версий? А вот Senior Oracle девелопера можно найти довольно легко — последнего такого я видел не далее как в прошлом году. Про тесты и говорить не приходится (на прошлой работе я показал нашему «лиду» APEX-разработки простенький тестик на Java + Selenium, а он мне в ответ — «Ни в коем случае! Никаких тестов! Это ж в два раза больше работы — и тесты, и код поддерживать!»), а за выражение «Continuous Integration», кажется, меня бы там убили на месте (поэтому я не выражался).
По этой причине мне не удалось толком протестировать возможности по работе с системами контроля версий PL/SQL Developer и Oracle SQL Developer.
Перед написанием этой статьи я запустил Oracle SQL Developer на домашнем компе. Подключился к репозиторию, сделал clone, изменил файл, посмотрел изменения в окне сравнения версий, нажал commit… Получил java exception, расписался. Но у меня старая версия, двух- или трехлетней давности. На работе стоит свежая, она этот тест с честью прошла. Ха-ха.
Я работал в IDEA с git, и IDEA в этом плане идеальна. Мои коллеги используют SourceTree для работы с гитом (я использую и то, и то), и я могу сказать, что IDEA переигрывает SourceTree на его же поле — при том, что SourceTree вообще ничего другого не умеет.
У остальных IDE пункт в меню для работы с системами контроля версий номинально присутствует, но больше я ничего не знаю.
Выводы, которые я для себя сделал
По соотношению цена/качество с большим отрывом выигрывает Oracle SQL Developer: еще бы, если ноль поделить на какое-нибудь число, получится ноль ;) А если отбросить шутки, то кросс-платформенность и бесплатность — практически единственные его плюсы. И чисто с идеологической точки зрения: если посмотреть на финансовые возможности разработчиков перечисленных IDE, то Oracle — самая богатая компания. Однако, если брать фактическую функциональность и удобство работы, их софтина — самая убогая.
Alt SQL Developer — тоже довольно простенькая программка, и, имхо, она не стоит даже тех 99 баксов, которые за нее просят. Но ёлки-палки: во-первых, она довольно качественно косплеит PL/SQL Developer, а во-вторых, написана одним человеком в свободное от работы время, а не корпорацией с многомиллиардной стоимостью. Упоминания в одном ряду с флагманами она точно заслужила.
TOAD — мощная софтина, но с нечеловечески неудобным интерфейсом и запредельной стоимостью. Я не знаю, как можно за нее платить штуку баксов (все еще надеюсь, что просто не туда посмотрел). 200 — я б еще подумал и все равно бы не купил.
PL/SQL Developer — был моим идеалом до появления IDEA. Перечитав эту статью, понял, что PL/SQL Developer даже пятилетней давности был лучше, чем большинство его конкурентов сейчас.
Какую IDE выбрал я?
Я на данный момент выбрал IntelliJ IDEA и хочу попробовать объяснить, почему. Казалось бы, некоторые вещи она умеет хуже, чем конкуренты (браузер объектов), а в остальном — плюс-минус то же самое. Но, тем не менее, IDEA имеет несколько киллер-фич, которые с лихвой перевешивают недостатки. О них чуть подробнее.
Live Template. Совершенно невозможно не упомянуть одну из киллер фич IDEA — Live Template. Что такое Code Template — знают более-менее все, и во всех оракловых IDE это есть. Вы пишете условное сокращение, а IDE заменяет его длинным. Например, вы можете сделать настройку, чтобы IDE заменяла «sft» на «select * from ». В IDEA пошли дальше, и эта функция называется Live Template. Вы можете внутрь шаблона вставить специальные выражения, обрамленные знаками »$», и IDEA не только сделает автозамену, но и по нажатию на Enter будет перемещать курсор по тем местам, где стояли эти выражения.
Допустим, у вас есть переменная MY_COL
, которая содержит коллекцию. Нужно написать PL/SQL код для обработки этой коллекции. Можно просто написать, а можно сделать шаблон! Заходим в Settings, находим пункт Live Template, справа нажимаем на плюсик.
Заполняем: Abbreviation — ну, например, «fori». Description — по желанию. Template text — вводим туда следующее:
for i in $collection$.first .. $collection$.last loop
$END$
end loop;
Внизу нужно еще выбрать Applicable context. Это нужно для того, чтобы для разных языков можно было использовать одинаковые сокращения. Нажимаем ОК. Теперь в редакторе: набираем fori, потом нажимаем TAB. Появляется шаблон кода, а на месте $collection$ появляется красная рамка и курсор. Теперь нужно набрать «my_col» и нажать Enter. У вас должно получиться:
for i in my_col.first .. my_col.last loop
end loop;
Причем обратите внимание — курсор появится на месте $END$, то есть не после вашей конструкции, а где-то внутри, — вы управляете этим поведением!
По описанию это может быть не очень понятно, поэтому лучше поставьте IDE и поупражняйтесь. Гарантирую, вам понравится.
Refactoring. Просто автозамена текста есть у всех, даже в блокноте, наверное. А вот чего у «большой тройки» нет, так это чуть более интеллектуальной автозамены. Если у вас в пакете есть несколько функций, в которых используются переменные или параметры с одинаковым названием (и даже если просто такое сочетание символов используется где-то еще), то автозамена переименует их все. А если нужно переименовать именно переменную в одной из функций, то тут придется следить и делать автозамену в полуавтоматическом режиме. IDEA решила эту проблему — по Shift+F6 вы можете переименовать именно то, что вам нужно. И это только цветочки, рефакторинг — это немного более сложная штука.
А также…
В 2009-м году известный специалист по проектированию интерфейсов Алан Купер выпустил третье издание своей книги «Об интерфейсе». Там он, в частности, обратил внимание читателя на такой странный факт: любая прикладная программа для обработки хоть каких-то пользовательских данных (тут имеется в виду любая из реально существующих — ну там Word, Excel, notepad, Paint, и так далее) может создать файл, дать ему имя, писать в него данные и т. п., но ни одна (!!!) не умеет переименовывать уже открытый этой же программой файл, хотя никаких ограничений со стороны ОС для этого нет. Для переименовывания файла закройте его, обратитесь к услугам ОС, потом откройте заново. Юзабилити, ага.
Это была присказка, сказка будет впереди. Таки IDEA эту функцию осилила!!! Не прошло и 10 лет, как говорится. Переименование файлов — это часть функциональности рефакторинга.
Ждем остальных…
Code Inspection Кто давно читает Хабр, тот наверняка видел регулярно появляющиеся статьи одной компании, разрабатывающей свой продукт для статического анализа, и наверняка успел проникнуться самой этой концепцией. Как внезапно оказалось, в IDEA есть некоторый набор правил и для анализа PL/SQL. Там, конечно, набор пока бедненький, и я уже собираюсь закинуть им Feature Request с несколькими новыми правилами, но даже то, что есть, способно принести немного пользы. Проверив всего один пакет наугад, я нашел одну неиспользуемую переменную и четыре… эээ… как это по-русски?… unreachable statements. А потом оказалось, что эти unreachable statements образовались случайно, когда текст правили, и в итоге это были таки баги.
Запуск скриптов. IDEA умеет запускать bat/bash файлы, это настраивается прямо из IDE. Предельно просто: открываем соответствующий файл, IDEA предлагает поставить плагин для работы с этим типом файлов, соглашаемся, плагин сам ставится (за несколько секунд), конфигурируем запуск, работаем дальше. Очень удобно, если вы пользуетесь скриптами для запуска SQL*Plus. Также мы используем модульные тесты для PL/SQL, написанные на Ruby, и точно также они запускаются из той же IDE (но для Ruby вам уже придется ставить IDEA Ultimate Edition, DataGtip не подойдет).
Usability. В конце концов, IDEA — это просто удобно. У IDEA есть куча плагинов. Просто плагинами уже никого не удивишь, они есть вообще везде. Но IDEA может, например, сама определить, что у нее есть плагин, который может вам помочь. Типовой кейс — вы открываете какой-то файл, IDEA выводит сообщение «существует плагин для работы с этим типом файлов» и предлагает его скачать и сконфигурировать. И вообще, часто, когда случается какая-то непонятная фигня, IDEA показывает всплывающую менюшку со списком возможных действий по исправлению этой фигни. Очень приятная забота о пользователе.
У IDEA есть поиск по справке. Если вы знаете название какой-то фичи IDE, вам достаточно зайти в справку и набрать это название в поисковой строке, далее IDE вам сама стрелочкой покажет, где эта функция.
TL; DR IDEA — это айфон от PL/SQL разработки. Могу только пожелать разработчикам IDEA дальнейших успехов, а разработчикам остальных IDE хочу напомнить, что динозавры, которые не смогли эволюционировать — вымерли.
P.S. Закончить статью не удавалось очень долго. Кажется, функций в любой современной IDE столько, что изучать и писать о них можно бесконечно, а уж изучать 5 разных IDE и описывать разницу между ними — это еще более бесконечно. Тут я изложил самые важные лично для меня вещи, и вообще описал много личного в терминах «нравится — не нравится», «удобно — неудобно», «красиво — некрасиво». Тем не менее, надеюсь, читатели получат общее представление и смогут примерить описанное на себя.
P.P. S. JetBrains, с вас пиво ;)