最新版hugoでメモ環境をdockerで作ってみる

# 概要

メモ用で、ローカルでmarkdownファイルを作って日付ごとにファイルを作っているけれども
ごちゃごちゃしていてファイルを探すのが大変だし、
文章がちょっと長くなると全体の見通しが悪い。(ブラウザでいい感じに見たい)

grepすればいいけれども、ターミナル上で探すのはちょっと微妙でブラウザから見たくなった。
tocを吐き出すのも出来ないことはないけど、pandocをかますのがちょっと面倒。

用途にあうもので、jekyllとhugoがあるようだ。
sphinxはmarkdownではないのと、昔使っていてなんとなく飽きてしまったので、
今流行りの２つのどっちかを使ってみる。

どうも速度的にかなり早いというhugoを入れてみることにしました。

(なんとなく最新版を使いたくてdockerを使って構築しています。使うだけなら、バイナリを[ダウンロード](https://github.com/spf13/hugo/releases)する方が圧倒的に楽です。バイナリで良い方は、「基本ファイル作成」セクションまで飛んでOKです。)

# 手順
1. goをインストールする
2. goコマンドでhugoをインストール

# dockerfile
インストールしたバージョンは以下の通り

> golang version:1.4.2
> hugo:0.14-DEV
> git:2.3.4
> hg:1.4

以下のdockerfileで動きました。

    FROM centos:6

    # golang install
    RUN yum install -y wget tar
    RUN cd /tmp && wget https://storage.googleapis.com/golang/go1.4.2.linux-amd64.tar.gz && tar -C /usr/local -xzf go1.4.2.linux-amd64.tar.gz
    ENV PATH /usr/local/go/bin:$PATH

    # for git
    RUN yum install -y curl-devel expat-devel gettext-devel openssl-devel zlib-devel perl-ExtUtils-MakeMaker
    RUN yum install -y gcc
    RUN cd /tmp && wget https://www.kernel.org/pub/software/scm/git/git-2.3.4.tar.gz && tar zxvf git-2.3.4.tar.gz && cd git-2.3.4 && ./configure --prefix=/usr/local && make prefix=/usr/local all && make prefix=/usr/local install

    # hugo install with go command

    ENV GOPATH /root/go
    RUN go get -v github.com/spf13/hugo

go getで依存関係のものが$GOPATHにインストールされるようです。

あとはhugoをアップグレードしたいときは

> go get -u -v github.com/spf13/hugo


でいけるようです。

gitは、yumでインストールして1.7.1を入れましたが、go get実行時に途中で止まってしまいました。
なので、最新版をコンパイルして入れています。

あと、hgも入れないとgo getのコンパイルが完了しませんでしたので入れてます。

参考URL：http://gohugo.io/overview/installing/

で、dockerfileをおいたディレクトリで以下を実行

    % docker build -t hugo:0.14dev ./

# dockerで使ってみる
dockerで走らせます。

    % docker run -h hugo --name hugo -p 1313:1313 -v ~/hugo:/root/hugo -v /etc/localtime:/etc/localtime:ro -t -i hugo:0.14dev /bin/bash
ローカルとdockerのポートを合わせています。
理由は、

> docker側: 172.0.0.1:1313
ホスト側: localhost:8888


みたいにdockerとホストで別ポートにしてしまうと
localhsot:8888にアクセスすると、cssファイルはlocalhost:1313/css/...を見に行ってしまい、
172.0.0.1:1313にアクセスすると、cssファイルはlocalhost:1313/css/...を見に行ってしまい、
見つからなくなってしまうからです。

何かきっと解決策はありそうですが、とりあえずお試しなのであわせています。

また、-vでローカルフォルダ(~/hugo)をマウントしているのは、ローカルのvimを使いたいからです。

もう１つは時刻合わせです。

## 基本ファイル作成
適当にディレクトリに作成する。

    [root@hugo ~]# cd /root/hugo/
    [root@hugo ~]# hugo new site ./memo
    [root@hugo ~]# ls
    go memo
    [root@hugo ~]# cd memo
    [root@hugo memo]# ls
    archetypes  config.toml  content  data  layouts  static
    [root@hugo memo]# hugo new 20150324.md
    /root/hugo/memo/content/20150324.md created
    [root@hugo memo]# ls content
    20150324.md
    [root@hugo memo]# hugo new post/first.md
    /root/hugo/memo/content/post/first.md created
    [root@hugo memo]# git clone --recursive https://github.com/spf13/hugoThemes themes
    [root@hugo memo]# hugo server --theme=hyde --buildDrafts

ここまでやると、/root/hugo/memo/content以下に20150324.mdファイルが作成されており、これが1313ポートで公開されます。
localhost:1313でアクセスできるはずです。(別のポートかも。コマンドのログにアクセスURLは書いてある)
テーマはデフォルトで用意されているhydeっていうのを使ってみました。

参考URL:http://gohugo.io/overview/quickstart/

## autoreload

--watchを渡すと、変更を自動で感知してくれる。

    [root@hugo memo]# hugo server --theme=hyde --buildDrafts --watch

ってやると、content/以下のファイルが更新されると、ファイルの変更を感知してブラウザが自動でリロードしてくれます。

## table of contents
全体の見通しが悪いのを解決するために、最低限tocはほしい。

テーマがtoc表示に対応していればできるっぽい。

いくつかテーマを変更していったらそれっぽいのがあった。

    [root@hugo memo]# hugo server --buildDrafts --watch --theme=redlounge

とりあえずこれで表示された。

# 使ってみた感想
まだpostとcontentsの違いもわかってないし、tagもつけれるみたい。

s3とかbitbucketに静的コンテンツだけ飛ばして
blogとして使えるのがもともとのウリみたいだけれど、
テーマ変更が簡単だったりwatchも用意されてたりメモ機能としてもなかなか便利。

sphinxのときはwatchするのもbashのスクリプト組んで自前でやってたので、
そういう面も楽かも。
sphinxはテーマもこんなに簡単に変えることができなかったイメージだな。

あと軽いらしいけれども、まだコンテンツ量が少ないので実感はない。

それと、テーマが充実していて、font-awesomeとか入ってるんで、なによりブラウザから見て綺麗。

コミュニティも盛り上がっているし、メモで使うだけにしてもよさそう。

やり始めてから環境構築に1.5時間くらいかかったけど、
上記dockerファイル使うかバイナリならたぶん10分くらいで終わるはずだから、
試す価値はあると思います。