関数型言語に少しでも慣れるため、これからGitHub Pagesで何か作る時は、Hakyll を使うのを自分に強制しようかな、と思っています。(思いましたが、その後、結局Jekyll使ってます。)

というわけでまずはhello worldから。

ローカルで動かす

インストール

https://www.haskell.org/platform/mac.html を入れる。
以降は、https://jaspervdj.be/hakyll/tutorials/01-installation.html を参考に。

$ ghc -V
The Glorious Glasgow Haskell Compilation System, version 7.10.3

$ cabal install hakyll

パスを通しておかないとhakyll-initなどが使えないので注意 ( http://qiita.com/JunKikuchi/items/8b82b6811687560d903d )

# ~/.bash_profile
export PATH="$HOME/Library/Haskell/bin:$PATH"
# source ~/.bash_profile

サイトの作成

$ hakyll-init hello-hakyll-with-gh-pages
$ cd hello-hakyll-with-gh-pages
$ ghc --make -threaded site.hs
$ ./site build

これで_site以下にサイトが構築される

$ ./site watch

すれば、http://localhost:8000/で見れるようになる。

Circle Ciを使ってdeploy(断念)

hslua-0.4.1のインストールがこけて断念したけど、一応メモを残しておく。
プロジェクトrepo(gh-pages)でやる前提。

http://www.stackbuilders.com/news/dr-hakyll-create-a-github-page-with-hakyll-and-circleci を参考にした。

Travis CIの場合は、https://imokuri123.com/blog/2015/04/create-github-pages-with-hakyll.html が日本語で参考になりそうだった。

masterブランチの作成(ソース管理用)

$ git init
$ git commit --allow-empty -m "Create master branch"
$ git remote add origin git@github.com:tnantoka/hello-hakyll-with-gh-pages.git
$ git push -u origin master

※ --orphanというのは他のブランチの歴史を引き継がないブランチ。http://d.hatena.ne.jp/eldesh/20120715/1342343316

gh-pagesブランチの作成(サイト公開用)

$ git checkout --orphan gh-pages
$ git commit --allow-empty -m "Create gh-pages branch"
$ git push origin gh-pages

gh-pagesを_siteとしてsubmoduleに追加

$ rm -rf _site
$ git checkout master
$ git submodule add -b gh-pages git@github.com:tnantoka/hello-hakyll-with-gh-pages.git _site
$ git commit -m "Add submodule at _site"
$ git push origin master

$ wget https://raw.githubusercontent.com/github/gitignore/master/Haskell.gitignore -O .gitignore
$ echo "_cache/" >> .gitignore 
$ echo "/site" >> .gitignore 

$ git add .
$ git push origin master

Circle CIでbuild

Circle CIで使えるHaskellの環境は、https://circleci.com/docs/environment#haskell に載ってる。

$ vim circle.yml
$ git add circle.yml
$ git commit -m "Configure CircleCI"
$ git push origin master

最終的に、
https://github.com/tnantoka/hello-hakyll-with-gh-pages/blob/master/circle.yml の内容でbuildしたが、先述の通り、hslua-0.4.1がインストールできなかったので、一旦断念。

ログはこちら。
https://circleci.com/gh/tnantoka/hello-hakyll-with-gh-pages/3

ローカルからdeploy

できればCIサーバからやりたかったけど、別にローカルからでも運用はできるので、https://github.com/tnantoka/hello-hakyll-with-gh-pages/blob/master/deploy.sh でdeployすることにした。

$ ./deply.sh

http://tnantoka.github.io/hello-hakyll-with-gh-pages/
無事動いた。