Migrate from Octopress to Hexo

年末年始にOctopressからHexoに移行したときのメモ。

まずOctopressで書いていたMarkdownの記事をHexo用のフォーマットに変換するスクリプトを書いた。

1
2
3
4
#!/bin/sh
for i in *.markdown; do
awk '!/^(layout|comments)/&&NR!=1{print $0}' $i | sed 's/^categories/tags/g' | sed 's/^title: *"\(.*\)"$/title: \1/g' > "$i".markdown.new
done

Hexoは1行目に---は書かないらしいので削除している。また、Octopressのlayout, comments等のタグもHexoでは不要なので削除し、OctopressのcategoriesはHexoではtagsとして扱うようなので変換している。最後に、Octopressでつけていたtitleのダブルクォーテーションを削除している。無論、*.markdown.newの内容が問題なさそうであれば*.markdownにリネームしておく。

また、各記事のPermalinkの設定もOctopressに合わせる必要があるが、これはHexoの_config.ymlに設定することで対応できる。

1
permalink: blog/:year/:month/:day/:title/

先頭のblog/がミソで、最初これを設定していなかったが故にOctopressとPermalinkの構造が変わってしまい、記事へのリンクが切れてしまった。(そしてしばらく気がつかなかった…)

テーマはCodelandというテーマをforkして、右のサイドペインにAboutウィジェットが表示されるようにしてみた。forkしたテーマはGithubに登録しておいた。

V8

V8をソースコードからビルドしてみるテスト。

V8のビルドにはdepot_toolsが必要なのであらかじめcloneしておく。

1
$ git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git

cloneしたディレクトリをPATHに追加しておく。下記のコマンドが動作すればOK。

1
$ gclient

続いてV8のソースコードをcloneする。

1
$ git clone https://chromium.googlesource.com/v8/v8.git

V8のディレクトリに移動し、

1
$ gclient sync

を実行する。あとはmakeするだけなのだが、コンパイラにclangを使うにはあらかじめ次のように設定しておく。

1
2
3
4
5
6
7
8
9
export CXX=`which clang++`
export CC=`which clang`
export CPP="`which clang` -E"
export LINK=`which clang++`
export CXX_host=`which clang++`
export CC_host=`which clang`
export CPP_host="`which clang` -E"
export LINK_host=`which clang++`
export GYP_DEFINES="clang=1"

以上の準備が整ったところで、あとは

1
$ make native

でビルドが始まる。makeのターゲットにnativeを指定すると、ホストマシンのアーキテクチャをターゲットとしたリリースビルドが指定される。手もとのMacBook Proで大体25分くらいで完了した。結果はoutディレクトリに出力されており、例えばout/native/shellを実行するとV8を組み込んだサンプルシェルが起動する。

1
2
3
$ out/native/shell
V8 version 3.32.0 (candidate) [sample shell]
>

以上の手順含め詳細は下記サイトに説明がある。

BuildingWithGYP

Hexo

今までブログはOctopressという静的サイトジェネレータを使っていたが、毎回サイトの生成に時間がかかるためなんとかしたいと思っていた。探した中で良さそうだったのがHexoというNode.jsベースのジェネレータ。サイト構築までの手順も少なく、処理速度もそれなりに速くて快適だ。準備に必要なコマンドは、

1
2
3
4
5
$ npm install -g hexo
$ hexo init blog
$ cd blog
$ npm install
$ hexo s

だけでよい。これだけで、http://localhost:4000 にアクセスしてプレビューが見れるようになる。記事を新規追加するには hexo n で引数に記事のタイトルを指定すればよく、コマンドもOctopressのrake new_post["title"]よりはだいぶ簡潔になっている。

構成もシンプルなのでテーマのカスタマイズもやりやすい。_config.ymlの設定がグローバルなJavaScriptオブジェクトとして扱われ、EJSテンプレートから参照できるというコンセプトもシンプルでいいと思う。

まあ、deployするまでまだ作業することが残っているので、実際は上記の作業だけで終わりというわけにはいかないが、GitHub Pagesを使っている場合、設定ファイルにリポジトリを設定しておけばhexo dですぐにdeployできる。

というわけでしばらくはHexoを使ってみます。