開発ノート@HarikoApps
HarikoApps: https://hariko.sprkls.me
2024-06-15highlight.jsを用いてActionTextにもシンタックスハイライトを導入する #nobuild #10
ActionTextではTrixというエディタが使われているのですが、Trixには標準ではシンタックスハイライトの機能は備わっていません。そこでhighlight.jsを用いてシンタックスハイライトを導入してみました。検証環境は以下のようになり、importmap-railsを用いたNo Buildな環境になります。
- Rails(ActionText) 7.1.3.4
- importmap-rails 2.0.1
- turbo-rails 2.0.5
- highlight.js 11.9.0
(highlight.jsのシンタックスハイライトはActionTextに限定されず利用できます)
highlight.jsのJSを追加
まず、highlight.jsを導入します。config/importmap.rb に下記のように追記します。
# highlight.js importing pin "highlight.js", to: "https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/es/highlight.min.js" pin "highlight.js/ruby", to: "https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/es/languages/ruby.min.js" pin "highlight.js/javascript", to: "https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/es/languages/javascript.min.js"
ここでは import ... from ... の形でhighlight.jsを扱えるようにES6モジュール形式のJSバンドルを読み込んでいます。言語はRubyとJavaScriptの対応用ファイルをそれぞれ追加しています(highlight.jsは200近くのフォーマットに対応しています。ここにフォーマット対応用のJSファイルがあるので、ここから導入したいフォーマットを選んで導入してください)。
次に app/javascript/application.js に下記のように追記します。
次に app/javascript/application.js に下記のように追記します。
import hljs from "highlight.js" import hljsRuby from "highlight.js/ruby" import hljsJS from "highlight.js/javascript" // フォーマットの登録 hljs.registerLanguage("ruby", hljsRuby) hljs.registerLanguage("javascript", hljsJS) // Turboで遷移時にハイライト処理を行う document.addEventListener("turbo:load", (_event) => { document.querySelectorAll("pre").forEach((block) => { hljs.highlightElement(block) }) })
ここではimportmap.rbに追記した各モジュールをimportし、 highlight.js の初期化処理を行なっています。
CSSを追加
次にスタイルシートを設定します。highlight.js用のスタイルシートはここにあるので、好きなスタイルをRailsプロジェクトにコピーします(スタイルのプレビューはここで行えます)。
標準的なセットアップでSprocketsを使用している場合は app/assets/stylesheets ディレクトリの下にcssファイルを設置してください(highlight.jsのライセンスにも注意してください。CSSをコピーするときにこのライセンスも一緒にコピー&ペーストしておくと良さそうです)。
cssbundling-railsなど、他のCSS管理手法を利用している場合はそちらの手順に従ってください。
標準的なセットアップでSprocketsを使用している場合は app/assets/stylesheets ディレクトリの下にcssファイルを設置してください(highlight.jsのライセンスにも注意してください。CSSをコピーするときにこのライセンスも一緒にコピー&ペーストしておくと良さそうです)。
cssbundling-railsなど、他のCSS管理手法を利用している場合はそちらの手順に従ってください。
完了!
これで完了です!highlight.jsの自動フォーマット判定のおかげでとても簡単に導入できました。
Updated at