Sassのマップ機能を使った変数の管理方法

Sassには「マップ」というデータタイプが存在します。
ただ普通に変数を大量に並べて管理するよりも、より構造的に管理できるので、その方法についてまとめておきます。
マップの使い方
マップは連想配列のように、「キーとなる名前」と「値」をペアにして書きます。丸括弧で囲むのを間違えないように注意してください(慣れていないとCSSにつられて丸括弧を書いてしまう)。
$マップ名: (
名前1: 値1,
名前2: 値2,
名前3: 値3
);マップは入れ子にも出来ます。
$マップ名: (
名前1: 値1,
入れ子マップ名: (
名前2: 値2,
名前3: 値3
),
名前4: 値4
);
マップに入れたデータを取り出したい時は、map-get()関数を使用します。
使い方は第一引数にマップ名、第二引数にキーとなる名前を入力するだけです。
map-get($マップ名, 名前1)
// 値1が取得できる何が便利なのか?
簡単な使い方を聞いただけでは「何が便利なの?」という声が聞こえてきそうなので、ここから先は実際にデータを入れて、自分がどんな風に使っているのか説明していきます。
まず実際に名前と数値を入れてみたのが、下記のコード。
今回は色を管理する前提で$colorsというマップの中に色情報が入っています。
$colors: (
main: #0075c2,
sub: #a0d8ef,
text: #333
);
このままだと変数名の先頭に「color_」を付けているのとあまり変わらない気がします。
$color_main: #0075c2;
$color_sub: #a0d8ef;
$color_text: #333;ただ、マップを使うとeach文が書けます(配列を使っても可能)。
@each $colorName, $color in $colors {
//.color_変数名 のclassを生成
.color_#{$colorName} {
color: $color;
}
//.bg_変数名 のclassを生成
.bg_#{$colorName} {
background: $color;
}
}上記のeach文をSassファイルの中に記述しておくと、マップ内の色情報を使用して、colorプロパティを変更する.color_mainクラスや、backgroundプロパティを変更する.bg_subクラスが自動で生成されます。
こんな風にマップ内のデータを元にしてクラスを生成するのは結構使えますし、変更があった場合はマップを書き換えればOKですし、データを追加すればまたクラスが追加されます。
マップ内のデータをすぐ呼び出せるようにする
ただ1つ不便なのが、マップ内のデータを呼び出したい時にmap-get($colors, main);と書く必要がある事です。かなり長い。
そこで、すぐマップ内のデータを呼び出すために関数を1つ作ってしまいます。
@function color($colorName) {
@return map-get($colors, $colorName);
}上記コードは、map-getを返してくれるシンプルなcolor()関数を定義しました。あとはコード内でcolor(名前)を打つだけでmap-getが返ってきて、最終的にデータを取り出せます。
color(main)
// map-get($colors, main);を返してくれる今回は色のみのデータを管理しましたが、余白やブレークポイントなども同様に管理が出来ます。

CSSでclassがついていないタグにだけスタイルを当てる方法
MacのRubyをrbenvで管理する方法
選択テキストをHTMLタグですぐ囲めるようになるVisual Studio Code拡張機能「htmltagwrap」
Google Maps APIでピンのアクティブ時にピン画像を変える方法
Visual Studio CodeでSVGをプレビューする拡張機能「SVG Preview」
CSS疑似要素(::beforeや::after)のcontent内で改行したり半角スペースを複数入力する方法
.htaccessを使って、httpからhttpsへリダイレクトする設定方法
Dashで「Secure Input is Enabled」と表示される場合の対処法
Vue CLIをインストールしたのに「command not found: vue」と表示されてしまう場合の対処法
npm install時に「cb() never called!」とエラーが表示されたときの解決法
iTerm2で「Use System Window Restoration Setting」を設定しているとアラートが表示されて機能しない
Google Chromeのサイト内検索(カスタム検索)機能を別のプロファイルに移行する方法
iPadで入力モードを切り替えずに数字や記号をすばやく入力する方法
iPhoneやiPadでYouTubeの再生速度を3倍速や4倍速にする方法
Keynoteで有効にしているはずのフォントが表示されない現象
MacのKeynoteにハイライトされた状態でコードを貼り付ける方法
AirPodsで片耳を外しても再生が止まらないようにする方法
iTerm2でマウスやトラックパッドの操作を設定できる環境設定の「Pointer」タブ
DeepLで「インターネット接続に問題があります」と表示されて翻訳できないときに確認すること
Ulyssesの「第2のエディタ」表示を使って2つのシートを横並びに表示する
Obsidianを使った「自己流PKM」で行う知識トレーニング
テキストエディタ・ノートアプリ関連のショートカットキーをKeyboard Maestroで統一する
Path Finderを使ってキーボードだけでファイル操作する方法(応用編)
macOSのコマンドパレット比較!SpotlightとAlfred、Raycastどれを使えばいい?
1つのノートアプリにすべて集約するのをやめた理由|2025年時点のノートアプリの使い分け
Notionログイン時の「マジックリンク」「ログインコード」をやめて普通のパスワードを使う
AlfredでNotion内の検索ができるようになるワークフロー「Notion Search」
Gitで1行しか変更していないはずのに全行変更した判定になってしまう
Macでアプリごとに音量を調節できるアプリ「Background Music」