Sassの@useと@forwardでモジュール管理を整理する方法
Sassでスタイルを増やしていくと、変数やミックスインの置き場所が曖昧になり、同じ定義を複数ファイルへコピーしがちです。特にWebサイトとスマートフォン向け画面を並行して制作すると、読み込み順や名前の衝突が保守性を下げる原因になります。
@useと@forwardを役割ごとに使い分ければ、Sassのファイルを小さなモジュールとして管理できます。デザイントークン、レイアウト、コンポーネントを整理しながら、公開するAPIまで制御できるのが大きな利点です。
| 機能 | 主な役割 | 名前空間 | 代表的な用途 |
|---|---|---|---|
@use |
モジュールを読み込む | 付く | 変数やMixinを安全に利用する |
@forward |
モジュールを再公開する | 利用側で付く | エントリーポイントを作る |
@import |
旧式の一括読み込み | 付きにくい | 新規コードでは原則避ける |
@useが解決するグローバル管理の問題
@useは、別のSassファイルを現在のファイルから利用可能にします。たとえばstyles/_colors.scssに色を定義し、@use "styles/colors";と書くと、colors.$primaryのように名前空間を付けて参照できます。
名前空間があることで、$primaryという変数が複数のモジュールに存在しても衝突しません。短い名前を使いたい場合は@use "styles/colors" as c;と記述し、c.$primaryのように別名で呼び出せます。
// _colors.scss
$primary: #2563eb;
$surface: #f8fafc;
// button.scss
@use "../styles/colors";
.button {
background: colors.$primary;
}
@forwardで公開範囲を設計する
@forwardは、読み込んだモジュールの変数やMixinを、別のファイルから再公開する仕組みです。styles/_index.scssを窓口にすれば、利用側が複数のファイルパスを意識せずに済みます。
// styles/_index.scss
@forward "colors";
@forward "spacing";
@forward "mixins";
// main.scss
@use "styles" as design;
.card {
color: design.$primary;
}
@forwardは定義を自分のファイル内で使う命令ではありません。自身でも利用したい場合は、同じファイルで@useも記述します。この違いを理解すると、公開用の入口と内部実装を分離できます。
フォルダ構成で役割を明確にする
実務では、基礎値をまとめるsettings、Mixinや関数を集めるtools、UI部品を置くcomponentsのように分類すると管理しやすくなります。たとえば、次のような構成が扱いやすい形です。
scss/
├── styles/
│ ├── _colors.scss
│ ├── _spacing.scss
│ ├── _mixins.scss
│ └── _index.scss
├── components/
│ ├── _button.scss
│ └── _card.scss
└── main.scss
main.scssでは@use "styles";と各コンポーネントを呼び出します。コンポーネント側が必要な依存関係を自分で宣言すれば、読み込み順に左右されにくくなり、ファイル単体での確認や再利用も容易になります。
公開する変数と内部用の値を分ける
すべての変数を外部へ公開すると、後から名前を変更しにくくなります。@forwardではshowやhideを使い、公開するメンバーを制限できます。
@forward "colors" show $primary, $surface;
@forward "spacing" hide $debug-size;
さらに、@forward "colors" as color-*;のように接頭辞を加えることも可能です。複数のデザインシステムを組み合わせる場合や、同名の変数を区別したい場合に役立ちます。公開APIを小さく保つことが、Sassファイルの変更に強い設計につながります。
レガシーコードから段階的に移行する
既存プロジェクトで@importが大量に使われている場合、すべてを一度に書き換える必要はありません。まず色、余白、ブレークポイントなどの共通値をモジュール化し、主要なエントリーポイントから@useへ移行すると影響範囲を抑えられます。
Sassの設計を見直す際は、実際の制作記録や開発経験も参考になります。PhoneGap関連の実装をまとめたPhoneGapの記事一覧のように、技術テーマごとに知識を整理しておくと、古い構成を更新する際の判断材料を見つけやすくなります。
コンパイルとチーム運用で確認する
@useと@forwardは、Dart Sassを前提に利用します。導入後はCLIやビルドツールの設定を確認し、非推奨警告を放置しないことが重要です。未使用変数、循環参照、意図しないCSS出力も、移行時に確認しておきます。
命名規則とフォルダの責務をREADMEに残し、プルリクエストでは「新しい共通値をどこへ置くか」「外部公開が必要か」を確認できるようにします。Web制作やアプリ開発の記録を発信するポートフォリオのように、コードだけでなく設計意図も残すと、後から見返したときの理解が深まります。
Sassのモジュール化は、構文を置き換える作業ではなく、依存関係と公開範囲を整える作業です。まずは共通変数を@useで安全に読み込み、次に@forwardで入口を統一してみてください。UI部品やレスポンシブ設定を一つずつ移行すれば、日々の制作でも効果を実感できます。スマートフォン画面の細かな調整では、iPhoneケースのレビューのような実機視点の記録も活用しながら、設計と検証を継続していきましょう。