Subscribed unsubscribe Subscribe Subscribe

HakyllでGitHubのProject PagesのHTMLを作る

Haskell

GitHub PagesはJekyllが使えるので素直にRubyの流儀に従えばいいのですが、Haskell使いならやはりHakyllを使いたくなります。HakyllはテンプレートにYesodで使われているhamletも使えるので、Yesod使いならなおさらです。というわけでHakyll + GitHub Pagesのメモです。

まずは公式ドキュメントに沿ってgh-pagesブランチを作ります。

$ cd /path/to/fancypants
$ git symbolic-ref HEAD refs/heads/gh-pages
$ rm .git/index
$ git clean -fdx

...

$ echo "My GitHub Page" > index.html
$ git add .
$ git commit -a -m "First pages commit"
$ git push origin gh-pages
GitHub Pages

続いてHakyll用のファイルを準備します。gh-pages.hsとでもしておきましょう。

{-# LANGUAGE OverloadedStrings #-}
module Main where
import Control.Category ((>>>))
import Hakyll

main :: IO ()
main = hakyllWith config $ do
  match "templates/*" $ compile templateCompiler
  match (list ["index.markdown"]) $ do
    route $ setExtension "html"
    compile $ pageCompiler
      >>> applyTemplateCompiler "templates/default.hamlet"
      >>> relativizeUrlsCompiler

config :: HakyllConfiguration
config = defaultHakyllConfiguration { deployCommand = deploy }
  where deploy = "cp -r _site/* . && runghc gh-pages.hs clean"

あとはtemplates/default.hamletと

!!!
<head>
  <meta charset=utf-8 />
  <title>#{title}
<body>
  #{body}

中身であるindex.markdownを作ります。

---
title: TKYProf - Home
---

TKYProf
================
A web-based interactive visualizer for GHC time and allocation profiling reports. It helps you find the performance bottlenecks of your code quickly.

How to use TKYProf
----------------
* `cabal install tkyprof` installs the executable `tkyprof`.
* Run `tkyprof` on your terminal.
* Access [http://localhost:3000/](http://localhost:3000/).
* Drag and drop your profiling reports. TKYProf also supports an ordinary file selection dialog.
* TKYProf redirects you to a pretty chart.

HTMLを生成してみましょう。

% runhaskell gh-pages.hs build
Initialising
  [   0ms] Creating store
  [   4ms] Creating provider
Adding new compilers
Compiling templates/default.hamlet
  [      ] Checking cache: modified
  [   1ms] Total compile time
Compiling index.markdown
  [      ] Checking cache: modified
  [   8ms] Total compile time
  [   0ms] Routing to index.html

buildではなくpreviewするとブラウザからHTMLを確認できます。

% runhaskell gh-pages.hs preview
LInitialising
  [   0ms] Creating store
istening on http://0.0.0.0:8000  [   7ms] Creating provider
Adding new compilers
/

問題ないことが確認できたらdeployコマンドを実行して、_siteディレクトリの中身をプロジェクトルートにコピーします。

% runhaskell gh-pages.hs deploy
Removing _site...
Removing _cache...

準備は整いました。生成されたファイルをcommitして、リモートのgh-pagesブランチにpushすればおしまいです。

TKYProf - Home