HUGOについて
サイトジェネレーターのHUGO
を使ってみたので、紹介します。一応、テンプレートをダウンロードしてきて、設定をビルドし、HTMLをサーバーにアップロード。ブラウザから WAN 経由でアクセスするところまでをやります。
HUGOの特徴としては、一つに、とてもシンプルだということ。具体的には、各々の動作が独立しており、サイトジェネレーターとしての本来的な役割を果たします。これは、golang
で書かれたツールの特徴的なものだという印象を受けますね。
golang で書かれたツールというのは、基本的に、必要最小限のシンプルなことを実行するだけ、ということが多く、余計な機能など付いていないという印象を私は持っています。
今回紹介する HUGO も基本的には同じで、例えば、同系統のツールであるOctopress
やMiddleman
は、デプロイから何からやるまでのコマンドが用意されていますが、 HUGO は、 設定をビルドして、 CSS, HTML を吐き出すだけという感じです。
したがって、サーバーとの連携は自分で alias なり、 script を叩く、若しくは、 HUGO にコマンドを追加する必要が出てくる感じです。
HUGO のお勧めなところは、他の golang 製のツールと同じように、非常に高速であること。 Octopress のビルドの遅さ (Ruby) にイライラすることは多いのですが、 HUGO に関しては、その心配は、最小限に抑えられるでしょう。
インストール
Mac の場合のインストール方法です。他も Readme に書いてある感じです。
Mac の場合
# install
$ brew install hugo
Go の場合
$ git clone https://github.com/spf13/hugo
$ cd hugo
$ go get
使い方
# template
$ hugo new site my_site
$ cd my_site
# preview
$ hugo server
# build
$ hugo
ビルドすると、public
フォルダに置かれます。これを Web サーバーにアップロードすると、サイトページがみれます。
テーマを使う
# all download
$ git clone --recursive https://github.com/spf13/hugoThemes.git themes
私の場合は、以下のテーマを個別にダウンロードしました。
my_site
配下で以下のコマンドを行います。
$ cd theme
$ git clone https://github.com/roperzh/tinyce-hugo-theme
$ cd ../
$ cat << EOF > config.yaml
---
contentdir: "content"
layoutdir: "layouts"
publishdir: "public"
indexes:
category: "categories"
baseurl: "http://syui.github.io/hugo-air"
title: "Hugo Blog Template for GitHub Pages"
# https://github.com/spf13/hugo/issues/230
# subdomain: "hugo-air"
# permalinks:
# post: "subdomain/:year/:month/:title/"
EOF
$ mkdir -p theme
$ cp -r layout/{_default,partials} theme/
$ mkdir -p content/posts
$ cat << EOF > !$/newest.md
---
title: "Just another sample post"
date: "2014-03-29"
description: "This should be a more useful description"
categories:
- "hugo"
- "fun"
- "test"
---
EOF
$ hugo server
GitHub Pages
上のテーマを GitHub pages にアップロードして、アクセスできるようにしてみたいと思います。
参考:
しかし、プロジェクトページにアップロードすると、当然ながらURLが複雑になりますが、どうやらその問題は個別に対応するしかないようです。複雑になるというのは、例えば、http://tummychow.github.io/myreponame
のような感じになります。
私の場合は、調べてる時間もなかったので、直書きで対応しました。http://syui.github.io
の部分がそうですね。例えば、baseurlにホームのURL, subdomainにリポジトリ名を設定しておいて、{{ .SiteUrl }}{{ .SubDomain }}
みたいな感じでもいけるかもしれませんけど。
<div class="post-content">
<h1 class="post-title">
<a href="http://syui.github.io{{ .RelPermalink }}">{{ .Title }}</a>
</h1>
<span class="post-date">{{ .Date.Format "Mon, Jan 2, 2006" }}</span>
<p>{{ .Description }}</p>
</div>
後は、デプロイ処理の処理ですが、これはコマンドが用意されてないみたいなので、自分で実行します。
まず、ビルドしてできたディレクトリに移動します。
$ cd public
リポジトリの作成と必要なブランチの作成です。以下の書き方だと、ディレクトリ名がリポジトリ名になる感じです。なんか、GitHub API使ってる感じっぽいですが、パスワードとか聞かれるかもです。
# !/bin/bash
echo -n username:
read userr
repo=`echo $PWD:t`
repo_j={\"name\":\"$repo\"}
url="https://github.com/"$userr/$repo.git
curl -u $userr https://api.github.com/user/repos -d $repo_j
rm -rf .git
git init
echo $url
git remote add origin $url
git commit --allow-empty -m "noun"
git push -u origin master
git checkout -b gh-pages
git commit --allow-empty -m "noun"
git push -u origin gh-pages
ユーザー名がパソコンと同じ場合、$USER
で良いですので、read userr
を置き換えてもいいです。user=$USER
これで、gh-pages
に空pushできます。もちろん、空でなくてもいきなり追加してもよいですが、その場合は修正します。
- git commit --allow-empty -m "noun"
+ git add A
+ git commit -m "test"
+ git push
最後に、pushして、pagesにアップロードします。
$ git add A
$ git commit -m "update `date`"
$ git push
また、ビルドとアップロードを同時に行うスクリプトとか用意しておくと便利です。更新毎に以下のようなコマンドを走らせることになるからです。
$ hugo
$ cd public
$ git add A
$ git commit -m "update `date`"
$ git push