WordPress → Hugo
С сегодняшнего дня сайт работает на новом движке. Точнее, сайт теперь собирается специальным генератором статических сайтов Hugo.
Сразу скажу — результат мне нравится. Но чтобы его получить, пришлось потратить слишком много времени. И это мне не нравится.
А теперь обо всём по порядку. В начале марта вышла новая версия генератора Hugo v0.10. Недолго думая, решил потестировать это дело и заодно посмотреть, как это вообще работает. Поигрался день-другой, но потом появились неотложные дела и пришлось отложить изучение. Неделю назад снова взял себя в руки, поставил конкретную цель сделать за неделю новую версию этого сайта и принялся за работу. В итоге за два вечера написал первую версию. Потом долго чинил поломки, правил баги и переписывал отдельные куски.
Как работает Hugo и статические генераторы в целом?
Если не закапываться в детали, то общий принцип прост: из специально созданного по определённым правилам шаблона сайта (можно свой написать, есть готовые) и заметок в Markdown формате генератор автоматически собирает HTML странички в статический сайт. Да-да, в конечном итоге получается простой набор HTML страниц и других дополнительных файлов, прямо как в конце 90-х, начале нулевых. Потом эти файлы останется загрузить на сервер.
Остальные статические генераторы работают по тому же принципу.
Почему отказался от WordPress?
Слишком громоздко в плане серверных ресурсов, множество потенциальных точек взлома, нет поддержки Markdown для написания записей из коробки, после определённого предела становится затруднительно оптимизировать скорость загрузки сайта. Это не исчерпывающий список, но особо критичные вещи. Плюс, за WordPress сайтом нужно постоянно следить: обновлять движок и плагины, мониторить уязвимости WordPress, его плагинов и всех основных зависимостей. И всё это для того, чтобы не взломали твой блог с десятком заметок. При правильном подходе, статический сайт не требует такого внимания.
Какие генераторы статических сайтов пробовал?
Это уже не первый заход в на территорию статических генераторов сайтов. Я внимательным образом смотрел и пробовал другие генераторы, но до конечного результата, который бы меня устраивал, дело не дошло. Из крупных я упустил, пожалуй, только Pelican. Пробовал docpad, middleman, Hexo, Jekyll. Каждый чем-то отталкивал. Дальше всех дело продвинулось с Hexo и Jekyll. На момент моей установки Hexo отпугивал количеством иероглифов, отсутствием вменяемых плагинов, небольшим количеством вменяемых тем. Jekyll не радовал своей муторной установкой (нужно устанавливать Ruby) и неспешностью работы. Кто знает, возможно, сейчас дела у этих генераторов обстоят гораздо лучше, но повторно ставить их я в ближайшее время точно не собираюсь.
Почему Hugo, а не другой статический генератор?
Hugo быстрый (написан на языке Go), гибко настраивается, просто устанавливается (это бинарник для всех основных операционных систем). С документацией, на первый взгляд, полный порядок. К тому же, он активно развивается.
В реальности, с Hugo всё оказалось тоже не так радужно. Нет, свои основные преимущества он отрабатывает на ура: он действительно очень быстрый, его действительно очень просто установить и достаточно гибко настроить, но… Кто бы что ни говорил, этот генератор пишут программисты для программистов. Одну и ту же функциональность можно реализовать как минимум двумя способами, другую нельзя реализовать стандартными способами никак. XML Sitemap сделать нельзя, с именами директорий тоже не все хорошо. Локальному серверу генератора не хватает авторелоад-режима. Если перечислять все недочёты, получится большой список требований и претензий.
Другое дело, что даже с этими недочётами, у меня получилось ровно то, что нужно.
А в чём главная проблема Hugo?
Hugo не пытается быть дружелюбным. Ты его устанавливаешь, создаешь новый сайт, запускаешь локальный сервер, а он тебе выдаёт белый экран. Никакой стандартной темы нет. И тестового контента тоже нет. В итоге, нужно найти тему (есть официальное хранилище тем) или написать с нуля, закинуть данные в Markdown формате или воспользоваться импортёрами.
Импортёры с других CMS и генераторов есть, но они работают с ошибками. У меня так и не вышло нормально импортировать свои WordPress заметки. Но учитывая то, что у меня их всего несколько штук, это не проблема: сделал конвертацию в markdown руками. Где-то можно использовать сразу несколько форматов хранения данных, а где-то это работать не будет. В документации всё это есть, но она настолько фрагментирована, что даже чтобы просто получилось что-то вменяемое, нужно прочитать, как кажется, не меньше 70%. Стоит ли это всё потраченного времени?
Мне пришлось писать свой костыль для русских дат и склонения некоторых слов после числительных (например, для количества произведений в Книжной полке). А также ещё целую связку скриптов, которые при сборке делают то, что Hugo по-умолчанию делает плохо.
Не понимаю, почему никто из разработчиков многочисленных генераторов подобного рода не пойдёт другим путём: почему-бы не взять ключевые вещи из главной блоговой платформы (WordPress) и насколько это возможно реализовать. Сделать генератор, которым можно пользоваться из коробки, без долгой настройки и оптимизации под себя. После этого очевидно, нужен визуальный редактор. Видимо, время не пришло и генераторы статики это по-прежнему технология только для суровых или полусуровых гиков.
А если нужно написать и отправить заметку с телефона?
За всё время работы этого сайта на движке WordPress, ни одной (!) заметки не было написано с телефона или планшета. Даже существующие записи и страницы редактировались только с компьютера. Идея для очередной заметки или важные мысли действительно могут возникнуть где и когда угодно. В этом случае они бессистемно записываются в Evernote. Дальше вся работа над заметками идёт за компьютером. Во времена, когда практически у каждого есть ноутбук под рукой, это вообще не проблема.
Да, эту проблему тоже можно решить, но… Как по мне, это классический пример троллейбуса из буханки хлеба: можно сделать, но зачем?
Повторюсь, мне нравится результат, но на него затрачено невероятно много времени. В результате получилось очередное чудо велосипедостроения.
В итоге, за кажущийся легкостью Hugo скрывается множество проблем. Продвинутая документация на практике оказывается слишком продвинутой. Хранилище тем само выглядит страшно, да и вменяемых тем там пока что не много. Вместо реальных примеров использования, предлагается изучать документацию, .
Надеюсь, что постепенно код проекта стабилизируется, дублирующие функции уберут, количество хороших тем увеличится и генератором станет приятно пользоваться из коробки, без необходимости часами всё настраивать под себя и писать дополнительные скрипты.