Jekyll

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

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

GitHub Pages

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

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

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

«Hello world»

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

---
lay­out: de­fault
---

Hello world!

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

Дата

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

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

Prose.io

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

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

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

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

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

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

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

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