本文へスキップ
Articles

2026-08-21 公開 / Webツール

共通CSSを入れて分かったのは「揃っていない場所」と、間違いも共通化されるという事実

ページごとに色を書いていたサイトの配色を、1つのファイルに集約しました。揃えるための作業のつもりでしたが、実際に得たのは「揃っていない場所が見えるようになったこと」でした。そして同じ週に、共通CSSの1行の間違いが22のツールで同時にチェックボックスを壊しました。1年運用して、得たものと背負ったものが両方はっきりしたので書きます。

やったこと: 色だけを1ファイルに出す

それまで各ページは、自分の中に色を直接書いていました。同じ「本文の色」でもページによって微妙に違い、しかも作った時期によって系統ごと違いました。オレンジ寄りの時期と、青寄りの時期があったのです。

集約にあたって決めたのは、レイアウトには手を出さないことでした。共通化すべきものを増やすほど、既存ページと衝突する危険が増えます。色だけなら影響範囲がはっきりしています。

/* 共通ファイル側 */
:root { --ks-accent: #267b7d; --ks-bg: #f6f4ec; }
/* 各ページ側。自分の変数名から共通のものを参照する */
:root {
  --accent: var(--ks-accent, #267b7d);
  --bg:     var(--ks-bg, #f6f4ec);
}

第2引数はフォールバックです。共通ファイルの読み込みに失敗しても、表示は壊れません。ページ側のコードは変数名がそのまま使えるので、本文のCSSは1行も書き換えずに済みました。

得たもの: 揃っていない場所が「浮いて」見える

これが予想外の効果でした。ばらばらの色が並んでいるときは、どれも同じくらい馴染んで見えます。ところが地の色が揃った瞬間、揃っていないものだけが浮き上がって見えます。

集約の作業中に、意図していなかった残骸が次々に出てきました。

どれも共通化する前から存在していた不揃いです。見えていなかっただけで、新しく壊れたわけではありません。共通化がしたのは、色を直すことではなく、直すべき場所に印を付けることでした。

この記事を書くために現状を確認したところ、当時「一掃した」と記録していた青みの色が、5つのツールページにまだ残っていました。共通CSS側は直っていたのに、ページ内に直接書かれたぶんが掃き残されていたのです。気づいた時点で置き換えました。共通化は網であって、網の外は自動では直りません。

背負ったもの: 1行の間違いが22ページで同時に起きる

同じ週に、逆側の性質も味わいました。共通CSSにこういう指定があったのです。

input { width: 100%; }

入力欄を横幅いっぱいにするための、ごく普通の指定です。ところがinputにはチェックボックスとラジオボタンも含まれます。結果として四角い枠が横幅いっぱいに引き伸ばされ、中のチェックの絵柄だけが中央にぽつんと浮いて、ラベルの文字から離れて表示されていました。

これが共通CSSを読んでいる22のツールすべてで同時に起きていました。1ページずつ色を書いていた時代なら、こんな壊れ方はしません。せいぜい1ページです。

直し方自体は単純でした。

/* チェック/ラジオは width:100% の対象外にする */
input[type=checkbox], input[type=radio] {
  width: auto;
  inline-size: 16px;
  block-size: 16px;
  accent-color: var(--accent);
}

/* チェックを含むラベルは「□ テキスト」の横並びに戻す */
label:has(> input[type=checkbox]) { display: flex; align-items: center; }

直すのも1箇所で22ページに効きます。壊れるのも一斉、直るのも一斉。これが共通化の本質だと理解しました。

2つの性質は同じものの裏表だった

整理するとこうなります。

「共通化すると保守が楽になる」とよく言われますが、楽になるのは修正の手数であって、確認の手数ではありません。むしろ確認は重くなります。1ページ直したつもりでも、影響範囲は全ページだからです。

それでも共通化してよかったと思っています。理由は「見えない不揃い」のほうが、「一斉に壊れる危険」より始末が悪いからです。一斉に壊れれば、すぐ気づいて1箇所直せば終わります。見えない不揃いは、何年でも残ります。

あとから効いた設計判断

1年運用してみて、特に効いたのは次の3つでした。

1. 色だけを共通化して、レイアウトは触らなかった

共通化の範囲を広げるほど、影響も広がります。チェックボックスの件は「色以外にも手を出していた部分」で起きました。範囲を絞っていたおかげで、被害がそこで止まっています。

2. フォールバック値を書いた

var(--ks-accent, #267b7d) の第2引数です。共通ファイルが読めなくても、ページは元の色で表示されます。共通化は単一障害点を作る作業でもあるので、ここは省かなくて正解でした。

3. ページ側の変数名を変えなかった

各ページが元から使っていた変数名をそのまま残し、その中身だけを共通のものに向けました。おかげでページ本文のCSSは1行も書き換えていません。大量の差分を出さずに済んだので、後から「何を変えたか」が追えます。

持ち帰れること

最後のひとつは、この記事を書くために確認して見つけたものです。1年前に「残存0を確認」と記録していたのに、実際には5ページ残っていました。そのときは共通CSS側だけを数えていて、ページ内の直書きを数えていなかったのだと思います。数えたつもりの範囲が、数えるべき範囲と一致していたかは、時間が経ってから分かります。