Upgrade to Pro — share decks privately, control downloads, hide ads and more …

使えるマークダウンライブラリを探した結果 RailsアプリケーションからRustを使うことになった話

Koji Onishi
February 28, 2024

使えるマークダウンライブラリを探した結果 RailsアプリケーションからRustを使うことになった話

登壇資料

イベント
Rust、何もわからない... #12
https://estie.connpass.com/event/311278/

紹介したライブラリ
https://github.com/markdown-it-rust/markdown-it

コードサンプル
Rust
https://github.com/fursich/markdown-it-sample

Rubyからの利用例
https://github.com/fursich/markdown-it-rubyfied-sample

Koji Onishi

February 28, 2024
Tweet

More Decks by Koji Onishi

Other Decks in Programming

Transcript

  1. 2

  2. 3 cderコントリビュートありがとうございます 🎉 special thanks to: @kenkoooo, @hoyo, @hatoo, @SergPonomar

    https://github.com/estie-inc/cder 複雑な開発⽤シードを 外部キーを保ったまま いい感じにYAML管理できる
  3. 5 • コンテンツをマークダウンで⼊⼒ ◦ プレビュー・もしくは公開時にHTML変換 ◦ 変換をサーバサイドで⾏う(将来的にはクライアント側でのリアルタイム処理を検討) • ほしいもの ◦

    正確なHTML出⼒ ◦ ⾼速な処理 ◦ ドキュメント化された明確な仕様 ◦ カスタム仕様の柔軟な追加・管理 MarkdownをHTMLに変換したい
  4. 6 CommonMark GFM(Github Flavored Markdown) PHP markdown extra Pandoc Multimarkdown

    ・・・ 統⼀規格はなく、⽂法上の曖昧さが存在するものがある ググるといろんな⽅⾔に当たりがち(運⽤者を困らせる) 「マークダウン」は1つではない
  5. 16 ⾒出し1 じゅげむじゅげむ ⾒出し2 ごこうのすりきれ <ul> <li class=”level-2”> <a href=”#heading-1”>最初のタイトル

    </a> </li> <li class=”level-3”> <a href=”#heading-2”>次のタイトル</a> </li> </ul> 最初のタイトル 次のタイトル ⽬次 ## 最初のタイトル じゅげむじゅげむ ### 次のタイトル ごこうのすりきれ <h2 id=”heading-1”>最初のタイトル</h2> <p>じゅげむじゅげむ</p> <h3 id=”heading-2”>次のタイトル</h3> <p>ごこうのすりきれ</p> コンテンツ
  6. 20 https://github.com/markdown-it-rust/markdown-it TL;DR: • if you want to get result

    fast, use pulldown-cmark • if you want to render GFM exactly like github, use comrak • if you want to define your own syntax (like @mentions, :emoji:, custom html classes), use this library markdown-it-rustの紹介
  7. 32 ⾒出し1 じゅげむじゅげむ ⾒出し2 ごこうのすりきれ <ul> <li class=”level-2”> <a href=”#heading-1”>最初のタイトル

    </a> </li> <li class=”level-3”> <a href=”#heading-2”>次のタイトル</a> </li> </ul> 最初のタイトル 次のタイトル ⽬次 ## 最初のタイトル じゅげむじゅげむ ### 次のタイトル ごこうのすりきれ <h2 id=”heading-1”>最初のタイトル</h2> <p>じゅげむじゅげむ</p> <h3 id=”heading-2”>次のタイトル</h3> <p>ごこうのすりきれ</p> コンテンツ やってみる
  8. 42 ベンチマークライブラリ https://github.com/ioquatix/markly • libcmark準拠+GFM拡張がされている • ASTトラバース可能・・・Ruby側で⽬次⽣成ができる • 独⾃ノード追加にはC⾔語での改修が必要 https://github.com/increments/qiita-markdown

    • qiitaのパーサー • デフォルトで⽬次⽣成が可能 • HTML::Pipelineというベースライブラリの仕組みで拡張は可能 ◦ (旧バージョンAPIに依存していてやや不安あり)