Jekyll jako blogowa alternatywa dla WordPressa
Październik, wraz z połową listopada, był dla mnie czasem pracowitym gdy chodzi o prowadzenie bloga. Jak to możliwe, skoro nie ukazał się w tym czasie ani jeden nowy wpis? Przez około półtora miesiąca po godzinach przenosiłem kod strony z dobrze znanego niemal każdemu blogerowi WordPressa na Jekylla. Część z Was być może zauważyła niewielką korektę wyglądu strony w ostatnich dniach. Jest to właśnie pokłosie uruchomienia bloga na innym silniku generującym strony. A więc - zmiana została już dokonana!
Ale od początku - czym jest Jekyll?
Jekyll jest generatorem stron statycznych, zmieniających pewien rodzaj danych wejściowych w zestaw połączonych ze sobą statycznych stron HTML. Mówiąc prościej, w przypadku Jekylla tworzymy treść w plikach typu Markdown (zwyczajowo o rozszerzeniu *.md), które są następnie zamieniane na zwyczajne pliki HTML. W plikach Markdown definiować można nagłówki, paragrafy, listy, linki (ważne dla łączenia wielu stron w jedną, spójną całość) a także formatowanie tekstu (pogrubienie, podkreślenie, kursywa itp.). Szczegóły na temat samego Markdown i jego składni można poczytać np. tutaj.
Jak więc teraz działa ten blog?
Jest w pełni statyczny - nie posiada żadnej bazy danych, żadne strony nie są generowane w czasie obsługi żądania przez serwer HTTP. Objawem tego jest na przykład zniknięcie możliwości komentowania postów, nad czym boleję, jednak mam już plan jak je przywrócić :) Można to zrobić osadzając w kodzie strony np. popularny dziś Disqus. Tylko skoro miałyby to być jedyne różnice pomiędzy blogowaniem na WordPressie a Jekyllu to cały proces byłby stratą czasu. Powstaje więc pytanie…
Dlaczego zdecydowałem się na zmianę WordPressa na Jekyll?
Blogowanie na WordPressie od początku narzuca pewne ograniczenia:
- tworzony blog jest generowany dynamicznie, nawet jeśli nie ma takiej potrzeby (posty przechowywane są w bazie danych, potrzebujemy więc przetwarzania po stronie serwera)
- możliwości dostosowywania wyglądu i funkcjonalności strony są ograniczone przez zainstalowaną skórkę (ang. theme)
- rozszerzanie funkcjonalności następuje poprzez instalowanie kolejnych wtyczek (ang. plugins) na stronie, które powodują jej spowolnienie, a niejednokrotnie wprowadzają luki bezpieczeństwa do witryny
Ograniczenia pierwsze i trzecie powodują problemy z wydajnością działania strony, ponieważ musi ona każdorazowo odwoływać się do bazy danych, aby wyświetlić potrzebną treść (np. post). Samemu korzystałem z różnych wtyczek (sic!) do obsługi cache’a, ale działały różnie - bywały problemy z jego unieważnieniem i generowaniem nowych wersji stron.
Samo ograniczenie pierwsze dodatkowo wymaga, abyśmy wykupili hosting z obsługą języka PHP (w nim napisany jest WordPress), bądź dedykowany dla tego CMS-a.
Ograniczenie drugie powoduje, że ciężko, aby strona wyglądała i zachowywała się dokładnie tak, jak chcemy. Spotkałem się z możliwością dodawania własnych reguł CSS do używanej skórki, jednak usuwały się one przy każdorazowej próbie jej aktualizacji (!).
Problem trzeci oznacza, że musimy polegać na kodzie zewnętrznych wtyczek pisanych przez społeczność, a te niestety nie słyną z wysokiej jakości.
Jak Jekyll rozwiązuje powyższe problemy?
Jekyll został stworzony właśnie po to, aby je rozwiązać! W jaki sposób?
- Jako generator stron statycznych nie zakłada żadnego dalszego przetwarzania po ich wygenerowaniu. Oznacza to, że raz stworzona witryna (dla danej wersji) wymaga tylko serwowania użytkownikowi odpowiedniej strony na żądanie. I tyle!
- Mamy całkowitą kontrolę nad generowanymi plikami HTML, dlatego wygląd i funkcjonalność strony są całkowicie zależne od naszej woli.
- Istnieją oczywiście dodatkowe paczki, które możemy zainstalować, aby poszerzyć funkcjonalność Jekylla, ale one jedynie zmieniają sposób generowania stron, nie wprowadzają żadnego mechanizmu dynamicznego ich przetwarzania. Nie ma więc mowy o spowolnieniu.
Jak wygląda tworzenie bloga za pomocą Jekylla?
Szybka odpowiedź: bardzo przyjemnie :) Aby to dobrze wyrazić, pozwolę sobie wymienić teraz kilka faktów:
- blog utrzymywany jest jako repozytorium Gita, w którym po prostu dodaje się kolejne posty jako pliki Markdown i zatwierdza zmiany (ang. commit)
- mamy możliwość uruchomienia bloga lokalnie i zobaczenia jak wygląda aktualna, deweloperska wersja dzięki wbudowanemu w Jekyll prostemu serwerowi HTTP, automatycznie aktualizującego pliki HTML po każdej naszej zmianie w kodzie
- do hostingu możemy użyć dowolnej usługi pozwalającej na serwowanie statycznych plików HTML
- mamy całkowitą kontrolę nad stylami (CSS) i skryptami (JS) obecnymi na stronie
- wydajnościowo miażdżymy każde inne rozwiązanie
Jeśli jeszcze nie jest za słodko, możemy to wszystko mieć całkowicie za darmo! Jak? Na przykład dzięki usłudze GithubPages, serwującej statyczne strony prosto z repozytorium kodu na Githubie. Do blogowania za pomocą Jekylla jest ona używana tak często, że sam Github wspiera rozwój paczki (ang. gem) o nazwie “github-pages”, zawierającej oprócz Jekylla najpopularniejsze paczki używane w połączeniu z nim. Dzięki temu w prosty sposób możemy hostować naszą stronę na GithubPages, mając jednocześnie repozytorium z jej kodem na Githubie.
Podsumowanie
Jekyll pozwala na tworzenie bloga w sposób identyczny do tworzenia normalnego, programistycznego projektu (czyż tym w zasadzie on nie jest?). Dla programistów jest to naprawdę ciekawa opcja, zdecydowanie warta rozważenia - sam jestem zadowolony z podjętej zmiany. W przyszłości planuję napisać jeszcze post o tym, jak przeprowadzić proces migracji istniejącego bloga z WordPressa (lub innego CMSa) na Jekylla, bądź jak stworzyć taki od zera :) Tymczasem dzięki za lekturę, pozostańcie czujni na kolejne posty, bo one już niedługo!