AsciiDocを静的サイトジェネレータで使ってみる (Jekyll / Middleman / Metalsmith)

背景

  • Markdown の表現力に不満
    • 特に定義リスト。これを一番使いたいのに記法がない
  • AsciiDoc ってのが良さそう qiita.com
  • 言語は Ruby or JavaScirpt がいいなぁ

Jekyll

jekyll 3.0.0 | Error:  undefined method `getConverterImpl' for #<Jekyll::Site:0x007f87b910b088>

動かない。よくわからん。

なんか見つけた。まだ見てない。

Middleman

Middleman は久しぶりに使った。何気なく Ruby のバージョンを上げてみたらエラー。 middleman-livereload を使っていると発生。

Gemfile

source "https://rubygems.org"

ruby '2.1.7'

gem "middleman"
gem "asciidoctor"

config.rb

activate :asciidoc

source/sample.adoc

= Hello, AsciiDoc!
Doc Writer <doc@example.com>

An introduction to http://asciidoc.org[AsciiDoc].

== First Section

* item 1
* item 2

[source,ruby]
puts "Hello, World!"

f:id:syonx:20151103171657p:plain 動作確認はできた。

Metalsmith

qiita.com

公式のサンプルがこれで、その中にある static-site を参考にする。 github.com

build.js

var Metalsmith = require('metalsmith');
var asciidoc   = require('metalsmith-asciidoc');
var markdown   = require('metalsmith-markdown');
var templates  = require('metalsmith-templates');

Metalsmith(__dirname)
  .use(asciidoc())
  .use(markdown())
  .use(templates({engine:"handlebars"}))
  .use(hello)
  .build(function(err){
    if (err) throw err;
  });


function hello(files, metalsmith, done){
  for (var file in files) {
    console.log(file);
  }
  done();
}

src/sample.adoc

---
title: My Sample Post
date: 2015-11-04
template: post.html
---

== Hello, AsciiDoc!
Doc Writer <doc@example.com>

An introduction to http://asciidoc.org[AsciiDoc].

== First Section

* item 1
* item 2

[source,ruby]
puts "Hello, World!"

commands

$ make build

$ node build.js

ふむ。素晴らしい。

この記事がとても参考になりました。

d.hatena.ne.jp