Как быстро разобраться в незнакомом 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.
Обновлено: | Опубликовано:

Это перевод статьи 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 приложение, выполни три шага в следующем порядке:

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

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

Subscribe to our Newsletter

Let us send you the best of what we've discovered in DevOps, Cloud and Kubernetes, as well us occasional event announcements.

We are also preparing some ways to learn together: weekly challenges, free courses and more. Subscribe now to be the first to get those.