投稿

3月, 2013の投稿を表示しています

ystとgitit

Hakyllは設定ファイルがHaskellなので,ちょっと取っ付きにくい。でもPandocは使いたいと思っていたら,Pandocの作者が静的サイト生成ツールystやウィキgititなどのツールも作っていた。

ystの特長は,JekyllやHydeのように設定をYAMLに書くこと。このデータをstring templateに取り込んでサイトを生成する。string templateの作者はANTLRの作者。

gititはgitなどを使って履歴を管理する。見た目はWikipediaに似ている。Pandocを使って,ウェブページをLaTeX様々なフォーマットで保存できるのは,大変便利。個人用のメモに使うとよさそう。

ちなみにPandocの作者は哲学の教授。

HakyllでMathJaxを使う

静的サイト生成ツールHakyllの強みは,Pandocを使ってテキスト処理をしていること。PandocはMathJax出力ができるので,Hakyllを使って生成するサイトにもMathJaxが使えるはずである。

hakyll-initした既定のままでは,MathJaxは利用できない。Hakyllの設定ファイルは,Haskellソース。Qnikst blogのポストを参考にsite.hsを修正する。

site.hsの編集 まず,ライブラリを追加する。

import qualified Data.Map as M import Text.Pandoc Pandocにオプションを渡すために,pandocCompilerではなく,pandocCompilerWithを使う。オプションと言ってもコマンドラインオプションではなく,PandocのAPIの引数として渡す。
match "posts/*" $ do route $ setExtension "html" compile $ pandocCompilerWith defaultHakyllReaderOptions pandocOptions >>= saveSnapshot "content" >>= return . fmap demoteHeaders >>= loadAndApplyTemplate "templates/post.html" postCtx >>= loadAndApplyTemplate "templates/default.html" (mathCtx `mappend` postCtx)
ここでは,template/default.htmlでMathJaxを使う。このテンプレートを適用する際に,mathCtxによりタグ$mathjax$を調べる。数式を使う場合にのみ,MathJaxのJavaScriptを読むようにする。このテンプレートは,数箇所使われているのでmap…

静的サイト生成ツールの導入

静的ウェブサイトは,あらかじめウェブページをHTMLページを作っておいたサイトを言う.動的サイトをスクリプト言語とすると,静的サイトはコンパイル言語に対応する.

現在では,PHPなどを使った動的ウェブサイトが一般的になっていて,静的サイトは古いと考えられている.しかし,速度やセキュリティの面で静的サイトにも利点がある.静的サイトを選択した場合,HTMLを手で書いていたのでは手間がかかる.

そこで,markdown記法などで入力となるテキストファイルを用意し,これを処理してサイトを生成する静的サイト生成ツール(static site generator)が考案された.入力となるテキストファイルには,タイトルやメタ情報をタグとして記述できる.コンパイル言語でMakeやCMakeを使ってバイナリを生成するのに似ている.

以前は,bloxsomを使ってサイトを作っていた.bloxsomのプラグインとしてmarkdown.plを使い,markdownからHTMLを生成させていた.プロジェクト管理にはMakeを使った.

最近は,便利な静的サイト生成ツールがいくつもある.

Rubyで書かれたJekyllPythonで書かれたHydeHaskellで書かれたHakyll
これらをOS X Mountain Lion 10.8.3 に導入してみた.普段は何でもMacPortsで入れるのだが,ここではRuby, Python, Haskellそれぞれの独自のパッケージ管理システムを利用する.
Jekyllの導入 sudo gem update --system sudo gem install jekyll Hydeの導入 sudo easy_install pip sudo pip install hyde typogrify-hydeの導入に失敗する.これを先にインストールするとうまくいく.
sudo pip install git+git://github.com/hyde/typogrify.git#egg=typogrify-hyde sudo pip install hyde HakyllのインストールHaskel Platformをインストール.私の場合は,古いバージョンがインストールされていたので削除.
uninstall-hs uninstall-hs thru…