RailsのビューにMarkdownを使うためのGemを公開しました

RailsのビューにMarkdownを使えるようにするRMarkというGemを公開しました。 パーサとしてRedcarpetやRDiscount、Kramdownを使うことができます。

インストール方法

Gemfileに以下を書いてbundleするだけで使えます。

gem 'r_mark'

また、あわせてRedcarpetなどパーサ用のGemをインストールする必要があります。

使い方

RMarkは、(1)ビューを直接表示する方法と(2)Partial経由で表示する方法の2パターンをサポートしています。

(1) 直接表示する

通常のビューを作成するように、拡張子を.mdにするだけでHTMLとしてレンダリングすることができます。

app/views/pages/index.md:

# Index

- foo
- bar
- baz

(2) Partial経由で表示する

以下のようにPartial経由でも表示することができます。

app/views/pages/show.html.erb:

<%= render 'pages/partial' %>

app/views/pages/_show.md:

# Show

- foo
- bar
- baz

カスタマイズ

標準ではRedcarpetをパーサとして使用していますが、config/initializers/r_mark.rbを作成することでカスタマイズすることもできます。

RMark.setup do |config|
  config.parser = :RDiscount
end

config.parser:Redcarpet:RDiscount:Kramdownを設定することができます。

また、URLを自動でリンクにするなどのオプションを設定することもできます。 以下に参考例を示します。

RMark.setup do |config|
  # config.parser = :Redcarpet
  #
  # config.options = {
  #   autolink: true
  # }

  # config.parser = :RDiscount
  #
  # config.options = [
  #   :autolink
  # ]

  # config.parser = :Kramdown
  #
  # config.options = {
  #   auto_ids: false
  # }
end

オプションは以下のページが参考になります:

背景

私が個人で運営しているサービスの利用規約やプライバシーポリシーは、Markdownにより管理しています。 ただ、例えばHamlの:markdownフィルタを使う場合、純粋に文書のみを管理することができません。 Partial経由で.mdを表示したい状況にありました。

これを実現するには、markdown-railsを使う方法があります。 ただ、markdown-railsはカスタマイズ方法が直感的でなく、本体のメンテナンスも3年ほど行なわれていません。 そのため、自分で実装するに至りました。

参考