もくじ
「SCSSのファイルが増えて管理が大変…」そんな悩みを解決するのがパーシャル!
「_」を使ったファイル分割の方法、@use
を活用した管理のコツを初心者向けにわかりやすく紹介します。
SCSSのパーシャルとは?
SCSSのパーシャルとは、小さな単位(各パーツや機能)でスタイルを管理するためのSCSSファイルのことです。
通常のSCSSファイルとは異なり、ファイル名の先頭に「_(アンダースコア)」を付けることで、コンパイル時に直接CSSとして出力されないようになります。
パーシャルの例
以下は変数管理用の_variables.scss
をファイル作成しています。
// _variables.scss
$primary-color: red;
$secondary-color: blue;
以下はよく使うスタイルを@mixin
で再利用できるようにするために、ミックスイン管理用の_mixins.scss
をファイル作成しています。
// _mixins.scss
@mixin flex-center {
display: flex;
justify-content: center;
align-items: center;
}
@mixin responsive($breakpoint) {
@if $breakpoint == tablet {
@media (max-width: 768px) { @content; }
} @else if $breakpoint == mobile {
@media (max-width: 480px) { @content; }
}
}
SCSSのファイル分割のメリット
SCSSのファイルを分割することで、以下のメリットがあります。
コードが整理されて管理しやすい
不要なコードを減らし、可読性が向上する
チーム開発時に役立つ(担当ごと・ブロックごとにファイルを分割可能)
@use と @forward の使い方
SCSSでは@use
と@forward
を使うことで、パーシャルを効率的に管理できます。
@use の使い方
@use
を使うことで、外部ファイルをインポートできます。
参考としてstyle.scss
に各パーシャルをインポートする例を紹介します。
※パーシャルをインポートする際、「_」と「.scss」は不要です。
/scss ├── _mixins.scss ├── _variables.scss ├── style.scss
例:style.scss
@use "variables";
@use "mixins";
body {
color: variables.$primary-color;
}
@use
を使うと、変数やMixinを明示的に指定しないと使えないため、スコープが整理されやすくなります。
また、エイリアスを使うことで、より簡潔に記述可能です。
@use "variables" as v;
@use "mixins" as m;
body {
color: v.$primary-color;
}
このようにエイリアスを活用すると、長いモジュール名を省略でき、可読性が向上します。
@import との違い
SCSSには@import
というファイルを読み込む方法もありますが、@use
とは動作が異なります。
@import はCSSの@importと同じく、読み込むたびにCSSが増える
@import
を複数回使うと、同じファイルが何度も読み込まれる可能性があります。
これにより、CSSのサイズが増えてパフォーマンスに悪影響を与えることがあります。
@use は一度だけ読み込まれる
@use
を使うと、同じファイルを複数回読み込むことはありません。
さらに、スコープが制限され、読み込んだファイルの変数やミックスインはファイル名.変数名
のようにしてアクセスする必要があります。
@forward の使い方
@forward
は、別のSCSSファイルをまとめてエクスポートするための機能です。
参考としてstyle.scss
にパーシャルをまとめてインポートする例を紹介します。
/scss ├── _mixins.scss ├── _variables.scss ├── _index.scss ├── style.scss
パーシャルを@forward
を使用して他のファイルからインポートできるようにする(_index.scssにまとめる
)。
例:_index.scss
@forward "variables";
@forward "mixins";
例:style.scss
@use "index";
body {
color: index.$primary-color;
}
これにより、_index.scss
を経由して_variables.scss
や_mixins.scss
の中身を一括管理できます。
ファイル分割の基本構成
SCSSを分割する際、私は以下のようなディレクトリ構成で管理することが多いです。
/scss ├── components/ // 共通の UI コンポーネント(ボタン、カード、ヘッダーなど) │ ├── _index.scss // @forward で components 内の SCSS をまとめる │ ├── _button.scss │ ├── _card.scss │ ├── _footer.scss │ ├── _header.scss ├── pages/ // ページ固有のスタイル │ ├── _index.scss // @forward で pages 内の SCSS をまとめる │ ├── _home.scss // ホームページのスタイル │ ├── _about.scss // アバウトページのスタイル │ ├── _contact.scss // コンタクトページのスタイル ├── utils/ // ユーティリティ(変数、ミックスインなど) │ ├── _index.scss // @forward で utils 内の SCSS をまとめる │ ├── _mixins.scss // ミックスイン │ ├── _variables.scss // 変数 │ ├── _base.scss // 基本スタイル(リセット、タイポグラフィなど) ├── style.scss // @use で各フォルダの _index.scss を読み込む
プロジェクトの規模が大きい場合は、以下のように拡張することもあります。
/scss ├── base/ // ベーススタイル(リセット・タイポグラフィ) │ ├── _index.scss │ ├── _reset.scss │ ├── _typography.scss │ ├── _global.scss ├── components/ // 共通の UI コンポーネント │ ├── _index.scss │ ├── _button.scss │ ├── _card.scss │ ├── _footer.scss │ ├── _header.scss ├── layout/ // ページ全体のレイアウト │ ├── _index.scss │ ├── _grid.scss │ ├── _container.scss │ ├── _header.scss │ ├── _footer.scss ├── pages/ // ページ固有のスタイル │ ├── _index.scss │ ├── _home.scss │ ├── _about.scss │ ├── _contact.scss ├── themes/ // カラーテーマ・ダークモード │ ├── _index.scss │ ├── _light.scss │ ├── _dark.scss │ ├── _colors.scss ├── utils/ // ユーティリティ(変数・ミックスインなど) │ ├── _index.scss │ ├── _mixins.scss │ ├── _variables.scss ├── style.scss // すべてのファイルを @use で読み込む
各フォルダ内に _index.scss を作成する理由
@forward
を使って一括管理することで、他のファイルで@use 'ディレクトリ名'
でインポートできるためです。
※SCSSは自動的に_index.scss
を読み込む仕様になってます(@use 'ディレクトリ名'
でディレクトリ名/_index.scss
が読み込まれる)。
_index.scss
を作成しない場合、style.scss
にファイルをまとめる際に、すべてのファイルを@use
で直接指定する必要があります。
分割したファイルをまとめるときの参考例
以下構造に分割したファイルをまとめてみます。
/scss ├── components/ // 共通の UI コンポーネント(ボタン、カード、ヘッダーなど) │ ├── _index.scss // @forward で components 内の SCSS をまとめる │ ├── _button.scss │ ├── _card.scss │ ├── _footer.scss │ ├── _header.scss ├── pages/ // ページ固有のスタイル │ ├── _index.scss // @forward で pages 内の SCSS をまとめる │ ├── _home.scss // ホームページのスタイル │ ├── _about.scss // アバウトページのスタイル │ ├── _contact.scss // コンタクトページのスタイル ├── utils/ // ユーティリティ(変数、ミックスインなど) │ ├── _index.scss // @forward で utils 内の SCSS をまとめる │ ├── _mixins.scss // ミックスイン │ ├── _variables.scss // 変数 │ ├── _base.scss // 基本スタイル(リセット、タイポグラフィなど) ├── style.scss // @use で各フォルダの _index.scss を読み込む
各 _index.scss の内容
例:components/_index.scss
@forward "button";
@forward "card";
@forward "footer";
@forward "header";
例:pages/_index.scss
@forward "home";
@forward "about";
@forward "contact";
例:utils/_index.scss
@forward "variables";
@forward "mixins";
@forward "base";
style.scss の内容
@use "utils"; // 変数・ミックスイン・ベーススタイルを読み込む
@use "components"; // UIコンポーネントのスタイルを読み込む
@use "pages"; // ページごとのスタイルを読み込む
これで、@use
によって自動的にフォルダ内の_index.scss
を読み込むことができます。
各フォルダ内に _index.scss を作成しなかった場合の読み込み方法
各フォルダ内に_index.scss
を作成しなかった場合、style.scss
での読み込みは以下のようになります。
@use "utils/variables";
@use "utils/mixins";
@use "utils/base";
@use "components/button";
@use "components/card";
@use "components/footer";
@use "components/header";
@use "pages/home";
@use "pages/about";
@use "pages/contact";
変数や mixin をエイリアス(別名)なしで読み込む方法
utils/_index.scss
でvariables
とmixins
を@forward
でまとめて、他のファイルからutils
を@use
します。
@use
する際にas *
を使用することで、変数やmixinを直接指定することができます。
以下はcomponents/_button.scss
で変数やmixinを使用するときのサンプルです。
例:utils/_index.scss
// utils/_index.scss
@forward "variables";
@forward "mixins";
例:components/_button.scss
// components/_button.scss
@use "../utils" as *; // エイリアスなしで全ての変数とmixinを使える
.button {
background-color: $primary-color;
color: white;
padding: 10px 20px;
border-radius: 5px;
@include flex-center;
&:hover {
background-color: darken($primary-color, 10%);
}
@include responsive(sm) {
padding: 8px 16px;
}
}
まとめ
SCSSのパーシャルとファイル分割を活用することで、スタイルを効率的に管理でき、メンテナンスが楽になります。
パーシャルはファイル名の先頭に
_
を付ける@use
を使うとスコープが整理される@forward
を使うと複数のファイルをまとめてエクスポートできる
SCSSを適切に分割し、スッキリとしたCSS管理を目指しましょう!
Sassを学習するならこの1冊で充分!
もみじ
HTMLとCSSの知識があれば、Sassについての必要な知識を身に付けることができます。
実践的な内容を学ぶことができ解説も丁寧で分かりやすく、基礎的な内容から管理・運用・設計のやり方もこの1冊で学ぶことができます。