📚

利用規約とプライバシーポリシーをMarkdownで管理する方法

2021/01/05に公開

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