10月2日、日曜日ですね。 時刻は昨日もありました。
えー、今日もののそぎ研究活。 今日はイベントが盛りだくさんですね。
はい、おはようございます。 耳のkeethこと桑原です。
では、朝活を始めていきたいと思います。
はい、えーと、昨日がなんだっけ、ポストデブの、ポストデブが正式には、のイベントがありましたね。
ニジボックスさんとCQ協会が連携していたイベントですね。
さまざまな著名な方々が登壇されていたイベントがありまして、
確かYouTubeでライブ配信やってたんですけど、
僕は結局いろいろあって見れなかったんですけど、
ちょっとアーカイブあるかなっていうのを、ご覧の確認したいと思ってるんですけど、
それとは別で、今日です。
今日、明日ですけど、日本デジタル庁が主催するイベント、デジタルの日っていうものが、
まあ、去年もやったらしいですけどね、今年もやるそうです。
今年も豪華、いろんなゲストの方々が登壇されるっぽいですけど、
あといろんな発表があるっぽいですね。
気になりますけど、日本のトップのデジタル庁がイベントをやるっていうところで、
僕もすごく気になってるんで、
今日、明日のデジタルの日っていうYouTubeライブをちょっと見ようかなと思ってます。
確か11時から開催開始ですし、
デジタルの日だけでググっていただくと、
ちゃんと公式サイトまで飛べると思いますので、
興味ある方はデジタルの日のイベントを見てみてください。
僕はかなり気になってますね。
デジタル庁の歩みっていう公式のPDFもこの朝活で読んだんですけど、
かなりこの1年間のデジタルの日の歩みを見た感じすごく良かったので、
今後どうなっていくのか、日本のITがどのように進んでいくのかなっていうのが気になっていたり、
注目をしているのを見ようと思ってます。
すみません、余談ですね。
では早速今日の朝活の本題に入っていこうと思います。
今日はタイトルにあります通り、
テイルウィンドを考えるっていうブログを読んでいこうと思ってます。
すでに皆さん読まれたかもしれないですね。
タイプスクリプトのブルーベリー本で有名なウヒョさんという方ですね。
もともとタイプスクリプトだけじゃなくて、
いろんなJavaScriptだったり、タイプスクリプトもそうですし、
あとリアクト周りの記事をたくさん書かれている方で、
すごく、しかも一個一個の技術に対する理解が深い方ですね。
この方のブログで勉強した方もかなり多いんじゃないかと思ってます。
僕もその一人でして、そのテイルウィンドを考えるというブログを
昨日ヒョさんが書かれていて、
ToDoに入れたんですけど、またToDoに入れて読まない気がしたので、
もう朝活で読んでしまおうと思ってます。
常に読んだ方は大変に申し訳ないですけど、お付き合いいただければと思います。
では早速いきたいと思います。
今日はですね、けんじさんとプテラノドさんとすらさんですね。
おはようございます。ご参加いただきありがとうございます。
今日もダラダラと読んでいこうと思ってます。
長いんで、もしかしたら教授に終わらない可能性があるんですけど、
早速いきたいと思います。
はい、いきましょう。
皆さんこんにちは。
最近とある事情で、テイルウィンドCSSに割と真剣に向き合わないといけなくなった
弊社でありますと。
テイルウィンドCSSの話題はTwitterのフロントエード界隈では
定番のトークテーマの一つです。
しかし、弊社の考えを文章にまとめたことはなかったので、
このタイプを記事にすることにしましたということです。
まず結論からですね。
弊社が一番皆さんに伝えたいことは、
テイルウィンドCSSは考えなしに採用している技術ではなく、
採用するには熟慮が必要だということだそうです。
特にフロントエードのスタートキット的なプロジェクトの中に
テイルウィンドCSSが混ざっていることはまあまあありますが、
あれは結構なオナです。
気軽に採用すべきものではありませんと。
まあまあここまで結構そうだなと思いつつも、
でもいろんなスターターキットだけのところにボイラープレートに
既に入っているというより、それだけテイルウィンドの人気とか
伸び率がやばいということですよね。
そういうことに注目になると思います。
NPMトレンズというサイトがあるじゃないですか。
NPMのモジュールのダウンロード数ランキングとか
グラフ表示してくれるサイトがあるんですけど、
それを見る限り、もうそろそろブーストストラップの
数字を上回るんじゃないかという伸び率なんですね。
ついに歴史が変わるのかというところもありますけど、
とはいえもうちょっと時間がかかりそうな感じはしますけど、
だいぶ肉薄してきたって感じがするので、
その辺、やっぱりランキングって好きな皆さん好きだと思いますので、
僕も好きなんですけど、見てみると面白いかもしれないです。
結構数字近づいてきましたね。
はい、余談でした。戻ります。
筆者の考えでは、テイルウィンドCSSの採用を考慮に
入れてよいのは次の2つの場合だそうです。
1つ目は、デザインにこだわりがなく、
最低限整っていればいい場合ということですね。
デザイナー不在のプロジェクトなど、
デザイン上の細かな要求がないが、
とりあえず整えておきたいという場合は
採用してもよいかもしれません。
いわゆるブーストストラップ的な立ち位置のものが
欲しい場合です。
まさに同じ方向性の時ですね。
2つ目です。2つ目は、逆にデザインシステムを
しっかりと整備し、それからの逸脱を防ぎたい場合ですね。
ただデザインがあるだけでなく、
フロントエンドエンジンを巻き込んだデザインシステムを
整備したいということが主要になります。
このようなユースケースでは、テイルウィンドCSSの
アプローチが適している可能性というのがあります。
この記事では、上記の結論に至るまでの
お考えの三つ字を紹介していこうと思っています。
では行きましょう。
テイルウィンドCSSとは、
まずテイルウィンドCSSがどのような技術なのか
例えば
md://w-48とかですね。
書くと画面の幅がmd以上ならば
w48を適用するというクラス名や
ホバーコロン、text-red-500みたいなやつですね。
やるとホバージのみtext-red-500というのが適用される
みたいなクラス名を使うことができますと。
割と直接的で見た感じは分かりやすいと思いますね。
メタフレームワークとしての特徴についてちょっと語っていきましょうと。
whfont-やtext-といった類のクラス名一式というのは
テイルウィンドCSSにデフォルトで同梱されている
コアプラグインズにも由来します。
プラグインという名称から推察されるように
これらは無効化したりまた独自のプラグインを追加することで
独自のクラス名を定義したりすることも可能になります。
このようにどのプラグインを選択するかによって
テイルウィンドが生み出す具体的なクラス名は完全に制御可能です。
このようなクラス名たちを生み出すフレームワークとしての
テイルウィンドの側面に着目をすると
キーワードや数値でパラメトライズされたクラス名一式を生み出せる点や
それに加えてMDやHoverといった
プレフィックスまで自動で面倒を見てくれる点が注目にあたりします。
もっとも筆者がこれまで見てきた通り
コアプラグインズを無効化して使っているケースは
ほとんど見たことがありません。確かにそうですね。
僕も見たことあまりないですね。
設定をいじって自らのデザインシステムに合わせつつ
コアプラグインズを活用しているというケースがほとんどです。
そのためコアプラグインズによって生み出されたクラス名たちが
Tailwindの代名詞のように扱われているというのが実情と思われます。
この記事でも以降Tailwindではという場合
特記がなければコアプラグインズの使用を仮定して
お話をしていきますよということでした。
続いていきましょう。
Tailwindは何でないかというところですね。
ここまでTailwindの特徴を紹介しました。
冒頭で述べた通り、筆者の考えでは
Tailwindはあらゆる問題を解決してくれる万能のツールではありません。
そこで何がTailwindの良分であり
何がTailwindの良分ではないのかというのを分析していきます。
TailwindはCSSの代わりではないし
CSSの学習コストを減らさないというところに入ります。
まず注意したいのはTailwindはCSSの代わりではないということです。
特にTailwindを使えばCSSを覚えなくていいということはありません。
むしろ必要ですよ。
CSS分からないのにTailwindを書くことは結構ムズいと思います。
TailwindはあくまでメタCSSフレームワーク
つまりCSSをうまく書く目のツールであって
CSSを書かなくていいというようなツールではないということですね。
Tailwindのクラス名を使用する場合
そのクラス名がどのようなCSSに翻訳されるのかというのを知っている必要があります。
例えばフレックスでフレックスレイアウトに
グリッドでグリッドレイアウトにできますが
CSSにおいてフレックスレイアウトやグリッドレイアウトがどのような挙動をするのか
理解していただければこれらは使いこなせません。
同様にz-0とかz-10で
zインデックスプロパティを指定することができますが
zインデックスのまたCSSに対する十分な理解がないと
使いこなせないことで有名です。
Tailwindを使用してその理解を省略することはできませんと言っています。
はい、というわけです。
ここは本当に完全に同意でその通りだなという感じですね。
学習コストの観点では
生のCSSの知識はどうせ必要ですから
Tailwindを使用しても学習コストは全く減りません。
Tailwindのクラス名は生のCSSに比べて簡潔なので
一見すると簡単に見えますが
その簡単さは既にCSSを理解している人が享受できるものであって
まだCSSを知らない人にとっては特に恩恵はありませんよと。
はい、完全同意です。
また既にCSSを十分理解している人から見ると
Tailwindのコアプラグインズによるクラス名が短くて簡潔だからといって
特に嬉しいわけでもありません。
エディターによる入力補完などが十分発達した現在では
Tailwindを使っても使わなくてもCSSの開発効率の差は正直ありません。
むしろTailwindのクラス名を理解するための追加の学習コストが必要なので
その分だけ不利だと言っています。
プログラミングでは関数名や変数名を無理に短くすべきではないと言われていますが
それと同じくTailwindのクラス名はやや短くしすぎて
いわゆるシンプルでなくEasyなものになってしまっている印象を受けます。
ものによっては僕もそれはわかりますね。
シンプルっていうのはいろんな無駄なものとか
冗長なものを削ぎ落として結果を見出されたものがシンプルだと思うんですよね。
タイリーはちょっと単調すぎるというものだというワードですね。
バンドルサイズの方面から見ると
クラス名が短いことによるバンドルサイズ削減というのはあり得ないわけでもありません。
しかしもともとテキストは圧縮されて配信されるものであるという点も考慮すると
よほどエクストリームなサイズ削減が必要でなければ
その誤差の範囲だとしか言えないでしょう。
これもそうでしょうね。
多分ミニファイしてもあんま変わらないんじゃないかなと思ったりします。
Tailwindは命名の苦しみからあなたを解放しないというセクションにあります。
タイトルが物語っている通りですね。
Tailwindのようなutility-firstのCSSとよく対比されるのはセマンティックなクラス名です。
これは次の例のようにセマンティックな意味を持ったクラス名
見た目ではなく内容を表すクラス名を定義し
それに対してスタイルを定義するやり方です。
例えばuserprofileっていうdivタグがあって
その下の画像にusericonみたいなクラス名を振るってやつですね。
本当にセマンティックなクラス名だと思います。
それに対して一個一個CSSを割り振っていくような感じですね。
この例ではそのuserprofileやusericonっていうのがセマンティックなクラス名です。
Tailwindに対して筆者が見かけたことがある誤解っていうのは
Tailwindを使えばいちいち命名を考えなくてもよいっていうことです。
つまりTailwindのクラス名を使えば
このマークアップは次のようになり
userprofileやusericonという名前が消えますねと。
さっきのuserprofileやusericonっていうクラス名に
いろいろCSSの設定がしてあるんですけど
それを単純にTailwindのutilityクラスをバンと直接書いてしまえば
そのクラス名使わなくていいよねっていう話ですね。
確かに名前は消えましたと。
中長期的にはCSSもESモジュールズのセマンティックスの上に乗せられている
乗せられる流れが見えているからだよというふうに仰ってます
あーねーなるほどですね
まあ確かにそれはあるかも
という意味でこれが一つの回ではあるけど
絶対唯一回ではないよと同じですね
ただしこれはあくまでもテイルウィンドにおいてバンドルサイズが無駄に肥大化することはないということです
テイルウィンド以外のソリューションと比べたときにバンドルサイズでどれぐらい有利なのかはやや疑問があります
なぜならCSSのファイルサイズっていうのが削減された分のサイズっていうのは
マークアップ側でクラス名を列挙するところに転換されているはずだからですと
で生のCSSよりもクラス名の方が短いですが
前述の通り文字列圧縮をすれば差は小さくなりますと
ここでバニラエクストラクトとの比較をしていますね
はぁバニラエクストラクトすいません僕全然触ってないんですよね
触らなきゃと思いながら触ってないツールの一つでバニラエクストラクトというのがあります
この領域においてはバニラエクストラクトという競合を得ることは指摘性に値します
書き味は次のような感じです公式サイトからいいよというところで
ざっと書いてあるんですけど
いわゆるスタイルドコンポーネントの書き方に近いですね
バニラエクストラクトスラッシュCSSっていうのをインポートしておいて
スタイルっていう変数名で受け取っておくと
でエクスポートコンストのクラスネームイコールスタイルってさっき読み込んだ関数の中に
オブジェクトでCSSの設定を書くみたいな書き方ですね
思いっきりスタイルドコンポーネントっぽい感じの書き方です
バニラエクストラクトっていうのはインラインスタイルを採用している
いわゆるクラス名を変えさずに要素に対するスタイルを直接記述できるっていう点と
アウトプットがCSSファイルであるっていう点がテイルウィンドと共通しています
あ、そうなんや
こいつビルドするとCSSファイルが吐き出されるんですね
一方でユーティリティファーストクラスを使わずに
オブジェクトの形でスタイルを記述する点がテイルウィンドと異なっています
CSSの構文でなくタイプスクリプトとして書く点が少しエグゾチックですが
なるほど
よく見るとCSSのプロパティ名や値を直接使用することができており
独自のクラス名という中間層がカットされています
うん
それは確かにやっぱりいいですよね
まあそういう意味でいくとバニルエクストラクトの方が
今我々が求めているものな感じもしなくはないですけど
ポータビリティー
すなわちアウトプットがCSSファイルであるということを重要視する場合
テイルウィンドからバニルエクストラクトで選択するのが良いでしょうと
その代わりCSSで吐き出すので
CSSのバンドルのサイズとか時間が増えるよっていうのは確かにある気がしますけどね
はい、でテイルウィンドとバニルエクストラクトを選択する基準となるのは
独自のクラス名という中間層が欲しいかどうかだよってお話につきますと
そしてこの中間層の意義はフレームワークにデザインシステムが含められる点ですよねって言ってます
はい、つまりスタイルをデザインシステムで縛りたい場合はテイルウィンドを使うべきであり
生のCSSを制限なく使用したい場合はバニルエクストラクトを使うべきですと
はい、言ってますね
で、続いてインラインスタイルの話になりますね
はい、多分インラインスタイルのところでちょっと今日のサカツは終わってしまう可能性が多いにありますね
はい、今スクロールバー見てるんですけどもうちょっと続くので
はい、まあじゃあここまで読んでいきましょう
続いてインラインスタイルです
この記事ですでに触れているようにテイルウィンドでは独自のクラス名を定義することなく
DIVなどの要素に直接スタイルを与えることができます
そしてこれはテイルウィンドに特有の特徴ではありません
インラインスタイルが目的なYテイルウィンドではなく
次のような協合というのを考慮に入れるべきですと
いわゆる生のスタイル属性ってやつですね
DIVにstyle="where?"って書いてしまえば別に一緒じゃんみたいな話ですね
生のスタイル属性というのはなんかバカみたいですけど
マークアップの意味としての本質はテイルウィンドと実は何も変わってないですよと
小規模なプロジェクトなど場合によっては選択肢に上がるでしょうと
はい、生のスタイル属性の欠点はバンドルサイズが肥大化しやすい点や
メディアクエリ等は使えない点ですと
この点が問題になる場合には下記の選択肢に発展します
style="components="emotionというのが選択肢に上がりますと
はい、style="components="emotionというのは
スタイルがバンドルされたリアクトコンポーネントを作れるライブラリーですと
一見するとテイルウィンドとは毛色が違いますが
CSSプロップを使うとインラインスタイルに近い書き心地となり
メディアクエリとも扱えます
これを使う場合は次のように書けますというので
DIVタグが書いてあってDIVタグのattributesにcss="objects="の書き方で
その中に文字列リテラルでcssの設定をバーッと書いていけば
別に使えますよというお話です
この系統のライブラリーはテイルウィンドとは毛色が結構異なり
バベルまたはSWCの適切な設定が必要だったり
SSRが面倒だったりするのとやや難しい点もありますが
書き心地の良いインラインスタイルが欲しいという点では選択肢に上がります
バニラエキストラクトはさっき紹介しましたが
インラインスタイルを可能にしているということで
これも一応比較対象のライブラリになりますよというところです
ではそうですねここで区切ろうと思います
ちょっとどうしようかな
やっぱり長いんだよな
残りですね残っているセクションとしては
テイルウィンドの本質と注意点というところですね
と入っていって最後まとめで終了という感じですね
追記でまたわちゃわちゃって他にもあるんですけど
はい追記からまた結構長いので
はいちょっとすいませんけどここで中途半端ですが区切らせていただいて
また明日この続き残りを読んでいこうと思います
残り読んで若干時間余ったらどうしようかな
J3インフォの更新だけざっと
ラジオ配信的に読んで終わりにしようかなと思います
明日はですねはいということで
じゃあ今日の朝活は以上にしたいと思います
やっぱテイルウィンド僕も今アウケンで1回2回書いてみたんですけど
正直言うと結構書きやすいし
やっぱ何だかんだ使い勝手いいなと思いますけど
それはでも僕らやっぱりCSSにもう慣れ親しんでるっていうのがあって
クライアントさんの方で
なんかやっぱり内製エンジニアとか作るとか育て始めた時
チームを作ろうとしてる時に
テイルウィンドっていう選択肢を一応説明はしたんですけど
やっぱりそもそもやっぱりCSSが分からないので入れたくないですね