プログラミングマガジン

プログラミングを中心にIT技術をできるだけわかりやすくまとめます。

  • ホーム
  • Ruby on Rails
  • 【Ruby on Rails】アセット(CSS,JavaScript)やマニフェストファイ…
 
 
     
  • サーバー言語  
    • Python
    • Ruby
    • PHP
    • SQL
  •  
  • インフラ  
       
    • AWS
    •  
    • 基本
    • Git
  • Web
       
    • Web開発
    • JavaScript
    • Vue.js
    • React
  •  
  • 設計  
       
    • 実装設計
    • DB設計
  • 問い合わせ
  

【Ruby on Rails】アセット(CSS,JavaScript)やマニフェストファイルの仕組み(Sprockets、Webpacker)

06.20

  • miyabisan2
  • コメントを書く

この記事は3分で読めます

アセットとは?

アプリを構成する3点セット(画像、CSS、JavaScript)の総称です。

Sprockets

Railsで、スタイルシートとJavaScriptを管理するための仕組みで、出力するHTMLへ自動で「マニフェストファイル」に定義した共通のCSS、JavaScriptを埋め込んでくれます。

CSSの拡張仕様である「SCSS」や、JavaScriptをRubyのように記述できる「CoffeeScript」へ変換する仕組みをとりまとめたものです。

Rails6からはwebpackが採用されている。

なお、Sprocketsが採用されているのはRails5までで2019年11月にリリースされたRails6からはSprocketsではなくデフォルトでwebpackによるビルドをする方式になっておりますので注意しましょう。

マニフェストファイル

Railsではアセットパイプラインの中で読み込み時間を減らすためにCSSやJSを連結していますがこれはマニフェストファイルを記述することによって行うことが可能です。マニフェストファイルは特定の記述方法(ディレクティブ)で取り込むソースコードを指定しています。アセットパイプラインについては下記の記事でも解説しています。

【Ruby on Rails】アセットパイプラインについて

(Railsアプリ名)/app/assets/stylesheets/application.css

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/*
* This is a manifest file that'll be compiled into application.css, which will include all the files
* listed below.
*
* Any CSS and SCSS file within this directory, lib/assets/stylesheets, or any plugin's
* vendor/assets/stylesheets directory can be referenced here using a relative path.
*
* You're free to add application-wide styles to this file and they'll appear at the bottom of the
* compiled file so the styles you add here take precedence over styles defined in any other CSS/SCSS
* files in this directory. Styles in this file should be added after the last require_* statement.
* It is generally better to create a new file per style scope.
*
*= require_tree .
*= require_self
*/

「*= require…」と記述してある定義に沿って、ファイルを読み込みます。

requireの種類 説明
require_tree application.cssがあるフォルダ下の全てのファイル
require_self 自分自身(application.css)

(Railsアプリ名)/app/assets/javascripts/application.js

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// This is a manifest file that'll be compiled into application.js, which will include all the files
// listed below.
//
// Any JavaScript/Coffee file within this directory, lib/assets/javascripts, or any plugin's
// vendor/assets/javascripts directory can be referenced here using a relative path.
//
// It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the
// compiled file. JavaScript code in this file should be added after the last require_* statement.
//
// Read Sprockets README (https://github.com/rails/sprockets#sprockets-directives) for details
// about supported directives.
//
//= require rails-ujs
//= require activestorage
//= require turbolinks
//= require_tree .

requireの種類 説明
require rails-ujs Railsが提供するJavaScriptヘルパー
require activestorage ファイルアップロードの仕組みを提供してくれます。
require turbolinks ページ遷移をAjax化して高速に読み込むための仕組み
require_tree . application.js(.のことです。)があるフォルダ下の全てのファイル

//=

アセットパイプラインに指示を伝えるための特殊記号です。

require

指定したJavaScriptファイル内容を指定した位置に取り込みます。

Webpackerとは?

Rails5.1より追加されておりJavaScriptビルドツールの「Webpack」のラッパーでRailsでWebpackを使ってのJavaScript管理を楽にしてくれるGemです。なお、Webpackerはパッケージ管理にYarnを採用しているためYarnのインストールが必須になります。

Sprocketsとの違い

JavaScript管理を楽にしてくれる仕組みとして「Sprockets」によるアセットパイプラインの仕組みがありました。ただ、WebpackerはSprocketsに比べて下記の点で優れています。

  • ES2015以降で記述したJavaScriptを様々なブラウザで利用できる。(トランスコンパイル)
  • JavaScriptのビルドプロセスをより柔軟に行える。

役割としては同じなのでSprocketsとWebpackerのどちらを使うかは都度選択するようにしましょう。(併用はお勧めしません。)

Webpackerを導入するデメリット

基本的にはWebpackerがwebpackのラッパーであることで発生するデメリットであり導入判断時は考慮をする必要があります。

  • Webpackerが提供する機能では不十分だった場合に、Webpackを直接使う場合では学習することが不要になる「Webpackerが提供する専用API」を学ばなければならなくなる。
  • Webpackerが提供する不必要な機能のアップデートの影響でアプリに不具合が発生する可能性がある。

Webpackerの機能

  • WebpackコマンドをRakeタスクでラップして提供する。
  • BabelによるES2015コードのトランスコンパイル
  • React/Vue.js/Angularのサポート
  • Railsビューヘルパーの提供

導入

webpackerを導入した場合下記のファイルがポイントになります。(導入方法自体は色々ありますし、Rails6ではwebpackerがデフォルト実装になるので割愛させていただきます。)

エントリポイント

1
app/javascript/packs/application.js

上記ディレクトリがエントリポイントとなりコンパイルを開始するファイルのことです。(Sprocketsのマニフェストファイルに似ています。)

エントリポイントからimportしたい別のJavaScriptファイルがある場合

app/javascript配下に配置します。

ビューから読み込むには

ビューからコンパイルしたJavaScriptファイルを読み込む場合は「javascript_pack_tag」ビューヘルパーを使用します。

環境別のコンパイル

環境設定

下記ファイルにて環境別のどのようにコンパイルするかの設定を決めます。

1
config/webpacker.yml

開発環境

Webpacker管理下のファイルに更新があればRailsサーバへのリクエスト時に自動コンパイルが行われます。

本番環境

webpacker:compileというRakeタスクにて行います。

スポンサーリンク
  • 2018 06.20
  • miyabisan2
  • コメントを書く
  • Ruby on Rails
  • Tweets Twitter
  • このエントリーをはてなブックマークに追加
  • LINEで送る

関連記事

  1. 2019 12.29

    【Ruby on Rails】「bcrypt」によるログイン機能の実装

  2. 2019 12.05

    【Ruby on Rails】「検索機能」の実装(Ransack)

  3. 2019 12.08

    【Ruby on Rails】モデルを共通化する。

  4. 2019 12.07

    【Ruby on Rails】「Active Job」でジョブを非同期実行する。(Sidekiq)

  5. 2020 12.12

    【Ruby on Rails】「プレゼンター(デコレーター)」について

  6. 2020 07.18

    【Ruby on Rails】「ActionText」のリッチテキストを使う

  • コメント ( 0 )
  • トラックバック ( 0 )
  1. この記事へのコメントはありません。

  1. この記事へのトラックバックはありません。

返信をキャンセルする。

【Ruby on Rails】レイアウトの共通デザイン…

【Ruby on Rails】ページごとに、読み込まれ…

RETURN TOP

著者プロフィール

エンジニア歴10年で過去に業務系、Webデザイン、インフラ系なども経験あります。現在はWeb系でフロントエンド開発中心です。

詳細なプロフィールはこちら

スポンサーリンク

カテゴリー

  • Android
  • AngularJS
  • API
  • AWS
  • C++
  • CSS
  • cursor
  • C言語
  • DDD
  • DevOps
  • Django
  • Docker
  • Figma
  • Git
  • GitLab
  • GraphQL
  • gRPC
  • Hasura
  • Java
  • JavaScript
  • Kubernetes
  • Laravel
  • linux
  • MySQL
  • Next.js
  • nginx
  • Node.js
  • NoSQL
  • Nuxt.js
  • Oracle
  • PHP
  • Python
  • React
  • Redux
  • Rspec
  • Ruby
  • Ruby on Rails
  • Sass
  • Spring Framework
  • SQL
  • TypeScript
  • Unity
  • Vue.js
  • Webサービス開発
  • Webデザイン
  • Web技術
  • インフラ
  • オブジェクト指向
  • システム開発
  • セキュリティ
  • その他
  • データベース
  • デザインパターン
  • テスト
  • ネットワーク
  • プログラミング全般
  • マイクロサービス
  • マイクロソフト系技術
  • マルチメディア
  • リファクタリング
  • 副業
  • 未分類
  • 業務知識
  • 生成AI
  • 設計
  • 関数型言語
RETURN TOP

Copyright ©  プログラミングマガジン | プライバシーポリシー