Railsで簡単にMarkdownを使えるようにする
たまにRailsアプリだけど、静的ページだから手間をかけずにメンテしたいとか、 Railsわからない人にもメンテしてほしいページとかがあります そんなときにはMarkdown形式でページが作成されていると便利です
今回はRubyのMarkdown用Gem「redcarpet」を利用したRailsアプリでのMarkdown記法利用方法について説明します
今回試した環境
ディレクトリ構成
- top:今回のviewに対応するコントローラー。top#index => rootとなるように設定
方法
- redcarpet gemを追加する
- application_helperにredcarpetを利用するメソッドを作成する
# helpers/application_helper.rb module ApplicationHelper # markdown形式のファイルをhtmlに変換 # 例ファイル名:"index.md" controller:Top # = "#{APP_ROOT}/app/views/top/index.md" # def render_md(md_path) #ファイル名のみ:controller名フォルダ配下を参照 #ディレクトリ+ファイル名:Viewsルートからのパスを参照 if File.basename(md_path) == md_path path = "#{File.expand_path(Dir::getwd)}/app/views/#{controller.controller_name}/#{md_path}" else path = "#{File.expand_path(Dir::getwd)}/app/views/#{md_path}" end return nil unless File.extname(path) == ".md" text = File.open(path,"r") do |f| f.read end # redcarpetのオプション類 options = { filter_html: true, hard_wrap: true, space_after_headers: true, } extensions = { autolink: true, no_intra_emphasis: true, fenced_code_blocks: true, } renderer = Redcarpet::Render::HTML.new(options) markdown = Redcarpet::Markdown.new(renderer, extensions) markdown.render(text).html_safe end end
- controllerのerbテンプレートにMarkdown用のrenderを記載する
#views/top/index.html.erb <%= render_md "index.md" %> <%= render_md "shared/shared.md" %>