Hugo to Jekyll

정말 설마설마 했습니다. 아니 이런 일은 없을거라고 장담했습니다. 작년에 Jekyll에서 Hugo로 전환한지 딱 1년만에 마음이 바뀌었습니다. 다시 Jekyll로 돌아갑니다.

Why

Hugo! 정말 빠르고 좋습니다. Jekyll을 사용했던 당시 가장 큰 문제였던 빌드 속도 이슈를 한번에 해결했어요. 그리고 1년 후 다시 Jekyll로 가려는 가장 큰 이유는 아이러니하게도 시간이 문제입니다.

Build 시간 자체는 당연히 Hugo가 훨씬 빠르지만 글을 쓰는데 있어서 편했던건 Hugo에서 사용하는 Go template보단 Jekyll의 Liquid 문법이였던 것 같습니다. 이는 글 작성에만 해당되는건 아니에요. 블로그를 커스터마이즈하고 기능을 만들 때 마다 Jekyll은 Liquid와 Plugin(gem)으로 쉽게 해결할 수 있는 방면, Hugo의 경우 직접 Template 코드를 이용해 만들어야 하기 때문에 결국 이를 관리하기 위한 시간들이 점점 들어가기 시작했습니다.

그리고 마지막으로 제가 개인적으로 블로그 운영 방식 자체를 변화하려고 하다 보니 곧 이게 방아쇠가 되었네요.

여기서 운영 방식의 변화는 낮은 퀄리티의 글 수를 줄이고 유사한 컨텐츠는 Merge 하는 방식입니다.

How

Jekyll to Hugo 떄와 동일하게 Ruby script로 migration 했습니다. 덤으로 blogger, jekyll, hugo를 넘나들며 망가져버린 time 포맷을 한번에 정리했네요.

require 'yaml'
require 'time'

prefix = "./content/post/"
Dir.entries(prefix).each do | name |
    if name.strip != "."  && name != ".."
        begin
            count = 0
            head = ""
            body = ""
            File.readlines(prefix+name).each do |line|
                if count < 2
                    head = head + line
                else 
                    body = body + line
                end
                if line == "---\n"
                    count = count + 1
                end
            end
            ya = YAML.unsafe_load(head)
            d = ya['date']
            begin
            a = Time.parse d.to_s
            ya['date'] = a.to_s
            ya.delete 'tags'
            ya['tags'] = ya['categories']
            ya['layout'] = 'post'
            ya.delete 'categories'
            ya.delete 'aliases'
            new_filename = "./_posts/#{a.year}/#{a.strftime('%Y-%m-%d')}-#{name}"
            new_body = YAML.dump(ya) + "---\n\n" + body
            puts new_body
            File.open(new_filename, "w+") { |file| file.write(new_body) }
            rescue => e 
                puts "#{e} - #{name} - #{d}"
            end
        rescue => e 
            puts e, name
        end
    end
end

Build time

아무리 글 갯수가 줄더라도 아마 적지 않은 양일겁니다. 지금은 github page 기능 자체를 사용하는게 아닌 github action을 통해서 배포하고 있어서 사실 크게 부담은 없습니다. ruby나 jekyll이 점점 빨리지고 있는 것도 한 몫하구요 :D

1,000개가 조금 넘는 페이지에서 4분이면 괜찮죠? 아마 글 갯수 조정이 마무리되면 훨씬 빨리질 것 같습니다.

최적화는 제가 예전에 작성한 글 참고하시면 될 것 같습니다! 결국 Liquid로 인한 반복을 줄이는게 좋습니다.

New feature

  • 댓글을 Utterances 기반으로 사용했었는데, Giscus로 이전했습니다.
  • ToC를 새로 구성할 예정입니다.
    • Hugo에서의 우측 Sidebar Toc의 경우 구조 파악에는 유용하지만,
    • 가독성이 좀 떨어졌다고 느꼈었습니다.

Conclusion

간만에 Jekyll 쓰니 기분이 좋네요 🥰