【Rails6】vue.jsを使って部分SPAなフロント開発をする方法

  • このエントリーをはてなブックマークに追加

前回の記事ではRails6環境でRailsの「webpacker」を使用せず、

フロントエンドをwebpackにそれぞれ役割分担させよう!という趣旨の記事を書きました。

少し続きまして、今回は具体的にVue.jsを使ってフロント周りをどんな感じに作っていくのかを、ディレクトリ構成と役割をメインに一つの例を紹介したいと思います。

今回もこちらの記事をベースにしています(ありがたや)↓

Rails環境でJS , CSSをwebpackで完全に管理する

前回の記事はこちら↓

【Rails6】webpackerを使わずにフロントエンドをwebpackに任せる方法

フロントエンドは「frontend」ディレクトリの中で管理する

Railsプロジェクトのルート直下に「frontend」ディレクトリを置き、この中に以下のようなディレクトリ構成を作ります。

分かりづらいですが、●がついているのはディレクトリです。

Vue.jsでフロント周りをどこまで制御させるか(Vuexを使って完全なSPAサイトを作る等)にもよりますが、

Railsのページリダイレクトはコントローラ単位で行い、同じコントローラ内のデータ通信はリダイレクトせずに非同期通信を行って画面制御をVue.jsに任せる、「部分的SPA」なサイトを今回構築しようと思います。

Railsとwebpackでバックとフロントに役割分担させる!と上で言いましたが、厳密には「Railsでもフロントを触るけどwebpackがメインだよ」と思ってください。

また、既存のプロジェクトをVue化させる場合、この方法が分かりやすくていいんじゃないかなと個人的に思っています。

ちなみに、私のプロジェクトでの使用例↓

「frontend」ディレクトリの役割について

compornents

ここではheader.vueやfutter.vueなど各画面で共通的に使うvueコンポーネントを格納しておきます。

Railsでいうところの「layout」ディレクトリに管理するテンプレートファイルに似ています。

image

画像ファイルを保管しておきます。

ちなみに、RailsのPublicディレクトでも今まで通り画像を保管しておくことができます。

pages

コントローラごと(ページごと)にディレクトリを切って、各画面を構成するvueコンポーネントを管理します。

例えば、「hogepage_controller.rb」なら「hogepage」というディレクトリを作成してその中に「index.vue」「hogepageIndex.js」を作成して管理します。

index.vue、hogepageIndex.jsというファイルが出てきましたが、それぞれどんなの役割があるのか説明します。

・index.vue

「hogepage」ページを構成するコンポーネントファイルです。

componentディレクトリ内に作成したコンポーネントをimportで呼び出して、「components: {}」内に指定しておけば<template>内で使用することが出来ます。

・hogepageIndex.js

Railsのhogepage.html.erbファイル(Viewファイル)からindex.vueコンポーネントを使えるようにするためのファイルです。

前回の記事を参照してもらいたいのですが、実は作成した「webpack.config.js」の設定で、画面読み込みが開始された時に、その画面に対応する「/pages/~/~.js」ファイルを「entry」に設定して始めに読み込むようにしています。

これらの画面構成ファイルにともなって、Rails側の「hogepage/index.html.erb」ファイルと「layout/application.html.erb」を以下のように修正し、コンポーネントを呼び出します。

・layout/application.html.erb

「javascript_bundle_tag」「stylesheet_bundle_tag」は前回の記事で作成した自前のJS/CSS読み込みヘルパーメソッドです。

参考記事の方では「<%= yield%>」を「<div id=”app”>」で囲っていますが、各ページのhtml.erbファイルで臨機応変に記述出来るようにここでは書かずに各html.erbで記述するように変更します。

・hogepage/index.html.erb

参考記事の方では「<hogepage-index>」のみが記述されていますが、上記した通り、臨機応変に使いたいのでこのように<div id=”app”>タグで囲っています。

plugins

画面で汎用的に使う共通JavaScript/cssファイルを管理します。

JavaScriptファイルは、vueコンポーネントで呼び出して使用するため、関数に「export」を付ける事をお忘れなく。

cssはscss形式で管理し、vueのstyleタグ内で呼び出します。

public

このディレクトリの中身はwebpackによって出力されたバンドルファイルが格納されます。

webpack.config.jsで「/public/assets」以下にバンドルファイルと「manifest.json」を出力させるように設定しているので、こちらが作成するのは「/public/assets」までです。(確か…)

manifest.jsonファイルではバンドルされたJavaScriptとcssファイルを確認することが出来ます。

まとめ

今回紹介したのは、Rails×Vue.js開発の最適解ではなく、1つの例です。

フロント周りをVueに比重を置くか、Railsに比重を置くかで複雑に状況が変わってくると思います。

自身のプロジェクトにマッチするVueの使い方を見つけ出す手助けになれば幸いです。

  • このエントリーをはてなブックマークに追加

SNSでもご購読できます。

コメントを残す

*