«

Github Pages + Jekyll でブログ投稿するためのRakefile

Cloud9のタイムゾーンが日本じゃないので、日時の指定にズレが生じる
そのため Rakefile の上の方で環境変数 ENV[‘TZ’] の値を設定するようにした


Cloud9 + Jekyll + Github Pages 環境で静的なブログをはじめてみたいと思いたち Rubyガチ初心者なりに頑張って調べ導入し、満足のいく環境ができた ・・・のはいいけど、毎日 _posts からコピーして記事を書き始めるとか、新しいファイルを作成し都度 _layout: の指定を書くとか想像もしたくない

コマンドで指定された階層に、予め作った雛形で yyyy-mm-dd-TITLE.md ファイルを作る Rakefile をパクってきて編集したので、いつかまた Rakefile を紛失した自分のために記事として残しておく

下記にパクり元のサイト載せておきます。僕の実の兄です。

t4traw.github.io
https://github.com/t4traw/t4traw.github.io


そもそもにして、Rubyを知らなすぎてか Rakefile なんて言葉を聞いたことがなかったので調べてみた

パーフェクトRuby RakeとRakefile - Qiita https://qiita.com/hikao/items/36d514cc4e6349bb40cd

なるほどわからん

要約すると Rakefile に予め書いておいたコードを、rake XXX とコマンドを打てば実行するらしい
XXX にあたる部分は自分で Rakefile で決められる

$ rake new

配置してある Rakefile はコレ

require 'date'
require 'fileutils'

ENV['TZ'] = "Asia/Tokyo"

desc "Create a new draft post."
task :new do

  envs = {
    layout:   ENV['layout']   || 'post',
    title:    ENV['title']    || 'no_title'
  }

  path = "_posts/#{Date.today.strftime('%Y')}/#{Date.today.strftime('%m')}"
  FileUtils.mkdir_p(path) unless FileTest.exist?(path)
  
  file = File.join(
    File.dirname(__FILE__),
    path,
    # "#{DateTime.now.strftime('%F-%H-%M-') + envs[:title]}.md"
    "#{DateTime.now.strftime('%F-') + envs[:title]}.md"
  )

  File.open(file, 'w') do |f|
    f << <<-EOS.gsub(/^\s*/, '')
    ---
    layout: #{envs[:layout]}
    title: #{envs[:title]}
    category:
    ---
    EOS
  end
end

Jekyllの _posts 以下のファイル名の命名規則で yyyy-mm-dd-title.md と指定しないといけないのだけれど、titleは環境変数ENVで渡すことで指定できるようにした
layoutはデフォルトで post を指定するようにしてあるけど、必要に応じて設定できるようにもした

$ rake new title=sample_page layout=page

これで「さぁブログを更新しよう!」と思ったら rake new するだけで書き始められるようになった

gitコマンドあたりも纏めて出来るようにしたい 今度する