ekyll

В посте про перезапуск я пообещал написать серию статей про Jekyll. Это — первая, вводная, заметка из серии.

Я не буду подробно описывать что же такое Jekyll, как его установить, какая у него файловая структура и так далее — про это уже написано довольно много статей (см. ниже в «ссылках»). Если кратко, то это статический генератор сайтов с прицелом на блоги.

itHub Pages

Начну с главного: эту и последующие статьи я буду писать в контексте сервиса GitHub Pages. Дело в том, что Гитхаб, помимо обычного хостинга статики, предоставляет также и возможность хостить сайты на Jekyll. Таким образом, Jekyll — единственный способ что-то генерить прямо на Гитхабе (ещё можно попробовать исхитриться и либо использовать сторонний сервис, в который будут уходить хуки и который будет что-то на каждый пуш билдить и коммитить, либо обрабатывать и собирать всё на клиенте, сделав весь сайт одностраничным веб-приложением; но оба этих решения я рассматривать пока не буду).

С Jekyll же достаточно создать файл в формате markdown, добавить в начало YAML-заголовок — и можно писать текст. После пуша этого файла в репозиторий Гитхаб перегенерирует весь сайт, и соответствующий пост появится как в виде страницы на сайте, так и во всех списках и сайдбарах на других страницах. При этом пушить файл или изменения можно откуда угодно — хоть со своей машины, хоть через веб-интерфейс Гитхаба, хоть с помощью любого стороннего приложения, использующего API.

Сразу замечу, что многие вещи, о которых я буду писать в последующих статьях, можно намного проще реализовать в виде плагинов. Но я не пойду «простым» (для разработчика, но не для пользователя) путём — мне интересны решения, которые будут работать где угодно, в том числе и на Гитхабе, где нельзя использовать сторонние плагины.

«Hello world»

Минимальный документ, который нужно написать, чтобы файл сбилдился с помощью Jekyll, должен содержать YAML-заголовок с хотя бы одним полем — layout (на самом деле можно и без него, но тогда у вас будет страница без заголовков и всего прочего — вряд ли вам это нужно). Так что минимально адекватный hello-world.md для Jekyll мог бы выглядеть так:

---
layout: default
---

Hello world!

В реальном мире к посту захочется добавить и заголовок записи, и ещё всяких данных, но для простых случаев хватит и такого минимального YAML-заголовка.

ата

Одна из фишек, которая мне понравилась в Jekyll — файлы постов в блоге нужно называть в формате YYYY-MM-DD-title. Во-первых, это заставляет поддерживать в порядке файловую структуру — посты в папках автоматически сортируются по дате, во-вторых, это избавляет от необходимости прописывать дату в самом файле. В некоторых генераторах статики, которые я использовал раньше, эту информацию приходилось дублировать, прописывая в YAML поля типа published. В Jekyll тоже можно их использовать, если, скажем, хочется уточнить время, но можно жить и без этого — дата из имени файла попадёт в данные, доступные шаблонам.

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

rose.io

Если не хочется вручную каждый раз заполнять YAML-заголовки, то можно воспользоваться или каким-нибудь скриптом, как это сделано в Jekyll Bootstrap, или использовать сервис Prose.io — он позволяет описать в конфиге, какие данные использовать по умолчанию при создании нового файла. Таким образом, если новые посты писать через веб, используя Prose, то не нужно будет заботиться о заполнении метаданных (на самом деле на них нужно будет всё равно разок взглянуть, но об этом я напишу в другой раз).

В сети про Jekyll уже есть очень много полезной информации. В этом разделе я попробую постепенно собирать и то, что может понадобиться для начала работы с Jekyll, и то, что нужно использовать постоянно. Итак:

У проекта Jekyll Bootstrap есть отличная серия статей про Jekyll, например:

Вся логика в Jekyll работает на шаблонизаторе Liquid. Недавно Гитхаб обновил версию Jekyll (вместе с Liquid, естественно), так что сейчас можно использовать все теги из документации:

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

Для написания постов я советую использовать Маркдаун. Хотя Jekyll позволяет создавать новые посты как на чистом HTML, так и используя другой формат — Textile, для большинства задач Маркдаун будет лучше.

Вообще, я очень доволен, что для своего сайта выбрал Jekyll — хотя для тонкой настройки приходится очень сильно ломать голову над Liquid, в конечном счёте это того стоит.