작성 맥락
포스트를 만들 때 날짜와 Front Matter를 반복 입력하던 과정을 줄이기 위해 이 저장소에서 실제 사용하는 new_post.rb의 동작을 기록했습니다.
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가 생성된다.
시간, 날짜도 자동 등록됨!
- 추가: 타이틀 설정하려면 아래와 같은 방식을 사용함.
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에서 확인할 수 있다.
댓글이 보이지 않으면 GitHub에 로그인한 뒤 새로고침해 주세요. 공개 댓글은 로그인 상태에서 더 안정적으로 표시됩니다.