PIYO - Tech & Life -

Octopressによるブログ構築+Tips

Octopress Ruby

ブログはこっちがメインなんだけど、調べたこととか学んだことをさくっと書いておく場所が欲しくて少し前から静的サイトジェネレータについて調べていたんですが、それがだいたい落ち着いたんでまとめておきます。

まず結論ですが、こうなりました。

  • 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

公開先

コードのコピペとかソース読んだときのメモをバシバシおいているだけなので情報価値は少ないかもしれませんが、ある程度まとまったところでこちらのブログに載せるかもしれません。

pi-chanメモ置き場