コンテンツにスキップ
PR

Sass / SCSSとは:構文、Dart Sass、CSSへの移行判断

Sassは、変数、ネスト、mixin、関数、モジュールなどを使ってスタイルを構造化し、最終的にCSSへコンパイルするスタイルシート言語です。SCSSはSassが提供する二つの構文のうち、波括弧とセミコロンを使うCSS互換の構文です。現在の公式実装はDart Sassであり、古いLibSassやRuby Sassを前提にしたプロジェクトでは互換性を確認する必要があります。

項目内容
名称Sass / SCSS
分類CSSプリプロセッサ、スタイルシート言語
カテゴリWeb・UI・テンプレート
出力ブラウザーが解釈するCSS
構文SCSS構文(.scss)、インデント構文(.sass
現行の公式実装Dart Sass
現行版として確認できる版Dart Sass 1.101.0
旧実装LibSass、Ruby Sassは非推奨・開発終了
公式サイトsass-lang.com
確認日2026-07-15
  • 主な用途: CSS拡張 / Web・UI・テンプレート

新しいプロジェクトでSassを使うなら、Dart SassとSCSS構文を基準にするのが分かりやすい選択です。既存CSSをほぼそのまま置き、必要な箇所から変数やmixinへ整理できます。.sassのインデント構文も現行機能ですが、CSSとの見た目の近さや既存ツールとの連携を重視するチームではSCSSのほうが導入しやすいでしょう。

ただし、現代のCSSはカスタムプロパティ、ネスト、カスケードレイヤーなどを持つため、Sassが常に必要とは限りません。ビルド工程を増やして得られる共通化や設計上の利益があるかを先に確認します。

Sassは言語・処理系の名前として使われ、SCSSはその構文の一つです。次のSCSSは、変数とネストを使いながらCSSに近い形で書けます。

$accent: #6d4aff;
.card {
border: 1px solid $accent;
&:hover {
border-color: color.scale($accent, $lightness: -15%);
}
}

インデント構文では波括弧とセミコロンを省き、字下げで階層を表します。ファイル拡張子も異なるため、同じプロジェクトで無計画に混在させると読み方とフォーマッターの設定が増えます。既存資産がなければ、チームで一方を選んで統一します。

公式のコマンドライン版を導入すると、入力ファイルをCSSへ変換できます。

sass source/stylesheets/index.scss build/stylesheets/index.css

開発時はwatch機能を使えますが、本番ビルドでは利用するDart Sassの版、出力形式、source mapの有無を固定します。npmパッケージ、単体実行ファイル、ビルドツール内蔵プラグインのどれを使っていても、実際に動くSass実装がDart Sassか確認してください。

古いSassコードでは@importで変数やmixinをグローバルに読み込む構成が多くあります。現行のモジュールシステムでは@use@forwardを使い、どの名前がどのモジュールから来たかを明確にします。

@use "tokens";
.button {
color: tokens.$text-on-accent;
background: tokens.$accent;
}

名前空間が付くことで、巨大なグローバル変数一覧に依存せず、ファイル間の関係を追いやすくなります。既存の@importを置き換える場合は、単純な文字列置換ではなく、読み込み順、重複出力、副作用、変数の上書きを確認します。

Sassの公式ドキュメントには、機能ごとにDart Sass、LibSass、Ruby Sassの互換性表示があります。古いNode Sass環境はLibSassを利用していることがあり、現行ドキュメントの構文をそのまま使えない場合があります。

移行時は次を調べます。

  • package.jsonやロックファイルにnode-sassが残っていないか
  • CIと開発PCで異なるSass実装を使っていないか
  • /による除算、色関数、モジュール構文など変更対象がないか
  • 警告を無視したまま古いAPIへ依存していないか
  • 生成CSSの順序と詳細度が移行前後で変わっていないか

コンパイルに成功しても、カスケード順が変われば画面は崩れます。代表ページだけでなく、コンポーネント状態、レスポンシブ幅、ライト・ダークテーマを画像比較します。

  • 複数サイトで共有するデザイントークンやmixinがある
  • コンポーネントごとにファイルを分け、明確なモジュール境界を作りたい
  • 計算や反復で規則的なCSSを生成する必要がある
  • 既存の大規模SCSS資産を継続保守する

小規模なページでCSSカスタムプロパティと標準CSSだけで十分なら、Sassを追加しない選択も合理的です。言語機能の多さではなく、生成CSSを読み、デバッグし、更新できるかで判断します。

最終更新日:

追加調査で押さえる実務ポイント

Sassは、変数、ネスト、mixin、関数、モジュールなどを記述し、最終的にブラウザーが読むCSSへ変換するスタイルシート言語です。SCSSはCSS互換の波括弧構文、Sass indented syntaxはインデント構文です。現在の主要実装はDart Sassで、2026年8月2日時点の公式表示は1.101.3です。新規では@useを使い、非推奨の@importを増やさないでください。

SassとSCSS

項目SCSSSass syntax
拡張子.scss.sass
波括弧使う使わない
CSS互換高い低い
新規採用一般的既存資産中心

実行モデル

.scssまたは.sassを書き、Dart SassがCSSへ変換し、ブラウザーがCSSを解釈します。

最小例

$accent: #336699;

.button {
  color: $accent;

  &:hover {
    color: darken($accent, 10%);
  }
}
sass input.scss output.css

@use

@use "tokens";

.button {
  color: tokens.$accent;
}

@useは名前空間を持ち、同じモジュールを一度だけ読み込みます。

@import非推奨

Dart Sass 1.80.0からSassの@importとglobal built-in functionsは非推奨です。公式資料はDart Sass 3.0.0で削除予定と説明しています。

CSSネイティブ機能との関係

CSS custom properties、nesting、color-mix()、cascade layers、container queriesで代替できる範囲が増えています。単純な変数とネストだけならCSSのみも比較します。

Sassを残す理由

mixin、loop、map、function、module、design token generation、大規模既存資産です。

Legacy JS API

Dart Sassの旧JS APIは非推奨で、2.0.0で削除予定です。Vite、Webpack等のプラグインがmodern APIを使うか確認します。

参考リンク