はじめに
本記事では、Rails 6.0から導入された「Webpacker」を使ってjQueryとBootstrapを管理する方法を説明します。
WebpackerでjQueryとBootstrapを管理
Railsアプリの作成
以下のコマンドを実行して、新しいRailsアプリを作成します。コマンド引数に_6.0.0_
をつけることで作成するアプリのRailsバージョンを指定することができます。
$ rails _6.0.0_ new test_app
以下のコマンドを実行して、コントローラーとビューを作成します。
$ rails g controller Statics index
テストサーバーを起動しRailsアプリが作成できているか確認してみます。
$ rails s
テストサーバーが起動したら、ブラウザでhttp://localhost:3000/statics/indexにアクセスします。以下のように表示されていればOKです。
jQueryとBootstrapをインストール
以下のコマンドを実行して、jQueryとBootstrapをインストールします。popper.js
はBootstrapのツールチップを使うために必要になります。
$ yarn add jquery bootstrap popper.js
package.json
にjQueryとBootstrapが追加されていればOKです。
package.json
{
"name": "test_app",
"private": true,
"dependencies": {
"@rails/actioncable": "^6.0.0",
"@rails/activestorage": "^6.0.0",
"@rails/ujs": "^6.0.0",
"@rails/webpacker": "^4.2.0",
"jquery": "^3.4.1",
"bootstrap": "^4.4.1",
"popper.js": "^1.16.0",
"turbolinks": "^5.2.0"
},
"version": "0.1.0",
"devDependencies": {
"webpack-dev-server": "^3.9.0"
}
}
jQueryの管理
app/javascript/packs/application.js
に以下を追記します。
application.js
require("jquery")
config/webpack/environment.js
に以下を追記します。
environments.js
const webpack = require('webpack')
environment.plugins.prepend('Provide',
new webpack.ProvidePlugin({
$: 'jquery/src/jquery',
jQuery: 'jquery/src/jquery'
})
)
Bootstrapの管理
app/javascript/
配下にsrc
というディレクトリを作成し、その中にapplication.scss
というファイルを作成します。作成したapplication.scss
に以下を記述します。
application.scss
@import '~bootstrap/scss/bootstrap';
app/javascript/packs/application.js
に以下を追記します。
application.js
import 'bootstrap'
import '../src/application.scss'
動作確認
確認のため、app/views/statics/index.html.erb
を以下のように変更します。ページ読み込み時にjQueryでBootstrapのスタイルを適用させています。
index.html.erb
<h1>Statics#index</h1>
<p>Find me in app/views/statics/index.html.erb</p>
<!-- 以下を追記 -->
<script>
$(window).on('load', function() {
$('body').addClass('bg-dark');
$('body').addClass('text-light');
});
</script>
テストサーバーを再起動します。
$ rails s
http://localhost:3000/statics/indexにアクセスします。以下のように、ページ読み込み時にBootstrapのスタイルが適用されていればOKです。
ちなみに、Webpacker管理下のファイルが更新されたときはWebpackerのコンパイルが走ります。テストサーバーを起動したターミナルを見てみると、以下のようなログが出力されています。コンパイルに約37秒かかっていることがわかります。
[Webpacker] Compiling...
[Webpacker] Compiled all packs in /Users/user/Products/test_app/public/packs
[Webpacker] Hash: 53154d7baad00c6a1252
Version: webpack 4.41.2
Time: 3718ms
設定ファイル全文
app/javascript/packs/application.js
// This file is automatically compiled by Webpack, along with any other files
// present in this directory. You're encouraged to place your actual application logic in
// a relevant structure within app/javascript and only use these pack files to reference
// that code so it'll be compiled.
require("@rails/ujs").start()
require("turbolinks").start()
require("@rails/activestorage").start()
require("channels")
require("jquery")
// Uncomment to copy all static images under ../images to the output folder and reference
// them with the image_pack_tag helper in views (e.g <%= image_pack_tag 'rails.png' %>)
// or the `imagePath` JavaScript helper below.
//
// const images = require.context('../images', true)
// const imagePath = (name) => images(name, true)
import 'bootstrap'
import '../src/application.scss'
app/javascript/src/application.scss
@import '~bootstrap/scss/bootstrap';
config/webpack/evironment.js
const { environment } = require('@rails/webpacker')
const webpack = require('webpack')
environment.plugins.prepend('Provide',
new webpack.ProvidePlugin({
$: 'jquery/src/jquery',
jQuery: 'jquery/src/jquery'
})
)
module.exports = environment
まとめ
Rails 6.0から導入されたWebpackerを使ってjQueryとBootstrapを管理する方法を説明しました。参考にしていただければと思います。