Webサービスに必ず存在するのが、利用規約とプライバシーポリシーです。
これのメンテが前職で大変だったので、解決するソリューションを考案したので共有します。
直面する問題
利用規約やプライバシーポリシーはエンジニアだけで管理するものではなく、法務担当や外部の弁護士とのやりとりを通すことが多々あります。
このとき、利用規約の修正箇所を管理していなかったりすると抜け・漏れが発生するリスクがありますし、利用規約をいちいちhtmlタグでラップしていく作業は非常に辛いものがあります。(しかも一応デグレチェックしないといけないし)
とはいえ、向こうに方眼紙などで渡されてしまうと超辛い一方で、相手はエンジニアではないので、相手側に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直下に置きます。
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化できないかなーー。。