
ブログはこっちがメインなんだけど、調べたこととか学んだことをさくっと書いておく場所が欲しくて少し前から静的サイトジェネレータについて調べていたんですが、それがだいたい落ち着いたんでまとめておきます。
まず結論ですが、こうなりました。
- Octopress(Ruby)
- さくらVPS
- Bitbucket+GitHubで管理
導入編
英語ではありますが公式が一番わかりやすいです。
ソース一式持ってきてbundleするだけなんでRubyが入っていれば余裕です。日本のユーザーも多いのでググれば見つかるはずです。導入については特に触れません。
使い方
rake new_postで新規ブログ記事rake new_pageで新規ページrake generateでサイト生成rake rsyncでVPSにアップロードrake previewでファイルを監視しつつローカルサーバーでサーブ
僕が使うのはこのあたりです。
Tips編
Rakefile
Rsyncの設定
Rsyncのコマンドに指定した秘密鍵があるような場合はデフォルトのままでは動かないのでコマンド自体を書き換える必要がありました。
元々こうなっているところを
1"rsync -avze 'ssh -p #{ssh_port}' #{exclude} #{rsync_args} #{"--delete" unless rsync_delete == false} #{public_dir}/ #{ssh_user}:#{document_root}"
こう変更。
1"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!
1def alias_task(tasks)
2 tasks.each do |new_name, old_name|
3 task new_name, [*Rake.application[old_name].arg_names] => [old_name]
4 end
5end
6
7alias_task [
8 [:n, :new_post],
9 [:g, :generate],
10 [:s, :rsync],
11 [:p, :preview],
12]
データ管理
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/というディレクトリに丸コピーする作戦です。もちろんドットファイル以外は削除してからコピーするので不要なファイルが残ることもありません。
1desc "Generate jekyll site"
2task :generate do
3 raise "### You haven't set anything up yet. First run `rake install` to set up an Octopress theme." unless File.directory?(source_dir)
4 puts "## Generating Site with Jekyll"
5 system "compass compile --css-dir #{source_dir}/stylesheets"
6 system "jekyll"
7
8 # 次の2行を追加
9 system "rm -rf website/*"
10 system "cp -r public/ website"
11end
公開先
コードのコピペとかソース読んだときのメモをバシバシおいているだけなので情報価値は少ないかもしれませんが、ある程度まとまったところでこちらのブログに載せるかもしれません。