Fork me on GitHub

(code "liquidz.uo")

エイプリルフールに被ってしまいましたが、 ClojureでJekyllライクなブログジェネレータを作りました。

misaki logo

misaki / Jekyll inspired static site generator

当ブログはJekyllを使ってGitHub Pages上で運用しているのですが、 jekyll --server のファイル変更から反映までの遅さ(何か手があるのかもしれないですが) とClojurianで主にClojureのブログなのにrubyで運用してるのが納得いかなかったので(rubyは好きですが) 作ってみました。

"misaki" という名前は Jekyll が人名なので同じく人の名前にしたかったのと "美しく咲く" というがちょっと綺麗かなぁという軽いのりで付けてます。

あ、でも伊東美咲は好きです。綺麗なお姉さん好きです。

ンプルの実行

以下のコマンドでGitHubからとってこれます。

$ git clone git://github.com/liquidz/misaki.git
$ cd misaki
$ lein run sample

ローカルサーバが起動するので http://localhost:8080/ にアクセスしましょう。

なおサンプルと同じものをデモページとしてこちらにも公開しています。

分のブログを作る

1からファイルを用意しても良いのですが、面倒だと思うのでサンプルをコピーして ローカルサーバを起動させましょう。

$ cp -pir sample your_blog
$ lein run your_blog

ローカルサーバの起動中は watchtower でテンプレートファイルを監視しているので変更すれば自動的にHTMLへのコンパイルが走ります。

デフォルトではコピーしたディレクトリ配下の "_template" 内にテンプレート(.clj)、ポストファイル(_post)、レイアウトファイル(_layout)が 配置されているので、そのあたりを編集しつつブラウザで確認という流れで作っていくことになります。

$ vi your_blog/_template/index.html.clj

なおテンプレートなどディレクトリ構成の詳細はドキュメントの Directory Structure を参照してください。

ただドキュメントよりサンプルソースを見たほうが早いかもしれないです。

ンプレートサンプル

テンプレートはclojureのコードになっています。HTMLへのコンパイルには hiccup を使っているのでhiccupを使ったことのある方であればすんなり入れるかなと思っています。

;; テンプレートオプション
;; ----
;; レイアウト定義
; @layout  default
;; テンプレートタイトル
; @title   sample tempalte

;; Clojureコードなので関数定義できます
(defn h1 [s] [:h1 s])

;; site変数でテンプレートオプションにアクセスできます
(h1 (:title site))
[:p "Welcome to misaki world!"]

;; コードハイライト
#-CLJ
(println "google-code-prettify highlight!")
CLJ

テンプレートではコメント内に以下のフォーマットでテンプレートオプションを定義できます。

; @key value

テンプレートオプションではそのテンプレートに適用するレイアウトを指定したり、 テンプレート自体のタイトルを定義することができます。

レイアウトはテンプレート同様にClojureコードなので オプションや関数を同様に定義することができます。 共通して使う定義や関数についてはレイアウト側で定義しておくと便利かもしれないです。

レイアウトの詳細についてはドキュメントの Edit Template の "Layout file" の項目を参照してください。

なおテンプレートオプションへのアクセスについては 上記サンプルにもある通り site といった特別な変数が利用できます。

site の内容

site
;=> {:title "sample template"
;    :date  org.joda.time.DateTime  ;更新日
;    :posts [post1 post2 ... postN]

:postsの内容については後述します。

ントリーの追加

デフォルトでは _template/_posts/ 配下にファイルを作成することで ブログのエントリーを追加することができます。

エントリーファイルはJekyll同様にファイル名のフォーマットが以下のように決まっています。

YYYY-MM-DD-タイトル.html.clj

このファイル名が /YYYY/MM/タイトル.html というURLに対応します。

(:posts site) の内容

(first (:posts site))
;=> {:title "post title"
;    :url   "post url"
;    :date  org.joda.time.DateTime  ;ファイル名の日付
;    :file  java.io.File ; エントリーファイル
;    :lazy-content エントリーの内容(clojure.lang.Delay) }

なおテンプレート編集やレイアウトに関する詳細はドキュメントの Edit Template を参照してください。

力されたHTML

今回の例でいえば "your_blog/" ディレクトリ配下がドキュメントルートになり コンパイルされたHTMLはすべて your_blog 配下に出力されます。

なのでGitHub Pagesへ反映する場合にはこのディレクトリ毎pushしてしまえば良いのですが、 その場合、テンプレートファイルも一緒にpushされます。

これは私自信がテンプレートとHTMLを別レポジトリで管理したくないから という理由でこのようなディレクトリ構成にしているのですが、 もしテンプレートとHTMLを別々に管理したい場合には _config.clj でmisaki内で扱うディレクトリのパスを扱っており、 それを変更することで実現可能です。

キュメント

本エントリではあくまで紹介という体で全部の機能は紹介していませんし、 紹介している機能でも詳細を省いたりしています。

少しでも興味をもっていただけたのならば、GitHubの Wiki にまとめていますのでご参照ください。

なお英文はかなり適当です。。

後に

まだアルファバージョンということでとりあえず動くかな?というレベルです。 今後の流れとしてはまずはこのブログ自体をJekyllからmisakiに移行させて 足りない機能などあれば追加していきたいと思っています。

またClojureScriptにも対応させてJSを置き換えたいですし、 CSSまわりで良いライブラリがあればそれを導入して、 前回のエントリのタイトルじゃないですが、全部Clojureでブログ運用 とか出来ても良いのかなぁと思っています。

考ページ

» Go page top

blog comments powered by Disqus