LoginSignup
21
22

More than 5 years have passed since last update.

Webpacker で Bootswatch (Bootstrap v4) + Vue.js の Rails プロジェクトを作成する

Last updated at Posted at 2018-01-25

この記事は

まだ Webpacker を使ったことがなかったので、今回 Webpacker で Vue.js を使った Rails プロジェクトを作成し、さらに Bootstrap および Bootswatch の任意のテーマを導入するところまで試してみました。

手順

Rails プロジェクトのディレクトリを作成します。この例では hidamarisou にします。

$ mkdir hidamarisou
$ cd hidamarisou

Gemfile を作成します。

Gemfile
source 'https://rubygems.org'

gem 'rails'
gem 'webpacker'

bundle install します。

$ bundle install --path vendor/bundle

rails new します。ターミナルで選択肢を訊かれたらすべて Y を選択します。

$ bundle exec rails new . --webpack=vue

Bootstrap と Bootswatch のパッケージをインストールします。

$ yarn add bootstrap bootswatch

Bootstrap の JavaScript ファイルを読み込みます。

app/javascript/packs/application.js
-console.log('Hello World from Webpacker')
+import 'bootstrap/dist/js/bootstrap';

Bootstrap と Bootswatch の Sass ファイルを読み込みます。なお、この例では Bootswatch のテーマに Journal を使用します。読み込み順に注意してください。

app/javascript/packs/application.scss
@import '~bootswatch/dist/journal/variables';
@import '~bootstrap/scss/bootstrap';
@import '~bootswatch/dist/journal/bootswatch';

Bootstrap の JavaScript が動作するように Webpack の設定を更新します。

config/webpack/environment.js
const { environment } = require('@rails/webpacker')
const vue =  require('./loaders/vue')
+const webpack = require('webpack')

environment.loaders.append('vue', vue)
+environment.plugins.set('Provide', new webpack.ProvidePlugin({
+  $: 'jquery',
+  jQuery: 'jquery',
+  Popper: ['popper.js', 'default']
+}))
+

app/views/layouts/application.html.erbapp/javascript/packs/application.jsapp/javascript/packs/application.scss を読み込みます。

app/views/layouts/application.html.erb
<%= stylesheet_link_tag    'application', media: 'all', 'data-turbolinks-track': 'reload' %>
<%= javascript_include_tag 'application', 'data-turbolinks-track': 'reload' %>
+    <%= javascript_pack_tag 'application' %>
+    <%= stylesheet_pack_tag 'application' %>
</head>

<body>

Vue.js の動作を確認するために、試しにコントローラを作成します。

$ bin/rails g controller Page home

生成された app/views/page/home.html.erbapp/javascript/packs/hello_vue.js を読み込みます。最初 javascript_pack_tag だけで Vue ファイル内の CSS も効くものだと思っていましたが、実際は stylesheet_pack_tag も必要でした。

app/views/page/home.html.erb
-<h1>Page#home</h1>
-<p>Find me in app/views/page/home.html.erb</p>
+<%= javascript_pack_tag 'hello_vue' %>
+<%= stylesheet_pack_tag 'hello_vue' %>

Rails サーバを起動し http://localhost:3000/ にアクセスします。

$ bin/rails s

ss01.png

app/javascript/app.vue が動いているようです :tada:

ただし、これでは Bootswatch が正しく導入されているか分かりません。そこで app/javascript/app.vue を次のように書き換えます。

app/javascript/app.vue
<template>
  <div id="app">
    <nav class="navbar fixed-top navbar-expand-lg navbar-dark bg-primary">
      <a class="navbar-brand" href="#">Hidamarisou</a>
    </nav>
    <main role="main" class="container">
      <div class="jumbotron">
        <h1>ひだまり荘</h1>
        <p class="lead">{{ message }}</p>
        <button class="btn btn-outline-primary" type="submit">入る</button>
      </div>
    </main>
  </div>
</template>

<script>
export default {
  data() {
    return {
      message: '✘╹◡╹✘ ようこそひだまり荘へ ✨'
    };
  }
};
</script>

<style scoped>
#app {
  padding-top: 5.0rem;
}
</style>

ss02.png

これで Bootswatch のテーマが正しく効いていることも確認できました :tada:

参考

21
22
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
21
22