マークダウン記法gem比較( gem 'redcarpet' / gem 'kramdown' /gem 'qiita markdown )
はじめに
現在Ruby on Railsで記事投稿アプリを作成しております。
記事投稿アプリのため、マークダウン記法での出力を可能にしたいという思いから、表記3つのgemを比較しました。
技術検証をした上で、今回はgem 'kramdown', gem 'kramdown-parser-gfm'を使用しております。
GitHubのissueやはてなブログには今回の内容を投稿しておりましたが、改めてZennでもまとめたいと思います。
gem 'kramdown', gem 'kramdown-parser-gfm'を選んだ理由
はじめに何故gem 'kramdown', gem 'kramdown-parser-gfm'を採用したのか、理由を書きたいと思います。
GitHubのstar数、contributors数はgem 'redcarpet'が一番多かったのですが、技術検証してみて、
gem 'redcarpet'では、下記が不便と感じ不採用になりました。
- オプションでマークダウン記法を追記する数が多いこと
- デフォルトで装備されているマークダウン数がgem 'kramdown'より少ないこと
2024/7現在のstar数、contribution数になります。
gem | star数、contribution数 |
---|---|
gem 'redcarpet' | star: 5k / contributors: 108 |
gem 'kramdown' | star: 1.7k / contributors: 76 |
gem 'qiita markdown' | star: 392 / contributors: 25 |
gemのstar数の多さから安易にgem選択をしてはいけないと、改めて感じました。
自分でもなぜそのgemを選んだのか、を言語化できるとてもいい機会になりました。
具体的なそれぞれのgemの比較
下記は技術検証して感じた個人の意見となりますので、ご了承ください。
gem 'kramdown'
- 純粋なRubyで書かれており、拡張性が高いこと
- 多機能で、複雑なMarkdown記法にも対応
- 依存関係が少ないことからも、このgemを採用いたしました。
gem 'kramdown-parser-gfm'
- GitHub Flavored Markdown (GFM)のMarkdown ドキュメントを HTML に変換する、kramdownのパーサー。
- gem 'kramdown'では、使用したいマークダウン記法に不足あり、kramdownのパーサーである gem 'kramdown-parser-gfm'を採用。
パーサーとは?:パーサーとは、プログラムがテキストやデータを理解するための「翻訳者」みたいなもの。
例えば、kramdown-parser-gfmというgemは、GitHub Flavored Markdown (GFM)という特定の形式のMarkdownをHTMLに変換するパーサー。Markdownは、テキストを簡単にフォーマットするための記法で、見出しやリスト、リンクなどを簡単に書ける。パーサーはそのMarkdownの記法を理解して、対応するHTMLに変換する役割を持っている。
つまり、kramdown-parser-gfmを使うことで、Markdownで書かれた文章をウェブページで表示できるHTMLに変換してくれる役割を果たす。 (ChatGPT回答)
gem 'redcarpet'
- 個人記事が豊富であり、導入に困っても日本語で解説を読める。
- デフォルトで入っているマークダウン記法は種類が少なく、optionでマークダウン記法の種類を追記していく形になる。(未検証のマークダウン記法もあるので、確認不足の可能性はあります)
下記、app/helpers/application_helper.rbに記載したオプションの一部です。
autolink: true, # URLやメールアドレスを自動的にリンクに変換、gyazo,通常のリンクテキスト対応
space_after_headers: true, #見出し後の文字の大きさ変換。
fenced_code_blocks: true, #コードブロックで表示
tables: true,
hard_wrap: true, # 改行を <br> タグに変換
lax_html_blocks: true, # HTMLブロックを緩やかに解析するオプション。
no_intra_emphasis: true, #語句の強調。「**強調**」で強調される。(**の後にスペースなし)
strikethrough: true, # 打ち消し線(ストライクスルー)。「~~打ち消し線~~」で打ち消し線が入る
上記以外のオプション(チェックリスト等)はここには入っていないため、より広範な範囲をカバーするにはもっとオプションが必要かと思います。
(私自身は上記で辞めてしまったので、もしかしたらチェックリストはredcarpet
にないオプションの可能性もあります。未検証のためこちらは不確かです。)
個人的には、オプションで追加する手間、またコードの見にくさわかりづらさを感じました。
gem 'qiita markdown
- qiitaに特化したマークダウンが出力できる。
- どの範囲までqiitaがカバーしているマークダウンか、私自身確認ができなかった。依存関係も多く、他のgemも2つほど導入しました。その導入したgemは容量が大きかったようで、導入時に忠告文が出ておりました。
最後に
今回はマークダウン記法に関するgem比較内容を記載させていただきました。
個人的に感じたgemの使用感になりますので、個人の意見としてご覧いただけますと幸いです。
ありがとうございました。
Discussion