Jekyll 포스트는 _posts/YYYY-MM-DD-slug.md 규칙과 YAML Front Matter를 반복해서 작성해야 한다. 제목만 인자로 넘기면 파일명, 작성 시간, 기본 Front Matter를 생성하도록 new_post.rb를 만들었다.

스크립트

저장소 루트에 new_post.rb 파일을 만들고 아래 코드를 입력한다.

#!/usr/bin/env ruby
require 'date'

# 포스트 제목을 인자로 받아옵니다.
title = ARGV[0] || "new-post"
date = DateTime.now

# 파일 이름을 'YYYY-MM-DD-title.md' 형식으로 만듭니다.
filename = "#{date.strftime('%Y-%m-%d')}-#{title.downcase.strip.gsub(' ', '-').gsub(/[^\w-]/, '')}.md"

# 파일 경로를 설정합니다.
filepath = "_posts/#{filename}"

# 포스트 파일을 생성하고 기본 내용을 작성합니다.
File.open(filepath, "w") do |file|
  file.puts "---"
  file.puts "layout: post"
  file.puts "title: \"#{title.split('-').map(&:capitalize).join(' ')}\""
  file.puts "date: #{date.strftime('%Y-%m-%d %H:%M:%S %z')}"
  file.puts "categories: "
  file.puts "tags: "
  file.puts "---"
  file.puts
  file.puts "Content goes here"
end

puts "New post created: #{filepath}"

ruby new_post.rb를 커멘드 명령어로 실행하면, 폴더에 새로운 포스트.md가 생성된다.

  • Jekyll _posts 폴더에 생성된 날짜 기반 마크다운 파일
    시간, 날짜도 자동 등록됨!
  • Jekyll 게시물의 YAML 프런트 매터 예시

  • 추가: 타이틀 설정하려면 아래와 같은 방식을 사용함.
E:\sunbang123.github.io>ruby new_post.rb "Computer_Architecture(2)_-Register_Transfer_Microoperation"
New post created: _posts/2024-10-06-computer_architecture2_-register_transfer_microoperation.md

사용할 때 확인할 점

  • 같은 날짜와 slug의 파일이 이미 있으면 현재 예제는 기존 파일을 덮어쓸 수 있으므로 실행 전에 파일 존재 여부를 확인하는 방어 코드를 추가하는 편이 안전하다.
  • \w 기반 정규식은 실행 환경과 제목 언어에 따라 한글을 제거할 수 있다. 한글 제목을 쓸 때는 영문 slug를 별도로 받거나 검증된 slug 변환 규칙을 두는 편이 좋다.
  • 생성 직후 bundle exec jekyll build를 실행하면 Front Matter 문법과 날짜 형식을 배포 전에 확인할 수 있다.
  • 자동 생성은 파일 골격만 줄여 준다. Content goes here는 반드시 실제 글로 교체한 뒤 커밋한다.

이 방식은 Jekyll 플러그인 없이도 동작하고, 스크립트 자체도 저장소에서 버전 관리할 수 있다는 장점이 있다. 현재 사용 중인 코드는 블로그 저장소의 new_post.rb에서 확인할 수 있다.