Rails6.1 + WebpackerでMaterial Design Bootstrapを導入する
株式会社TECH LUCKという会社で代表兼エンジニアをしている齊藤です。
Ruby on RailsのWebpackerでJS, CSSを管理しながらMaterial Design Bootstrap(以下MDB)を導入する方法になります。
導入するMDBのドキュメントは以下のURLから参照ください。
やること
WebpackerでCSSを管理するために、Webpackerのエントリーポイント(読み込みの最初の地点)となるapp/javascript/stylesheets
にapplication.scss
を作成します。
mkdir app/javascript/stylesheets
touch app/javascript/stylesheets/application.scss
application.html.erb
の中を以下のように変更します。
<%= stylesheet_pack_tag 'application', media: 'all', 'data-turbolinks-track': 'reload' %>
<%= javascript_pack_tag 'application', 'data-turbolinks-track': 'reload' %>
yarnでmdb-ui-kit
パッケージを追加します。
※他の方の記事ではbootstrap-material-design
パッケージを追加していたりますが、エラーなどが出てしまったためmdb-ui-kit
をインストールしました。正直この2つライブラリの違いはわかっていません。
yarn add mdb-ui-kit
先ほど作成したapp/javascript/stylesheets/application.scss
に以下の記述を追加します。
これにより、yarnで導入したMDBのCSSをWebpackerに読み込ませることができます。
@import "~mdb-ui-kit/src/scss/mdb.free";
app/javascript/stylesheets/application.js
の一番上の行に以下の記述を追加します。
※mdb.js
ファイルはこの後作ります。
import * as mdb from 'mdb-ui-kit';
import './mdb'
app/javascript/packs/mdb.js
ファイルを以下の内容で作成します。
このmdb.js
ファイルは、画面が表示された際にMDBのform
コンポーネントが正常に表示されないエラーが発生するエラーを解決することができます。
import * as mdb from "mdb-ui-kit/js/mdb.min.js"
// Function to refresh input element style when necessary
var mdbInputUpdate = function () {
document.querySelectorAll('.form-outline').forEach((formOutline) => {
new mdb.Input(formOutline).init();
});
document.querySelectorAll('.form-outline').forEach((formOutline) => {
new mdb.Input(formOutline).update();
});
}
document.addEventListener('turbolinks:load', () => {
mdbInputUpdate();
});
document.addEventListener('turbolinks:render', () => {
mdbInputUpdate();
});
これにて導入は完了です。
参考記事
Discussion