プログラミングマガジン

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

  • ホーム
  • Ruby on Rails
  • 【Ruby on Rails】アセットパイプラインについて
 
 
     
  • サーバー言語  
    • Python
    • Ruby
    • PHP
    • SQL
  •  
  • インフラ  
       
    • AWS
    •  
    • 基本
    • Git
  • Web
       
    • Web開発
    • JavaScript
    • Vue.js
    • React
  •  
  • 設計  
       
    • 実装設計
    • DB設計
  • 問い合わせ
  

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

12.03

  • miyabisan2
  • コメントを書く

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

アセットパイプラインとは?

sprockets-rails gemで提供されるSprocketsの機能でRails5まではデフォルトで有効になっておりRails上でJavaScriptやCSS等のフロントエンドのスクリプトを効率よく便利に処理するための仕組みです。

アセットパイプラインの流れ

  1. コントローラごとに作成されたcoffeeスクリプトを高級言語でコンパイルしてjsを作成する。
  2. 作成されたjs(アセット)を連結して一つのjsを作成する。
  3. 連結したjs(連結されたアセット)を最小化する。
  4. 連結したアセットにダイジェストを付与する。

coffeeスクリプトをコンパイルしてJSとして扱う。(プリコンパイル)

CoffeeスクリプトやSCSSを普通にブラウザが認識できるJavaScriptファイルやCSSファイルにコンパイルして静的ファイルにしておきます。この工程をプリコンパイルと呼びます。もしソースコードを更新してサーバを起動する場合は必ずプリコンパイルを行う必要があります。

プリコンパイルを行うためのコマンド

1
rails assets:precompile

アセットを連結する。

複数のJavaScriptやCSSファイルを一つに連結することで必要となるリクエスト数を減らし全ての読み込みが終わるまでの時間を短縮します。連結する際はマニフェストファイルにて連結方法を指定します。マニフェストファイルについては下記の記事でも解説しています。

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

連結したアセットを最小化する。

スペース、改行、コメントを削除してファイルを最小化し一度のリクエストに必要な通信量の節約をします。

アセットにダイジェストを付与する。

コードの内容からハッシュ値を算出してファイル名の末尾に付与します。コードが変更されればファイル名が変更されるためブラウザのキャッシュの影響で修正が反映されないという問題を防げる。

例えば、下記は実際にソースに埋め込まれたJavaScriptの例ですがソース名の末尾に大量の意味不明な文字列がついていると思いますがこれがダイジェストになります。

1
<script src="/assets/rails-ujs.self-551fbd47b981dacbb84a270f9123074caf39eb72aaf6f478ab597c6f81435e4b.js?body=1" data-turbolinks-track="reload"></script>

環境によるアセットパイプラインの挙動の違い

開発環境(development環境)

  • コンパイルやダイジェストの付与は逐次行われるので開発の妨げにはなりません。
  • 逐次コンパイルを行うので処理速度は遅くなります。
  • アセットの連結と最小化は行われません。実際に表示されているソースを見るとJavaScriptやCSSは用意した分だけlinkが貼られています。

本番環境(production環境)

  • アセットパイプラインの機能をフルに活用して1つのJavaScriptやCSSを配信します。
スポンサーリンク
  • 2019 12.03
  • miyabisan2
  • コメントを書く
  • Ruby on Rails
  • Tweets Twitter
  • このエントリーをはてなブックマークに追加
  • LINEで送る

関連記事

  1. 2020 09.16

    【Ruby on Rails】ビューヘルパー(エスケープ関連、タグ関連など)

  2. 2019 12.29

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

  3. 2019 12.14

    【VSCode】Railsのデバッグ設定(Mac)

  4. 2019 12.02

    【Ruby on Rails】エラー処理の概要

  5. 2019 12.01

    【Rspec】System Spec(システムスペック)の基本

  6. 2019 12.01

    【Rspec】テストコードの処理の共通化(before、let、shared_examples)

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

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

返信をキャンセルする。

【Ruby on Rails】RailsでのAjaxリ…

【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 ©  プログラミングマガジン | プライバシーポリシー