Как быстро разобраться в незнакомом Rails приложении

Illustration of a person looking at a cluttered room with various items strewn about, holding their head in dismay, with a speech bubble containing symbols of frustration. Illustration of a person looking at a cluttered room with various items strewn about, holding their head in dismay, with a speech bubble containing symbols of frustration.

Это перевод статьи Finding Your Way Around a New Rails Project от Джастина Уэйсc. Джастин веб-разработчик, автор нескольких Ruby-гемов и автор книги Practicing Rails. Перевод выполнен Алексеем Ходос с согласия и одобрения автора оригинала специально для mkdev.

Представь, что ты сменил команду или приступил к новому проекту на новом месте работы. Или же нашёл баг в любимом open-source проекте и задумал отправить свой первый пулл-реквест. И сразу же потерялся, глядя на app/models после выполнения git clone. Бывает непросто понять код, даже несмотря на то, что структура Rails та же самая, которую ты обычно используешь. Как же быстрее всего начать работать с незнакомым приложением?

Создаём словарь

Что такое Player, что такое Session? Как насчет выбора между Account, User и Provider?

В каждом приложении могут быть свои термины и определения. И, не понимая словаря, которое используется в приложении, ты будешь терять время, разглядывая app/models каждый раз, когда натыкаешься на новый класс. Или, что ещё хуже, будешь делать неверные предположения о том, как работает та или иная фича.

Итак, первым делом правильнее всего создать словарь. Узнать, из чего сделано данное приложение. Если хочешь сделать это быстро, то изучи файл db/schema.rb. Ты узнаешь о терминах, используемых в приложении, а также познакомишься со структурой данных. Уделив внимание столбцам *_id, ты поймёшь, как модели связаны между собой.

Если ты предпочитаешь наглядность, то можно использовать гем rails-erd. На основании моделей он создаст диаграмму, отображающую столбцы, таблицы и их взаимодействие. Если положить распечатку на стол, то , поглядывая в него, будет намного легче разбираться с остальной частью приложения.

Продолжаем с моделями и простыми объектами Ruby

В хорошо спроектированном Rails приложении ты не найдёшь всей информации в файле схемы. Продолжая создавать свой словарь, просмотри app/models на наличие дополнительных классов и атрибутов, которые отсутствуют в db/schema.rb.

Но не задерживайтесь на этом этапе. Тут легко потеряться, выясняя как все это работает. Мы здесь сейчас только для составления словаря.

Начиная понимать из чего состоят части приложения, ты начнёшь задаваться вопросом о назначении определенных объектов, или почему они связаны именно таким образом. Сейчас мы разберем этот момент.

Запускаем приложение, и выясняем «Почему»

Хорошо изучив объекты, которое использует приложение, запусти его. Потыкай в разные места, хорошенько исследуй. Если есть документация, то она может помочь. Как бы то ни было, тв вживую увидишь всё, о чём только что узнал.

Работая с приложением, ты начнёшь его осваивать с верхнего уровня. Поймёшь причины, по которым модели связаны именно таким образом. Для чего они сгруппированы. Почему были выбраны именно эти названия классов. Может быть они отображаются на страницах совместно, а может располагаются на своих собственных формах.

И когда ты начнёшь понимать из чего состоят части приложения и для чего они существуют, ты будешь готовы понять, как это все работает.

Выясняем «Как»

К этому моменту ты уже достаточно знаешь о приложении, чтобы углубиться в его детальное исследование. Тебя не должны смутить новые термины и новые взаимодействия внутри его. Ты можете выбрать что-то одно, что тебя интересует, и всё про это разузнать.

С этого момента у тебя есть множество путей на выбор. Вот мои любимые:

  • Изучи пользовательский интерфейс программы и подумай: как эта функциональность могла быть реализована, основываясь на имеющихся у тебя знаниях о компонентах программы? Сможешь догадаться сам? Используй отладчик, чтобы подтвердить свою догадку, или узнать как это работает на самом деле.
  • Выбери тест-кейс и пройдись с ним по всему приложению. Ну или можно пройдись по коду, или же изучить с помощью отладчика.
  • Выбери маршрут или действие контроллера. Теперь разберись, как вызвать это действие из пользовательского интерфейса?

Сейчас также подходящее время, чтобы вернуться к моделям и простым Ruby объектам. Теперь ты можешь копнуть глубже и посмотреть как работают модели.

Покопайся в приложении. Найди пробелы в своих знаниях и заполни их, используя отладчик и имеющийся код.

Почему бы не начать с тестов?

Я часто слышал фразу «Если хотите понять программу, начните с тестов! Это документация в исполняемом виде!»

Но для меня это никогда не работало. Тест-кейсы слишком узконаправлены, слишком детализированы. Если я беру информацию о приложении из тестов, то мне кажется, что я пропускаю что-то более глобальное.

Для того, чтобы понять большое приложение на Rails, или даже большинство гемов, я всегда сначала провожу общий обзор. Я должен знать, из каких компонентов состоит программа и для чего они созданы.

Но, вне всякого сомнения, необходимо запустить тесты. Если они проходят с ошибками, то вы работаете со сломанной программой. И ты не можешь полагаться на информацию, полученную от такой системы.

Из чего, зачем и как

Чтобы понять незнакомое Rails приложение, выполни три шага в следующем порядке:

  • Из чего и каких частей состоит программа?
  • Зачем они созданы? Почему они связаны вместе именно таким образом?
  • Как работает каждая часть в отдельности?

Это позволит взглянуть на программу как в общем виде, так и в разрезе компонентов, что необходимо для понимания программы и успешной работы с ней.