CSSの大転換:Tailwindを超えてプラットフォームを再発見する

長年にわたり、フロントエンドの領域はTailwind CSSが牽引する「ユーティリティ・ファースト」の哲学によって支配されてきました。低レベルのユーティリティ・クラスを包括的に提供することで、Tailwindは「命名の永遠の苦しみ」や「肥大化し続けるグローバルCSSファイル」への恐怖を解決すると約束しました。しかし、増え続ける開発者たちが、振り子が逆方向に揺れ戻しているのを感じ始めています。

シニアエンジニアたちの間での最近の議論では、ある共通のテーマが浮かび上がっています。ユーティリティ・フレームワークは初期の開発を加速させますが、長期的なメンテナンス性を損なう「認知的な負債」を生み出し、開発者がウェブ・プラットフォームと関わる方法を根本的に変えてしまう可能性があるということです。Tailwindからの離脱は、必ずしも効率性の拒絶ではなく、セマンティックなHTMLとモダンなCSSの力の再発見なのです。

ユーティリティ・ファーストへの批判:「Div Soup」とセマンティックの衰退

ユーティリティ・ファースト・フレームワークに対する最も痛烈な批判の一つは、それがウェブ開発の自然な順序を逆転させてしまうことです。伝統的に、HTMLはドキュメントの意味(セマンティクス)を定義し、CSSは表現を定義します。

コミュニティのメンバーが指摘するように、Tailwindはしばしば開発者を「CSSファースト」のアプローチへと押し進めます。「この要素は何であるか?」(例:<nav><article>、または<main>)と問う代わりに、開発者は「これを正しく見せるためにどのクラスが必要か?」と問うようになります。これは、単にスタイリング・クラスを付与するためのフックを提供するために、不必要なラッパー要素、いわゆる「div soup」を作成することにつながりがちです。

"Tailwindの最大の問題は、HTMLとCSSについて考えるべき順序を逆転させてしまうことです... Tailwindは代わりに開発者をCSSファーストのアプローチへと押し進めます。欲しいTailwindクラスを考え、そして、クラスを掛けるための要素を用意するためだけに、DOMにまた別のdivを放り込むのです。"

この変化はコードの見栄えだけに影響するのではなく、アクセシビリティにも影響します。HTMLが単なるスタイリング・クラスの運び役になってしまうと、スクリーンリーダーやその他の支援技術が依存するセマンティックな構造が軽視される可能性があります。さらに、結果として生じるHTMLの肥大化は、コードベースの可読性や推論を困難にし、特にコンポーネントが「巨大で肥大化したクラスの山」になったときには顕著です。

「スキル・ギャップ」論争

ユーティリティ・フレームワークが「杖」として機能し、開発者が基盤となるプラットフォームを習得するのを妨げているという意見が繰り返し述べられています。ツールが定義済みのAPIを通じてスペーシング、色、グリッドのロジックを処理してしまうと、CSSのカスケーディング、Flexbox、またはGridの細かなニュアンスを学ぶ動機が減少します。

批判的な人々は、これが「flex items-center justify-betweenを使えば快適だが、カスタムのメディアクエリを書いたり、フレームワークなしで複雑なレイアウトを管理したりすることに苦労する」という世代の開発者を生み出すと主張しています。これは、開発者のスキルが、CSSという転送可能なスキルではなく、特定のツールの構文に縛られてしまうという依存関係を生み出します。

擁護論:デザイン・システムと開発速度

批判はあるものの、Tailwindの人気の理由は偶然ではありません。支持者は、それが単なるCSSフレームワークではなく、コード化されたデザイン・システムであると主張しています。選択肢を制限すること(例:特定のスペーシング・スケールやカラーパレットの使用)により、恣意的なピクセル値を選ぶことによる「決定疲れ」を排除できます。

支持者が挙げる主な利点は以下の通りです:

  • プロダクション最適化: ビルド・プロセスにより、プロジェクトで使用されているCSSのみがクライアントに送信されることが保証され、高度に最適化されたバンドルが実現します。
  • 命名の疲労の解消: CSSの最も退屈な作業の一つは、.card-inner-wrapper-v2のような名前を考案することです。Tailwindは、この要件を完全に排除します。
  • 一貫性: 開発者チームが同じデザイン言語を共有することを保証し、異なるモジュール間での調和のとれたUIを実現します。

中間地点を見つける

議論が進化するにつれ、多くの開発者は、両方の世界の利点を捉えたハイブリッドなアプローチを求めています。いくつかの戦略が登場しています:

1. スコープ付きCSSとコンポーネント

Svelte、Vue、およびAngularのようなフレームワークは、デフォルトでスコープ付きスタイリングを提供します。これにより、多くの人がTailwindへ移行した主な理由である「グローバル・ネームスペースの衝突」問題を解決しつつ、標準的なCSSを記述する能力を犠牲にすることなく実現できます。スタイルをコンポーネント内にローカルに保つことで、開発者はクリーンなHTML構造を維持しながら、グローバルCSSの漏れのリスクを回避できます。

2. @apply ディレクティブ

Tailwindのデザイン・トークンを利用したいが、HTMLの汚染を嫌う人々のために、@apply ディレクティブを使用することで、ユーティリティ・クラスをCSSファイルに移動させることができます。これにより、Tailwindの定義済みスケールを活用しつつ、HTMLをセマンティックに保つことができます。

3. モダンCSSプリミティブ

CSS Variables(Custom Properties)の登場により、重いユーティリティ・フレームワークの必要性は減少しています。Open Propsのようなライブラリは、ユーティリティ・フレームワークの独自の構文を必要とせず、デザイン・システムの制約約を、CSS変数として提供します。

AIの要因

興味深いことに、LLMの台頭がこの議論に新たな次元を加えています。Some argue that AI is actually better at writing Tailwind because the classes are standardized and massive amounts of training dataが存在します。一方で、AIはボイラープレートを書くという「骨の折れる作業」を肩代わりしてくれるため、人間である開発者が高レベルのアーキテクチャやセマンティクスに集中できるようになり、バニラCSSを再び実用的なものにすると主張する人々もいます。

結論:振り子は揺れ戻す

Tailwindの効率性を好むか、セマンティックなCSSの純粋さを好むかにかかわらず、全体的な教訓は、ツールは開発者に仕えるべきであり、その逆ではないということです。バニラCSSへの回帰は、ウェブ・プラットフォームが非常に強力であり、HTMLとCSSというそのプリミティブを習得することが、開発者がなしうる最も将来性の高い投資であるということを思い出させてくれます。

Sources