7 ポイント 投稿者 GN⁺ 2026-05-16 | 3件のコメント | WhatsAppで共有
  • いくつかのサイトを Tailwind からセマンティックHTMLとバニラCSSへ移行し、Tailwindが提供していたルールのうち必要なものだけを自分で再実装した
  • Tailwindの preflight reset、カラーパレット、font scale のような慣れ親しんだ仕組みは維持しつつ、CSS変数とファイル分割によってバニラCSSへ移し替えた
  • CSSの大半は コンポーネントごとのファイル に分け、固有クラスを持たせることで、あるコンポーネントの修正が別のコンポーネントをひそかに壊す可能性を減らした
  • Tailwindを離れる背景には、最近のTailwindの ビルドシステム依存、2.8MBの tailwind.min.css、バニラCSSとの混在、CSS上の制約がある
  • レスポンシブ設計では breakpoint よりも CSS gridauto-fitgrid-template-areas をより活用しようとしており、@layer@scope、container queries も学習対象としている

Tailwindで学んだ構造をバニラCSSへ移す

  • 8年前にTailwindを初めて使ったときは、CSSコードをどう構造化すべきか分かっておらず、完全な混乱よりはTailwindのほうがずっと良い選択だった
  • 最近およそ1週間、いくつかのサイトをTailwindから セマンティックHTML + バニラCSS へ移行しながら、Tailwindが提供していたルールのうち必要な部分だけを自分で選んで再実装することになった
  • A whole cascade of layersHow I write CSS in 2024 を読み、どんなCSSコードベースにも、レイアウト・フォント・色・共通コンポーネントといった異なる関心事を管理するための仕組みが必要だということが明確になった
  • Tailwindには reset stylesheetカラーパレットfont scale のような仕組みがすでにあり、慣れていて便利な部分はバニラCSSでも模倣できる

CSSコードベースに置いた主な仕組み

  • reset

    • Tailwindの preflight stylestailwind.css から最初の約200行コピーして使っている
    • Tailwindのresetには長く慣れていて、すべての要素に box-sizing: border-box を適用するルールは、要素の幅に padding を含めるようにしてくれる
      * { box-sizing: border-box; }
    
    • html {line-height: 1.5;} のようなほかのresetルールにも無意識に依存している可能性があり、こうしたルールなしでCSSを書くには大きな適応が必要そうだ
  • components

    • CSSの大半は、VueやReactのコンポーネントに近い形で コンポーネントごとのファイル に整理している
    • 各コンポーネントは固有クラスを持ち、あるコンポーネントのCSSが別のコンポーネントのCSSを上書きしないようにしている
    • 実際に変更したいCSSの約80%はコンポーネントファイル内にあるので、100行のコンポーネントを編集するときはその100行だけを考えればよい
    • たとえば .zine コンポーネントは次のようなHTMLを持てる
      <figure class="zine horizontal">
          <img src="whatever.jpg">
      </figure>
    
    • CSSではネストされたセレクタで .horizontal.vertical:hover のような状態をコンポーネント内部にまとめている
      .zine {
        ...
        &.horizontal {
          ...
        }
        &.vertical {
          ...
        }
        &:hover {
          ...
        }
      }
    
    • Web Components や @scope のように、コンポーネント間の干渉をプログラム的に防いではいないが、慣習を定めて守るだけでもかなり改善した感覚がある
  • colours

    • colours.css には、必要なときに使えるCSS変数をまとめている
    • 色は難しく、今回のリファクタリングで色の使い方を見直したくはなかったため、既存のやり方を維持している
    • 唯一のルールは、サイトで使うすべての色をこのファイルに列挙することだ
      :root {
        --pink: #fea0c2;
        --pink-light: #F9B9B9;
        --red: #f91a55;
        --orange: rgb(222, 117, 31);
        ...
      }
    
  • font sizes

    • Tailwindでは text-lgxl2xl のようにサイズ段階を選ぶだけでよかったので、empxrem のどれを使うか覚えておく必要がなかった
    • これをバニラCSSでも維持するため、Tailwindから持ってきたサイズ変数を定義している
      --size-xs: 0.75rem;
        --line-height-xs: 1rem;
    
        --size-sm: 0.875rem;
        --line-height-sm: 1.25rem;
    
    • フォントサイズは変数で指定しており、Tailwindより少し冗長ではあるが、今のところ満足しているやり方だ
      h3 {
        font-size: var(--size-lg);
        line-weight: var(--line-weight-lg);
      }
    
  • utilities

    • 複数のコンポーネントで繰り返し使うボタンのような要素は utilities に分類している
    • スクリーンリーダー利用者にだけ見せるべき要素のための .sr-only のような一部のユーティリティクラスはTailwindからコピーした
    • この領域は小さく保ち、変更時には慎重に扱いたい
  • base

    • “base” スタイルはサイト全体に直接適用するスタイルだ
    • サイト全体に多くのスタイルを強制するほどの確信はないため、この領域はごく小さく保っている
    • 現時点でよいと感じているルールは <section>a の2つだけで、<section> のルールは後で変わるかもしれない
      /* put a 950px column in the middle of each <section> */
      section {
        --inner-width: 950px;
        padding: 3rem max(1rem, (100% - var(--inner-width))/2);
      }
    
      a {
        color: var(--orange);
      }
    
    • baseスタイルは最初はほぼ空のままにしておき、共通してほしいものが見つかったときにコンポーネントからbaseへ移す ボトムアップ方式 が最も簡単そうだ
  • spacing

    • padding と margin をどう管理するかは、まだ完全には決まっていない
    • Tailwindを使っていたときは、望む見た目になるまで padding と margin をあちこちに即興で入れていて、今はそれより原則的なやり方を探している
    • 現在は、できるだけ外側のレイアウトコンポーネントが余白を担当するようにしたいと考えている
    • 複数の子を持つ <section> で、子要素同士の間隔を均等に空けたいときは次のルールが使える
      section > *+* {
        margin-top: 1rem;
      }
    
  • responsive design

    • Tailwindでは md:text-xl のように、特定サイズ以上で text-xl スタイルを適用する メディアクエリベースの構文 を多用していた
    • 今は breakpoint をあまり使わなくても済む、より柔軟な CSS grid レイアウトを作ろうとしている
    • auto-fit を使えば、大きな画面では2カラム、小さな画面では1カラムを自動で使える
      display: grid;
        grid-template-columns: repeat(auto-fit, minmax(min(100%, 400px), max-content));
        justify-content: center;
    
  • build system

    • 開発中は別途ビルドシステムは必要ない
    • CSSには組み込みの @import 文があり、ファイルを分けて読み込める
      @import "reset.css";
      @import "typography.css";
      @import "colors.css";
    
    • CSSにはネストされたセレクタも組み込まれている
      .page {
        h2 { ...}
      }
    
    • 本番用にCSSファイルをまとめたければ esbuild を使える
      esbuild style.css --bundle --loader:.svg=dataurl  --loader:.woff2=file --outfile=/tmp/out.css
    
    • ふだんはCSSやJSのビルドシステムを使うのを避けているが、esbuild はWeb標準ベースで静的なGoバイナリなので問題ないと考えている
    • esbuild については2021年に esbuildとVueに関する記事 を書いたことがある

Tailwindを離れる理由

  • Tailwindは2018年以降、ビルドシステム依存 がはるかに強くなっており、最近のTailwindをビルドシステムなしで使うのは不可能に見えるため、ここ数年はTailwind v2を使ってきた
  • ビルドシステムなしでTailwindを使う代替として litewind があるようだ
  • Tailwindはもともとビルドシステムと一緒に使う前提だったが、実際にはそうしていなかったため、多くのプロジェクトに 2.8MB の tailwind.min.css ファイルが残っており、ややちぐはぐに感じられた
  • Tailwindを初めて使った頃より、CSSの腕前が上がった
  • Tailwindには最終的には制約があり、CSSで奇妙だったり特殊だったりすることをしたいとき、いつでも可能とは限らない
  • そうした制約はとても有用なこともあり、実際バニラCSSへ移行する中でTailwindの制約の一部を再実装しているが、今は必要な制約だけを選んで使いたいと思うようになった
  • 同じプロジェクトの中でバニラCSSとTailwindが混在するサイトが生まれ、それをメンテナンスするのは楽しくなかった
  • もっと セマンティックなHTML を書くとどんな感覚なのか気になっていた

これから学んでみたいCSS機能

  • @layer は cascade layer を扱う機能で、まだ使っていないが学んでみたい機能だ
  • @scope はコンポーネントや特定範囲内のスタイルを扱ううえで興味を引かれる機能だ
  • container queries はコンテナ基準のレスポンシブ設計のための機能で、学んでみたい
  • subgrid は CSS grid 関連の機能として関心リストに入っている

Tailwindを全面否定しない結論

  • 今はTailwindを離れつつあるが、Tailwindを使い始めたこと自体には今でも満足している
  • Tailwindを使いながら多くのことを学び、tailwind.min.css を削除したあとでもサイト内でTailwindの一部を引き続き使える
  • wizardzines.com のCSSをもともと設計して書いた Melody Starling のおかげで、サイトのクールで楽しい部分が生まれた
  • CSS作業の中で CSS TricksSmashing Magazine などの多くのCSS記事を読み、CSSコミュニティが実践方法を数多く共有してくれてとても助けられた

3件のコメント

 
shakespeares 27 일 전

zero-configに変わって、もう少し良くなったのではないですか?

 
GN⁺ 29 일 전
Hacker Newsの意見
  • セマンティックなHTMLとアクセシブルなマークアップを長年教えてきて、スクリーンリーダー向けのサイトやアプリも数多く扱ってきたが、Tailwindの最大の問題はHTMLとCSSを考える順序を逆転させてしまうことにある
    HTMLは文書の意味を示すものなので、そこから始めて、その次にCSSでスタイリングすべきだ。スタイルのために追加要素が必要ならdivやspanを使ってもよいが、まずはより適した要素がないか考えるべきだ
    Tailwindは開発者をCSS優先のアプローチへ押しやり、欲しいTailwindクラスを先に考え、そのクラスを付けるためにDOMへ別のdivを追加するようにさせる
    Web開発者の力量には、将来も読みやすく、すべての利用者が使え、HTML/CSS仕様ともおおむね整合するHTMLとCSSを作る能力が含まれるべきだが、Tailwindはその面で技能を落としてしまう。TailwindのWebサイトの最初の例もdivとspanばかりで、新しい開発者への悪い教育になっており、LLMが別途指示なしではdivスープを吐き出す流れにも寄与したと思う

    • Tailwind自体がアクセシブルでないアプリやdivスープを強制しているわけではなく、開発者の無関心や理解不足をTailwindのせいにするのは不公平だ
      どんな道具でも誤用はあり得るし、Tailwindも例外ではない。CSSを約20年使い、Less、SASS/SCSS、Stylus、PostCSSも使ってきたが、ここ数年Tailwindに落ち着いたのは、むしろより堅牢なアプリケーションのスタイリングを可能にしてくれるからだ
      スタイル/クラスの抽象化を過剰に作らずに済み、影響を受けるマークアップにスタイルをそのまま置くことで認知負荷が減り、緩いセレクタが意図せずスタイルを変えることも減ってデバッグもしやすくなる。独自CSSフレームワークのあるコードベースより、Tailwindのコードベースのほうが、単純なサイトやアプリを除けば、複雑さも脆さも少ない場合が多い
      一貫したフォント・色・サイズのスケール、より小さなバンドル、Tailwindを知る開発者同士の一貫性、強固なエコシステムやLLMとの相性まで考えれば、多くのチームにとって素晴らしい選択肢だ。結局のところ多くのツールと同じで、使う人次第で良くも悪くもなる
    • そのアプローチにはある種の純粋性/正確さへの欲求があるが、私はかなり前に手放した
      HTML/CSS/JSの混沌はブラウザを相手にするときに必要な悪だと見ていて、私にとっては単なる表現レイヤーにすぎない。仕事ではデータベーススキーマやバックエンドのビジネスロジックの正確性のほうにずっと重きを置いている
      表現レイヤーはできるだけ少ない手間で、それなりに保守可能なコードになれば十分で、その目的にはTailwindがよく合う。LLMがうまく書けて、新しい開発者もすぐ理解でき、後から読んで直すのもかなり容易だ
      Tailwindプロジェクトが新しい開発者にHTML/CSSを学ばせる最善の方法ではないという点には全面的に同意するが、新しい開発者には良いデータベーススキーマ、直感的なAPI、テスト可能なビジネスロジックなどに集中してほしい
    • いくつか反論すると、原則としてマークアップとスタイルを分離するのは良いことだが、特定の実装では結局追加マークアップが必要になり、それは2000年代初頭から分かっていたことだ
      Tailwind自体に、適切なHTMLタグの代わりにdivやspanを使わせる要素はない
      文書とインターフェースは別物であり、Tailwindはインターフェースではるかに理にかなっている。インターフェースにはTailwindを使い、それ以外のコンテンツにはスコープを絞ったHTMLセレクタを使えばよい
      複雑なCSSコードベースを書くよりTailwindのほうが約4倍速く、実質的にオーバーヘッドがないという点は、どう評価しても利点として残る
    • Inverted Triangle CSS(ITCSS) がもっと広く使われていないのは残念だ。カスケードを拒否するのではなく受け入れ、開発者に有利に働くようにする
      要するにCSSを詳細度ではなく順序で書く方法だ:
      /scss/
      ├── 1-settings. <- グローバル設定
      ├── 2-design-tokens <- フォント、色、間隔など
      ├── 3-tools <- Sassミックスイン、CSS関数など
      ├── 4-generic <- リセット、ボックスサイズ、正規化など
      ├── 5-elements <- 見出し、ボタン、リンクの基本スタイル
      ├── 6-skeleton <- レイアウトグリッドなど
      ├── 7-components <- カード、カルーセルなど
      ├── 8-utilities <- ユーティリティとヘルパークラス
      ├── _shame.scss <- 後で直すハック
      └── main.scss
      ITCSSはCSSコードベースにおける詳細度の争いを事実上なくしてくれる。たいてい !important が入る唯一の場所はユーティリティ層だ
      [1]: https://matthiasott.com/notes/how-i-structure-my-css
    • Tailwindを使うことが本質的にアクセシビリティの放棄につながるわけではない。どうしてそんな結論に至ったのか分からない
      コンポーネントライブラリを見れば、aria 属性も含まれている: https://tailwindcss.com/plus/ui-blocks/marketing/sections/pr...
      ランディングページのようなデジタルパンフレットに近いものでない限り、常にマークアップから始めて、その上にCSSクラスを追加している
  • Tailwindの良い点は2つあり、AIの学習データにクラス情報がすでに大量にあることと、スタイル衝突がないことだ
    そのためAIが新しいスタイルを作るとき、既存のスタイルシートを参照する必要がなく、コンテキスト管理に向いている
    独自CSSでは、AIは衝突や重複記述を減らすために既存のスタイルシートを読む必要があるが、大きなスタイルシートはAIのメモリ空間を多く消費するため問題になり得る

  • Julia Evans の文章が本当に好きだ
    弱さと率直さの立場から書いている。多くの人は賢く見せようとして書くが、Juliaは「私も全部知っているわけではないけれど、見つけた中で共有したいものがある」という姿勢で書いている。直接知り合いではなくても、大切な人たちに何かを分かち合うように感じられるほどだ
    最後のStrange LoopでRandall Munroeと一緒に発表していて、発表後に彼と話そうと待っていた人たちもいたが、私はJuliaと話すために待っていた。bashスクリプトをPerlで書き直せという私の冗談を理解してもらえなかった気がして、心から申し訳なく思う

    • その表現はまさにぴったりだ
      私はJuliaではないが、公開講演やプレゼンテーションについてほぼ同じ哲学を持っていて、発表を苦手とする同僚にもそれを根付かせようとしてきた。自分が少しだけなじみのある知識や、相手の役に立つかもしれないことを同僚や愛する人たちに伝えられるのは大きな特権だ
  • CSS Modules はカスケーディングの問題に対するより単純な解決策だ。ユニークなクラス名を作ってクラス衝突を防いでくれる [1]
    Tailwindの大きな欠点である可読性 [2] とツールサポートの問題もない。特にChromeとFireFox DevToolsでデバッグしたり対話的に試したりする際のツールサポートがより良いと思う
    [1] https://x.com/efortis/status/1888304658080256099
    [2] https://github.com/ericfortis/tailwind-eye

  • Tailwindでいつも印象的だったのは、支持者のほぼすべての議論が結局「CSSをジュニアレベル以上に学んだことがない」に帰着する点だ
    「Tailwindがなければ巨大で整理されていないCSSファイルが1つ膨れ上がって手に負えなくなり、古いコードと !important だらけになる」といった話をよく聞くが、CSSも他の技術スキルと同じく1つのスキルだ
    見た目を合わせられる程度だけ学んで場当たり的に継ぎ足していけば、野心がコードを整理する能力をすぐに追い越してしまう

    • それどころかもっと悪い。Tailwindに関するありがちな議論は、CSSがどう動くよう設計されているかへの完全な無知と、別の文脈なら開発者が崇めるであろう原則、たとえば繰り返すなのような原則の放棄から来ている
      TailwindとCSSについて話していて、相手が「カスケーディング」の意味を知らないだけでなく、スタイルシートの文脈でその概念が有用であり得ると考えたことすらないと気づく瞬間は本当にうんざりする
    • 経験豊富なTailwind支持者は、また別のオンライン論争に引きずり込まれる時間があるなら、もっと良いことをしている可能性が高い
      90年代からCSSを多用してきてTailwindも見てきたが、理解してからは生のCSSをほとんど避けるようになった。ある意味では1つの混沌を別の混沌に置き換えるだけだが、個人的には複数ファイルにまたがる重なり合って矛盾するカスケードより、局所化されたクラススープを扱うほうがましだと思う
      どちらもきれいに実装することはできるが、Tailwindの混沌を整理するほうがCSSの混沌よりはるかにましで、開発全体の体験もより楽しい
    • 間違ってはいないが、一緒に働いてきた「フルスタック」開発者の圧倒的大多数は、CSSをごく基本的なレベルでしか知らず、深く学ぶことにほとんど関心がなかった
      私も20年以上プログラミングし、Web開発もほぼ15年やってきたが、CSSをきちんと学ぶ動機を見つけにくい。追いかけるべき技術スキルが多すぎて、CSSは私の優先順位ではかなり低い
      専門家に任せたいが、会社は専任のフロントエンド開発者を採ろうとしない
    • 生のCSSコードベースを学ぶのにより多くの労力をかけるより、Tailwindのコードベースを見たほうが理解しやすいのではないか? Tailwindのほうが簡単にスケールするという議論の一部は、まさにそこではないのか?
    • SQLをラップするライブラリを使う人にも同じことが当てはまるのではないか?
  • スケールするHTMLとCSSを書くことに焦点を当てたクリーンなWeb開発ガイドを書いている: https://webdev.bryanhogan.com/
    ここにいる人たちにも役立つかもしれない。スタイリングにはTailwindのようなものを使わず、AstroやSvelteのようなモダンフレームワークとCSSだけを使っている
    すべてのプロジェクトに reset.cssvar.cssglobal.cssutil.css を置き、残りのスタイルは該当するコンポーネントやレイアウトにスコープを限定している

    • JavaScriptフレームワークを使うなら、全体の目的が少し薄れてしまわないか?
    • 自作のTailwindのように聞こえる
  • 良い記事だ
    外部ライブラリ依存を取り除いて最初から自分で解決策を作るのは好きだが、Tailwindではそうしないとはっきり決めている理由がある。プロダクション最適化を提供し、実際に必要な最小限のCSSだけが配信されることを保証してくれるからだ
    globals.css や他の場所に色や余白などの選択肢を全部列挙していても、本番でそのバリエーションを全部使うか心配する必要がない。Next.jsのようなフレームワーク内で作業すれば、ビルド時にこの最小化ステップが自動で起こることさえあり、それだけでもTailwindから移行しない十分な理由になる
    TailwindでインラインCSSを書くときに耐えがたい制約を感じたこともなく、Tailwindのグリッドツールで画面幅に応じてうまく反応するグリッドを実装するのにも大きな問題はなかった。記事で挙げられていたシナリオはどれもTailwind、あるいはTailwindとCSSの組み合わせで解決してきたし、grid-column-areas が標準でないのは事実だが、レスポンシブなグリッドレイアウトで大きな制約だと感じたことはまだない
    Tailwindの最大の問題は、読むことに慣れるまで時間がかかる点だ。私たちはインラインCSSは悪く、グローバルスコープのCSSは良いといった形で教えられ、きれいなHTMLに慣れているので、実際のTailwindコード、特に長い行を見ると最初は本当に読みにくく見える。長く使ううちにその見た目に完全に慣れ、最終的にはTailwindのほうが効率的で保守しやすく、さらには読みやすいとすら感じるようになったが、そこに至るまでにはかなり時間がかかった

  • 最近本当に気に入っているアプローチは、Tailwindとスコープ付きスタイルを一緒に使うことだ(SvelteとVueで)
    こうするとTailwindの利便性を保ちながら、テンプレートの汚染を最小限にできる:
    +
    {{ count }}

    • 私も同じくかなり早い段階でこのやり方に落ち着いた。Tailwind作者たちが推奨する方法とはずれているが、一度も後悔したことはなく、うまく機能している
  • 私にとってはSvelteとLLMがTailwindの必要性を完全になくしてくれた
    振り返ると、Tailwindを主に使っていた理由は、自分に課した制約ではなく、CSS衝突の回避と、自分にはより論理的に感じられる文法だったからだ

    • SvelteがTailwindに対する見方にどう影響したのか気になる
  • Tailwindで一番良い点は、その場しのぎのクラス名を作る必要がないことだ。もうBEMを使わなくてよい

 
GN⁺ 2026-05-16
Lobste.rsのコメント
  • 個人プロジェクトでは、もう CSS/JavaScriptフレームワーク をほとんど使っていない
    依存関係がなければ、サプライチェーン脆弱性も発生しようがないから。もちろん脆弱性はそれだけではないが、助けにはなる

    • 私もかなり 素のHTML/CSS/JS に戻っていて、自作のものを少し載せて使う程度になっている
      フレームワーク疲れ、npm audit の負荷、そしてLLMのおかげで実装方法について他人の評価をあまり気にしなくてよくなったことが合わさった結果だ。たとえば「なぜReactやTailwindを使わないのか」といった質問など
  • これは単に CSSが動く仕組み というだけの話だ
    これを知らずにTailwindを盲目的に使っているのを見ると、外に出て雲に向かって叫びたくなる。私にはTailwindの90%は文法が違うだけのインラインスタイルに見え、<FONT> タグより一段ましな程度だとも思える

    • このコメントの意図はよく分からないが、8年近くTailwind を使ってきて、Tailwind利用者を見下すこういうコメントは数え切れないほど見てきたし、そのどれ一つとしてTailwindをやめる助けにもCSSの腕を上げる助けにもならなかった
      このブログ記事は、私が実際に知る必要があった内容を説明している
    • 「Tailwindの90%は文法が違うだけのインラインスタイル」というのは、あまり正確ではない
      Tailwindはインラインスタイルとはかなり異なる動きをし、むしろCSSにはるかに近い。記事でも指摘されているように、Tailwindをうまく使うための良い習慣の多くは、効果的なCSSを書くためにも必要な習慣だ。Tailwindは、すべての要素に暗黙の スコープ付きCSSブロック を付与しつつ、独自のDSLを使うものに近い
    • CSSがどう動くかを知っていることと、効果的に使う方法 を知っていることの間には大きな差がある
      CSSの動作原理はよく分かっているが、素のCSSは負担が大きく、グラフィックデザインも得意ではないので、今でもTailwindを使っている。この記事は、Tailwindを足がかりにCSSを構造化するためのアイデアを与えてくれる
  • 最近の流れをあまり追えていない立場からすると、この記事は モダンなCSSの実践 をかなりうまく示しているように思う
    インスピレーション元の記事へつながるリンクが多いのも気に入った。読み物として良さそうで、今のところは "no outer margin" だけ読んでみた
    ただ、基本スタイルを「下から上へ」組み立てるアプローチには少し懐疑的だ。代わりに何をすべきかは分からないし、試してみる価値はありそうだが、基本スタイルは本質的に扱いが難しい

  • この記事は本当に良かった
    私も小さなサイトをあれこれ作りながら少しずつCSSを学んできたので、最初からこういう システム的な考え方 をもっとしていれば助けになっただろうと思う。フレームワークにはかなり抵抗感があるが、使わないでいると、やりたいものを実装できても構造のない宙空に浮いているような感覚になることがよくあった

  • 「Tailwindはよくないから単にCSSを使え」ではなく、「Tailwindは素晴らしいが、もう必要ないかもしれない」という言い方なのが良い
    CSSを手で構造化することにいつも苦労していたが、この記事のおかげでずいぶん違う観点で考えられるようになった

  • CSSを整理するとき、この 構造化手法 はかなり役に立った: https://rstacruz.github.io/rscss/
    全体として、元記事でjvnsが説明していた内容とよく合っていて、その上に構造と整理を少し追加してくれる