ブログはこっちがメインなんだけど、調べたこととか学んだことをさくっと書いておく場所が欲しくて少し前から静的サイトジェネレータについて調べていたんですが、それがだいたい落ち着いたんでまとめておきます。
まず結論ですが、こうなりました。
- Octopress(Ruby)
- さくらVPS
- Bitbucket+GitHubで管理
導入編
英語ではありますが公式が一番わかりやすいです。
Octopress
ソース一式持ってきてbundle
するだけなんでRubyが入っていれば余裕です。日本のユーザーも多いのでググれば見つかるはずです。導入については特に触れません。
使い方
rake new_post
で新規ブログ記事rake new_page
で新規ページrake generate
でサイト生成rake rsync
でVPSにアップロードrake preview
でファイルを監視しつつローカルサーバーでサーブ
僕が使うのはこのあたりです。
Tips編
Rakefile
Rsyncの設定
Rsyncのコマンドに指定した秘密鍵があるような場合はデフォルトのままでは動かないのでコマンド自体を書き換える必要がありました。
元々こうなっているところを
"rsync -avze 'ssh -p #{ssh_port}' #{exclude} #{rsync_args} #{"--delete" unless rsync_delete == false} #{public_dir}/ #{ssh_user}:#{document_root}"
こう変更。
"rsync -avze 'ssh -p #{ssh_port} -i #{identity_file}' #{exclude} #{rsync_args} #{"--delete" unless rsync_delete == false} #{public_dir}/ #{ssh_user}:#{document_root}"
Rakeタスクのエイリアス
rake rsync
などとタイプするのが面倒なので↓のリンクを参考にエイリアス的に使えるようにしました。
Rakeタスクにエイリアスを付ける - Hack Your Design!
def alias_task(tasks)
tasks.each do |new_name, old_name|
task new_name, [*Rake.application[old_name].arg_names] => [old_name]
end
end
alias_task [
[:n, :new_post],
[:g, :generate],
[:s, :rsync],
[:p, :preview],
]
データ管理
Octopressが生成するWebサイトのファイルはデフォルトではルートディレクトリのpublic/
以下に配置されます。生成後のファイルとそれ以外(Octopress自体のソースコードやMarkdown形式の投稿ファイル)は別でソース管理したいなと思いました。
生成後のファイルはそもそもWebで公開するつもりなのでGitHubで、それ以外のファイルは設定ファイルなどが含まれることもあってBitbucketのプライベートRepoで行くことに。public/
以下を別のリポジトリとして管理し、Octopress側のリポジトリのsubmoduleとして追加するという方法をとりました。
これでいいじゃんと思っていたら1つ困ったことがあって、rake generate
の際にpublic/
が一旦削除されてもう一度生成されるという仕組みになっているため、ローカルリポジトリ(.git
)まで削除されてしまうんですよね。
それじゃ意味ないからpublic/
以下の.git
などは残すって作戦はどうかと考えたんだけど、Octopressはサイト生成部分はJekyllに丸投げしているだけなので手をいれるのはちょっと重そうだということがわかりました。
最終的には、public/
は単なる吐き出し先とし、GitHubで管理するサイトのデータは別のディレクトリを使うことにしました。rake generate
でサイト生成後、public/
の中身をwebsite/
というディレクトリに丸コピーする作戦です。もちろんドットファイル以外は削除してからコピーするので不要なファイルが残ることもありません。
desc "Generate jekyll site"
task :generate do
raise "### You haven't set anything up yet. First run `rake install` to set up an Octopress theme." unless File.directory?(source_dir)
puts "## Generating Site with Jekyll"
system "compass compile --css-dir #{source_dir}/stylesheets"
system "jekyll"
# 次の2行を追加
system "rm -rf website/*"
system "cp -r public/ website"
end
公開先
コードのコピペとかソース読んだときのメモをバシバシおいているだけなので情報価値は少ないかもしれませんが、ある程度まとまったところでこちらのブログに載せるかもしれません。