利用規約とプライバシーポリシーをMarkdownで管理する方法
Webサービスに必ず存在するのが、利用規約とプライバシーポリシーです。
これのメンテが前職で大変だったので、解決するソリューションを考案したので共有します。
直面する問題
利用規約やプライバシーポリシーはたいていの場合、エンジニアだけで管理するものではなく、法務担当や外部の弁護士とのやりとりを通すことが多々あります。
このとき、利用規約の修正箇所を管理していなかったりすると抜け・漏れが発生するリスクがありますし、利用規約をいちいちhtmlタグでラップしていく作業は非常に辛い ものがあります。(しかも一応デグレチェックしないといけないし)
とはいえ、向こうにExcel方眼紙などで渡されてしまうと超辛い一方で、相手はエンジニアではないので、相手側にhtmlタグ込みのアウトプットを期待するのは無理があります。とにかく、まず丸コピペできるような形式にはしておいてほしいものですが。。。。
そこで、「htmlより簡潔に記述できてあとでhtmlに自動で変換できる」Markdown記法を使って利用規約・プライバシーポリシーを管理する運用を考えます。
(法務)(とりあえずWordかなにかで文章を投げる)->エンジニア(一旦受けとってMarkdownエディタにコピペ、Web上に載せられるようなスタイリング・段落分けを加工)→成果物はmdファイルとしてgit管理する
上記したイメージです。
Markdownを扱えるGem「redcarpet」を入れる
redcarpetは、RubyでMarkdownを簡単に扱えるライブラリです。今回はこれを使用していきます。
Gemfileに以下を追記します。
gem "redcarpet"
bundle installするとredcarpetが利用可能となります
ApplicationHelper
読み込み対象のprivacy_policy.mdと、service_term.mdをRails.root直下に置きます。
(実運用するときには適宜ディレクトリを切っても大丈夫です。後述するRails.root.joinで読み出すパスを変更してください)
ApplicationHelperでは、以下のように記述します。
module ApplicationHelper
def privacy_policy
markdown = Redcarpet::Markdown.new(Redcarpet::Render::HTML)
markdown.render(File.read(Rails.root.join('privacy_policy.md')))
end
def service_term
markdown = Redcarpet::Markdown.new(Redcarpet::Render::HTML)
markdown.render(File.read(Rails.root.join('service_term.md')))
end
end
これでview側からprivacy_policyを呼ぶだけで、html化された文章を読み込むことができます。
ApplicationHelperに書きたくない場合は下記のようにします。
class PrivacyPolicyController < ApplicationController
def index
markdown = Redcarpet::Markdown.new(Redcarpet::Render::HTML)
@privacy_policy = markdown.render(File.read(Rails.root.join('privacy_policy.md')))
end
end
View
ここでは、PrivacyPolicyControllerというコントローラのindexメソッドでプライバシーポリシーを表示すると仮定します。
privacy_policy/index.html.erbはわずか一行です。
前述したMarkdown->htmlに変換した文字列を渡してあげるだけです。
<%= raw(privacy_policy) %>
<!-- Controllerにレンダリング処理を書いた場合は -->
<%= raw(@privacy_policy) %>
まとめ
本記事では、RubyのGem「redcarpet」を使い、Markdownで利用規約・プライバシーポリシーを管理する方法について説明しました。
RailsEngineとか使って外部に切り出してGem化できないかなーー。。
Discussion