TL;DR: How I Boosted Productivity Using an Application Template Repository

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

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

После некоторых размышлений и исследований я обнаружил репозитории шаблонов на GitHub. Концепция проста: создайте репозиторий, который служит основой для других репозиториев.

В моем случае я выделил следующие ключевые особенности, которые были важны для меня:

  • Простой в использовании скрипт для настройки каждого нового клона проекта.
  • Скелет веб-фреймворка с контроллерами REST.
  • Докеризация приложения и настройка docker-compose для зависимостей.
  • Полный файл README с информацией о назначении службы и способах ее запуска.
  • Обеспечение качества кода и проверка безопасности кодовой базы.
  • Автоматическое обновление зависимостей для обеспечения актуальности проектов.
  • Настройка базы данных.
  • Тестовые контейнеры для тестирования интеграции между моей службой и ее базой данных.

Учитывая эти требования, я отправился в путь.

Чтобы централизовать свою работу, я решил управлять всем в одном месте: в моем репозитории GitHub. Я создал задачи в репозитории, чтобы отслеживать каждое требование, гарантируя, что ни одна хорошая идея не будет забыта с течением времени.

После тщательного рассмотрения я остановился на следующей реализации:

  • Многомодульный проект Gradle, который при необходимости позволяет размещать несколько приложений в одном репозитории.
  • Spring Boot в качестве веб-фреймворка выбран из-за его популярности.
  • SonarCloud и CodeQL для проверки безопасности и статического анализа кода (бесплатно для проектов с открытым исходным кодом).
  • GitHub Actions для инструментов CI.
  • Dependabot для обновлений зависимостей с дополнительным преимуществом автоматического слияния запросов на вытягивание Dependabot после прохождения CI.
  • PostgreSQL с Flyway в качестве инструмента миграции и JOOQ в качестве библиотеки запросов.
  • Spotless для линтинга в стиле кода. Я был в восторге от результатов.

Я был в восторге от результатов.

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

Я обсудил это со своим менеджером и взял на себя ответственность распространить свой шаблон на организацию. Одного разветвления было недостаточно; Мне нужно было адаптировать его к конкретной настройке и требованиям организации.

На это ушло несколько дней, но в итоге у меня был полнофункциональный репозиторий шаблонов. Это позволило мне развернуть новый сервис в рабочей среде за 1–2 часа работы.

Вот что я называю значительным улучшением!

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

Концепция звучала забавно, но я хотел быстро проверить ее. Я не хотел тратить недели на создание чего-то, что может оказаться не таким приятным, как я ожидал.

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

P.S. — Игра POC по-прежнему доступна на https://beat-the-machine.yonatankarp.com/.

Заключение

окончательный результат моей работы доступен в моей учетной записи GitHub по адресу https://github.com/yonatankarp/spring-boot-app-template.

Надеюсь, вам понравилось это путешествие и вы узнали что-то новое. Если вы хотите быть в курсе моих последних мыслей и идей, не стесняйтесь подписаться на мою информационную рассылку. Вы также можете найти меня в LinkedIn или Twitter. Оставайтесь на связи и продолжайте общение!

Первоначально опубликовано на https://yonatankarp.com.