nownab.log

nownabe's daily posts

qiita-markdownをMiddlemanで使えるようにするGemを作った

Posted on Jul 26, 2016

github pagesでblogを公開しようと思ってゆるりと構築中なんですが、静的ジェネレータとしてMiddlemanを使うことにしました。

esa.ioのGitHub Webhookから記事を投稿することを目論んでるので、記事の執筆にはMarkdownを使うことになります。

で、esaのMarkdownって拡張されていて、その中でもコードブロックのファイル名表示がどうしても使いたいんです。 良い機能ですよね。

というわけでesaのMarkdownをそのままレンダリングするものがあればいいんですが、なさそうなので同じくファイル名表示ができるqiita-markdownを使うことにしました。

といってもMiddleman内部では各種レンダリングにTiltを使用しているので、Tiltに対応させれば使うことはできます。

次のようなクラスをひとつ作るだけでOKです。 (Middlemanが対応しているTiltがちょっと古いので注意が必要です)

# frozen_string_literal: true

require "tilt/template"
require "qiita/markdown"

module Tilt
  class QiitaTemplate < Template
    self.default_mime_type = "text/html"

    def self.engine_initialized?
      defined? Qiita::Markdown::Processor
    end

    def prepare
      @engine = Qiita::Markdown::Processor.new
      @output = nil
    end

    def evaluate(_scope, _locals, &block)
      @output ||= @engine.call(data)[:output].to_s
    end
  end
end

なんですが簡単に使えるようにGemにもしました。

middleman-renderers-qiita_template | RubyGems.org | your community gem host

Gemfilegem "middleman-renderers-qiita_template"を追加して、config.rb

set :markdown_engine_prefix, Middleman::Renderers
set :markdown_engine, :qiita

と追加すれば使えます。

突貫で作ったのでいろいろできてない感はあります。

数式への対応とかMiddleman風のリンクへの対応とかしたいですねー。

何かアレばぜひPRください 😇