Подписывайтесь на наш Telegram-канал и будьте в курсе всех событий

Идеи для развития laravel.su

Демонстрация

На laravel.su появился новый раздел с «идеями». Что это такое и для чего, собственно, это нужно — я расскажу в этом коротком посте.

Laravel — это не только фреймворк, но и сообщество, у которого безусловно оседает пласт идей, которые нигде не реализуются. «Хорошо, если бы было…» — почти каждый так думал, когда с чем-то сталкивался в работе и, несомненно, при использовании laravel.su.

Задача раздела — перевести ваши мысли на «бумагу» и материализовать их как прозрачную витрину для ваших идей.

Раздел максимально прост: нужно описать заголовок и тело идеи. Чем подробнее написано — тем, конечно, лучше, но в то же время надо понимать, что это не раздел с ТЗ — это описание идеи для вдохновения или боли, которую вы испытываете. После модерация, идея будет опубликована.

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

Двигатель этого раздела — это вы, участники laravel.su. Публикуйте ваши идеи, стесняться тут не надо — возможно, то, что вы хотите, давно было у всех на уме, но никто не смог это формализовать. Поэтому только ваша активность может сделать этот ресурс лучше и качественне.

Телеграм бот на Laravel без боли

carbon

https://imgur.com/carbon-27JXZmf

Discover the magic of the internet at Imgur, a community powered entertainment destination. Lift your spirits with funny jokes, trending memes, entertaining gifs, inspiring stories, viral videos, and so much more from users.

С сентября работаю над пакетом для Laravel для быстрой разработки телеграм ботов.

TL;DR

  • Роутинг на все многие экшены телеграм, через атрибуты и роуты как в ларавель. TelegramRoute::onAnimation(string[]|string|\Closure $action, string $botId = '*', \Closure|string|null $pattern = null)
  • Есть асинхронный режим на базе go и очередей Laravel
  • Поллинг для локальной разработки из коробки
  • Middlewares и Guard для авторизации по telegram_id
  • Стейты для хранения текущего состояния беседы для удобного ветвления и навигации.
  • Защита от превышения лимита запросов в телеграм.
  • Документация с поиском и context7 для AI
  • Поддержка множества ботов

Если детали нужны

Идея была изначально натянуть сову на глобус реализовать асинхронный пакет на базе ReactPHP для Laravel, уж очень мне он понравился. Даже начал раскапывать уже не поддерживаемый пакет. Но благо, вовремя меня посетила другая мысль, что можно воткнуть небольшой go прокси на телегроам вебхук, этот прокси будет диспатчить задачи напрямую в редис, а воркеры уже обработают задачу не тратя время на бутсрап, как если это был бы стандартный подход при обработке HTTP запросе.

Я переделал то, что уже успел написать, проверил что идея рабочая, оказалось что да, так и появился этот модуль Пришлось раскопать еще, как внутри сериализуется Job. Для поддержки Horizon, как под капотом проиcходит работа с Redis, какие события нужно вызывать чтобы Job была учтена в статистике.

Последний штрих, это автоматическая установка бинарника. Достаточно вызвать ./vendor/bin/tgook, и бинарник автоматически запуститься и будет слушать входящие запросы на 6945 порту.

Zanzara стала первым донором идей для моего пакета, оттуда я взял:

  • Long polling из коробки, чтобы не нужно было возиться с настройкой тунеля при локлаьной разработке
  • Роутинг флуент апи по типу onMessage()
  • Middleware
  • Система стостоянияZanzara
  • Защита от флуда в телеграм

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

Ядром пакета (типы данных, обработка Update, работа с API) является стороння библиотка Пока считаю, что это нормальная история. Реализовывать еще и апишку было бы слишком накладно по моим ресурсам и пакет так и не добрался бы до релиза.

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

Установка и настройка выглядит очень просто:

composer require hybridgram/tgbot-laravel

Далее нужно опуликовать конфиг, тестовые роуты

php artisan vendor:publish --provider="HybridGram\Providers\TelegramServiceProvider"

И установить переменную BOT_TOKEN в вашем .env еще рекомендую натсроить BOT_ID для безопасности (любое уникальное значение).

Настраиваем первые роуты

<?php

use HybridGram\Facades\TelegramRouter;
use HybridGram\Core\Routing\RouteData\TextMessageData;
use HybridGram\Core\Routing\RouteData\PollData;
use HybridGram\Telegram\Poll\PollType;
use HybridGram\Telegram\TelegramBotApi;

TelegramRouter::group(['for_bot' => 'main'], function (\HybridGram\Core\Routing\TelegramRouteBuilder $builder) {
    $builder->onTextMessage(function (TextMessageData $message) {
        $api = app(TelegramBotApi::class);
        $api->sendMessage($message->getChatId(), "Echo: {$message->text}");
    });
    // you can use any of route
//   $builder->onPoll(function (PollData $poll) {
//        $api = app(TelegramBotApi::class);
//        $api->sendMessage(
//            $poll->getChatId(),
//            "Poll received ({$poll->poll->type}) with " . count($poll->poll->options) . " options"
//        );
//    }, pollType: PollType::REGULAR);
});

И запускаем polling

php artisan hybridgram:polling --hot-reload

Это все) Больше подробностей в документации https://hybridgram.space/ru/getting-started/introduction/

1

Мои первые шаги в Open Source: процессы, тесты и работа с сообществом

Я начал всерьёз погружаться в Open Source в начале 2025 года. Тогда это было скорее любопытство и желание попробовать что-то новое, чем чёткий план. Спустя время я заметил, что мои проекты начали находить отклик, появились первые пользователи, а затем и первые контрибьюторы.

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

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

Мой GitHub – https://github.com/prog-time

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

С чего начинается идея

В основе почти всех Open Source-проектов лежит не прямая монетизация, а социальное признание: звёзды на GitHub, комментарии, репосты, подписчики. Эти метрики становятся своего рода обратной связью — сигналом, что твоя работа кому-то действительно нужна и интересна. Да, иногда появляются донаты или спонсоры, но рассчитывать на стабильный доход в начале пути — плохая идея.

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

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

Для вдохновения вы можете посмотреть проекты которые сейчас в тренде на GitHub или подписаться на Topic по интересующему вас направлению https://github.com/trending.

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

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

Если проект ориентирован на пользователей, не связанных с разработкой (как в моём случае), приоритеты смещаются. Здесь особенно важно уделять внимание:

  • производительности и оптимизации;
  • качественной и понятной документации;
  • простоте установки и быстрому развёртыванию проекта.

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

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

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

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

Хорошим примером для меня стал проект tg-support-bot. В нём я сразу заложил два сценария установки. Первый — полный, через docker-compose, где поднимаются все необходимые сервисы: PostgreSQL, PgAdmin, Loki, Grafana, Redis и другие компоненты. Второй — упрощённый, рассчитанный на обычный хостинг, с возможностью подключить внешнюю базу данных и отключить необязательные сервисы.

Отдельно я постарался избежать жёстких связей между контейнерами. Для меня было важно, чтобы пользователь мог безболезненно отключать или заменять отдельные сервисы внутри docker-compose, не ломая при этом основное приложение. Такой подход даёт гибкость и делает проект более дружелюбным для разных сценариев использования.

Линтинг, CI и тесты

Перед тем как выкладывать проект в публичный доступ, я считаю обязательным настроить базовую инфраструктуру качества кода: линтинг, тесты и CI. Это не только снижает количество ошибок, но и сразу задаёт определённый уровень качества, который чувствуют все будущие контрибьюторы.

Первое, с чего я начинаю, — это правила code style. Чем более чётко и однозначно они описаны, тем проще поддерживать кодовую базу в читаемом и предсказуемом состоянии, особенно когда в проект приходят новые участники.

Дальше я настраиваю линтеры, которые автоматически проверяют код на несколько ключевых вещей: синтаксические ошибки и проблемы с типизацией, соответствие имен переменных и функций принятому стилю, а также типичные ошибки и потенциальные уязвимости. В результате большая часть проблем отлавливается ещё до ревью или запуска кода, а обсуждения в pull request’ах смещаются с формальных правок к действительно важным архитектурным решениям.

Параллельно этому я активно покрываю весь функционал Unit тестами. Чем больше функциональности покрыто тестами, тем спокойнее ты относишься к изменениям в коде. Это особенно чувствуется в Open Source, где в проект могут прийти сторонние контрибьюторы, и ты не всегда знаешь, какие именно изменения они предложат.

В проекте tg-support-bot я решил подойти к этому вопросу максимально прагматично. Вместо сложных и тяжёлых решений я реализовал набор shell-скриптов, которые тесно интегрированы с git-хуками и работают на нескольких уровнях.

На этапе коммита запускаются проверки только тех файлов, которые добавлены в индекс. Статический анализатор PHPStan проверяет код на ошибки и проблемы с типизацией, запускаются unit-тесты для изменённых классов. Если в коммите затронут Dockerfile, автоматически запускается Hadolint, а изменения в shell-скриптах проверяются с помощью ShellCheck, который хорошо выявляет типичные ошибки и потенциальные уязвимости.

Пример работы линтеров

При выполнении push PHPStan анализирует весь код и выполняются все unit-тесты. Этот этап часто помогает поймать проблемы, которые могли проскочить при локальной проверке, но влияют на проект в целом.

Финальным уровнем становится CI. Здесь проект проверяется ещё раз полностью, что особенно важно для Open Source. Внешние контрибьюторы могут прислать изменения, которые проходят локальные проверки, но ломают логику или инфраструктуру проекта. CI служит последней линией обороны и не позволяет таким изменениям попасть в основную ветку.

Пример работы CI

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

Структура GitHub-репозитория

По мере роста проекта я довольно быстро столкнулся с тем, что хаотичная работа с ветками начинает мешать. Поэтому вопрос структуры GitHub-репозитория для меня стал очень важен.

Во всех своих проектах я стараюсь придерживаться одной и той же схемы работы с ветками. Основной веткой всегда является main, и прямые коммиты в неё запрещены. Любые изменения — даже самые мелкие — попадают туда только через дочерние ветки и pull request’ы.

Для каждой отдельной задачи из релиза создаётся своя ветка. В названии ветки обязательно указывается номер соответствующего Issue — это жёсткое правило, без исключений. Если ветка названа некорректно, она просто не пройдёт проверки CI, и изменения не смогут быть влиты в проект. На первый взгляд это может показаться излишней строгостью, но на практике такой подход сильно упрощает жизнь.

Пример структуры веток и коммитов

Документирование

Даже самая полезная библиотека или сервис теряют смысл, если пользователи и контрибьюторы не понимают, как её использовать.

Для меня документация делится на несколько ключевых элементов:

README.md

Это первая точка контакта с проектом для любого пользователя на GitHub. В нём я стараюсь сразу дать максимально понятную картину: краткое описание проекта, инструкции по установке и настройке, минимальный пример использования и ссылки на расширенные материалы, тесты и CI/CD процессы. README должен быть кратким, чтобы любой мог быстро установить и попробовать продукт, но достаточно информативным.

CONTRIBUTING.md

Он описывает, как внести изменения в проект, какие правила создания веток и коммитов я использую, как отправлять pull request и какие требования предъявляются к тестированию и линтингу. Без такого руководства сторонние контрибьюторы часто тратят лишнее время на догадки и пробные ошибки, что снижает их мотивацию.

GitHub Wiki

Для более детальной и структурированной документации я активно использую Wiki. Данный раздел позволяет создавать несколько страниц, объединённых логикой, и описывать архитектуру проекта, деплой, CI/CD, гайды по использованию библиотек и сервисов.

Практические правила, которыми я руководствуюсь:

  1. Документировать ключевое сразу, не откладывая на потом — иначе теряется контекст и появляются лишние вопросы.
  2. Использовать шаблоны и стандарты (Markdown, OpenAPI, DocBlock), чтобы документация была однородной.
  3. Поддерживать документацию в актуальном состоянии — каждое новое изменение должно сопровождаться обновлением описаний.

GitHub Wiki

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

Взаимодействие с аудиторией

Успешный Open Source-проект — это не только код, но и люди, которые его используют. Активное взаимодействие с аудиторией помогает не только продвигать проект, но и получать ценную обратную связь, которая часто оказывается важнее любой документации.

Первым шагом для меня стало создание удобного канала связи. В tg-support-bot я создал отдельную Telegram-группу, где публикую новости, отвечаю на часто задаваемые вопросы и просто общаюсь с пользователями.

Telegram tg-support-bot

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

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

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

Заключение

Open Source — это не только код. Это процессы, дисциплина, сообщество и взаимодействие с пользователями. Продуманная структура репозитория, тесты, документация и активная коммуникация позволяют проекту развиваться, привлекать новых участников и становиться действительно полезным инструментом.

Для меня этот путь стал одновременно учебным и вдохновляющим: я не только совершенствую навыки разработки, но и вижу, как моя работа реально помогает людям. Если вам интересно следить за моими проектами или участвовать в их развитии, приглашаю на мой GitHub — там публикуются все обновления, и вы сможете присоединиться к работе над проектами.