Jekyll(Octopress)の投稿を勝手にディレクトリ管理させる

2015 年 12 月 8 日 by 山平

それなりにイケてる静的サイトが簡単に作れるJekyllはとても便利です。

さらにちょっと面倒な下準備まで済ませてくれているOctpressが私のお気に入りです

Jekyllにはちょっとだけ気に入らないところがあって、記事を1つのディレクトリ内に延々と書き溜めていかなければならない点でした。
過去にテキストベースでCMSを自作した際に、同じ問題でとても苦労したことがあったからです。

ところがある日以下のような記事を見かけました。

なんと。。
ちゃんとソースを読まないとダメですね。。

ということで、新たに記事を作成する際にあらかじめ階層を切るようにRakefileを修正します。
安直ですが、長いのは嫌なので「:new_post2」と言う名前のタスク名にしました。

require 'yaml'
# usage rake new_post[my-new-post] or rake new_post['my new post'] or rake new_post (defaults to "new-post")
desc "Begin a new post in #{source_dir}/#{posts_dir}"
task :new_post2, :title do |t, args|
if args.title
title = args.title
else
title = get_stdin("Enter a title for your post: ")
end
raise "### You haven't set anything up yet. First run `rake install` to set up an Octopress theme." unless File.directory?(source_dir)

jekyll_config = YAML.load_file('_config.yml')
compass_config = IO.read('config.rb')
images_dir_setting = compass_config.split(/\r?\n/).select {|line| line =~ /^\s*images_dir\s*=.+$/  }.pop
images_dir = images_dir_setting.split("=").pop.gsub(/(\s|")/, "")

time = Time.now
_posts_dir = time.strftime(jekyll_config['post2_dir_format'])
posts_dir_ex = File.join(posts_dir, _posts_dir).gsub(/\/$/, '')
filename = "#{time.strftime('%Y-%m-%d')}-#{title.to_url}"
filepath = File.join(source_dir, posts_dir_ex, "#{filename}.#{new_post_ext}")
imagepath = File.join(images_dir, _posts_dir, "#{filename}.images")

mkdir_p "#{source_dir}/#{posts_dir_ex}"
mkdir_p imagepath
if File.exist?(filepath)
abort("rake aborted!") if ask("#{filepath} already exists. Do you want to overwrite?", ['y', 'n']) == 'n'
end
puts "Creating new post: #{filepath}"
open(filepath, 'w') do |post|
post.puts "---"
post.puts "layout: post"
post.puts "title: \"#{title.gsub(/&/,'&')}\""
post.puts "date: #{Time.now.strftime('%Y-%m-%d %H:%M:%S %z')}"
post.puts "comments: true"
post.puts "categories: "
post.puts "---"
end

`gedit #{filepath}`
`nautilus #{imagepath}`
end

ついでなので、画像格納用のディレクトリも「images」配下に同様の階層を作成し、geditとnautilusで開くようにしてみました。

$ rake new_post2[test]
mkdir -p source/_posts/2015/1105/2015-11-05-test
mkdir -p source/images/2015/1105/2015-11-05-test.images
Creating new post: source/_posts/2015/1105/2015-11-05-test/2015-11-05-test.markdown
$

こんな内容でテストしてみます。

---
layout: post
title: "test"
date: 2015-11-05 22:08:58 +0900
comments: true
categories:
---
![aaa](/images/2015/1105/2015-11-05-test.images/test.png)

screenshot-from-2015-11-05-2214041

いい感じです。
…が、画像のパスを指定するのが面倒くさいですね。。
次回以降、対策を考えてみます。

タグ: , ,

TrackBack