📑

stylesheet_link_tag :app を処理しているのは Propshaft

に公開

rails new で作成したビューのテンプレートファイルには、stylesheet_link_tag :app という記述が含まれます。

app/views/layouts/application.html.erb

<!DOCTYPE html>
<html>
  <head>
    <title><%= content_for(:title) || "Rails Sample" %></title>
    <meta name="viewport" content="width=device-width,initial-scale=1">
    <meta name="apple-mobile-web-app-capable" content="yes">
    <meta name="mobile-web-app-capable" content="yes">
    <%= csrf_meta_tags %>
    <%= csp_meta_tag %>

    <%= yield :head %>

    <%# Enable PWA manifest for installable apps (make sure to enable in config/routes.rb too!) %>
    <%#= tag.link rel: "manifest", href: pwa_manifest_path(format: :json) %>

    <link rel="icon" href="/icon.png" type="image/png">
    <link rel="icon" href="/icon.svg" type="image/svg+xml">
    <link rel="apple-touch-icon" href="/icon.png">

    <%# Includes all stylesheet files in app/assets/stylesheets %>
    <%= stylesheet_link_tag :app, "data-turbo-track": "reload" %>
    <%= javascript_importmap_tags %>
  </head>

  <body>
    <%= yield %>
  </body>
</html>

この :app という引数、コメントにもあるように「app/assets/stylesheets 以下の CSS ファイルを全て読み込む」という意味なのですが、この機能は、実は Rails 本体ではなく Propshaft で実装されているものです。

https://github.com/rails/propshaft/blob/main/lib/propshaft/helper.rb#L7-L28

Rails 本体で実装を探しても見つからなかったので、メモとして書いてみました。

(よく読むと、コメントと違って app/assets 以下の CSS ファイルを全て読む実装になっているようです)

Discussion