Upgrade to Pro — share decks privately, control downloads, hide ads and more …

『Tailwind CSS実践入門』 出版記念基調講演

fsubal
March 12, 2024
4.8k

『Tailwind CSS実践入門』 出版記念基調講演

「Tailwind CSS実践入門」出版記念イベントの基調講演で使用したスライドです。

イベント詳細 → https://pixiv.connpass.com/event/310073/
書籍 → https://gihyo.jp/book/2024/978-4-297-13943-8

fsubal

March 12, 2024
Tweet

Transcript

  1. 2 自己紹介 • 2016年4月 新卒入社 • 2018年から pixivFACTORY の開発 •

    フロントエンドエンジニア → テックリード → エンジニアリングマネージャ → プロダクトマ ネージャ • 2020年〜2022年デザインシステムの開発を兼 任 ◦ 2022年に charcoal として OSS 化 ◦ デザインシステム初期メンであり、OSS化 プロジェクトの当事者 • 2024年に『Tailwind CSS実践入門』を出版 @f_subal 著者
  2. 3

  3. 5 • プロダクトが10個以上ある • 技術スタックが全部Reactとは限ら ない • その上で統一的なデザインシステム を作りたい •

    そんなところに Tailwind CSS がハ マった • pixiv inside やカンファレンスでも 何度かお話した内容 デザインシステムの 技術選定に悩んでた https://inside.pixiv.blog/2022/03/31/120000
  4. 6 • CSS in JSよりはCSS Modulesを好む • CSSに近い、SassやPostCSSを好む • BEMなどの設計論はあまりやらない

    ◦ stylelint をガチガチにしてクラ スの命名規則は特に設けない • 「ガイドラインとしてのデザインシ ステム」に懐疑的 ◦ lint にない規約は信用しない ◦ Sass変数の管理はコスパ悪い派 Tailwindに出会う前 のCSSへのスタンス powered by https://tweet2image.vercel.app/
  5. CSSのレビューに対する課題意識 • 多くの開発者はCSSのコードレビューができない! ◦ ※ このスライドは会場で思ったより多くの手が挙がった場合は破綻します • CSSはwrite-onlyな言語になりがち ◦ 書ける人は多いが、ちゃんと読める人が(読もうとする人も!)少ない

    ◦ 読み書きの意志や能力にものすごく非対称性の高い言語 • 他のソースコードと同じぐらいの精度でCSSをレビューできるチームは多くない ◦ しかし本来これはダメな状態 • 本来あるべきコードレビュー → 「このflexboxの書き方だとモバイルで崩れそう」 • 現実のコードレビュー → 「クラスの命名規則がルールに沿っていませんよ(CSSの 中身はだれも見てない)」 10
  6. 11 • あなたがCSSを書けるかは問題では ない!!!! ◦ 正しくは「チームがCSSをレ ビューできるか」 • 対比されるのは素のCSSではない ◦

    比べるべきは stylelint とかだ • 許可リストの Tailwind CSS vs 拒 否リストの stylelint とかなら意味 のある対比 「Tailwind?私は CSS書けますし…」 powered by https://tweet2image.vercel.app/
  7. Q. Tailwind がレビューしやすいですって? • A. クラスの多さに気を取られてるとそう思うかもしれない(人間の気持ち) ◦ が、「他のファイルが上書きしているかも…」と考えなくて良いのは最高 ◦ それに「ダメな記述を見分けるルール」は結構シンプル。機械的にできる

    • ルール1: Arbitrary Values -[...] があったら警戒する(4章と9章を参照) • ルール2: モディファイアが少なかったら警戒する(やや主観的) ◦ hover:やactive:のないボタンはたぶん色の考慮が抜けてる ◦ レイアウトに画面幅のモディファイアがなかったらレスポンシブを忘れてる • 機械にわかりやすいコードは人間もレビューしやすいを地で行くのがTailwind CSS ◦ 早く人間の気持ちをやめよう!! 12
  8. 14 • 2020年後半にはTailwind CSSをすっ かり日常的に使うようになってた • 2023年2月WEB+DB PRESSで特集を _yuheiy さんが書かれていた(私で

    はないです) • その後書籍版の企画があがったが、 いろいろあって_yuheiyさんから私を 紹介いただいた • 2023年3月頃から企画が始動 書くにいたる経緯
  9. ターゲット読者層を決める • 誰に向けて書くか?初心者?中上級者? • 明らかに私に期待されてそうな役割 = デザインシステムでの活用法 ◦ もうこの時点で初心者向けではない ◦

    HTML/CSS自体を知らない人にこの話はできない • フロントエンドエンジニアに絞るか? ◦ これは No !!!!! ◦ デザイナもマークアップエンジニアもサーバーサイドの人も読んでほしい ◦ なぜならTailwind CSS自体がそのぐらい広いターゲット層のライブラリだから ◦ React 前提の説明もあるが、それは仕方がない(最小限かつ疎にする) 15
  10. 「対戦相手」を決める • 通底する二項対立があると本全体の議論が見やすくなる(仮想敵を置くのは大事) ◦ 例: OOUI本の「タスク指向 vs オブジェクト指向」とか ◦ 私の場合は「ユーティリティファースト

    vs セマンティックCSS」など ◦ 必ずしもどちらかを悪者にする必要はないが、対立構造が見えるようにする • 例1: 「Tailwind CSSは短くかけるのが良いところ」と言ってる人 ◦ 初心者だが、対決する相手ではない。彼らを成長させるのが狙い • 例2: 素のCSSやPostCSSがあればデザインシステムはつくれると言ってる人 ◦ もしそうなら私はデザインシステムでこんなに悩んでない(反論したい) • 例3: コンポーネント集がデザインシステムの必要十分条件だと思っている人 ◦ みんなあんだけBootstrap上書きしたりMUIのsx使ったりしてるのに? 16
  11. 差分ではなくストーリーを書く • 技術ブログは「差分」を書くことが許される ◦ 最新情報を追ってる人は前回からのアップデートを知れれば良い ◦ フロントエンドの流れが速くて複雑に見えるのは、実際に色々起きてるのも あるが、みんなが「前回との差分」をしゃべっているから • 本には「前回との差分」がない

    ◦ 界隈の全体像を、歴史的な流れの解釈を、一本のストーリーを提示する必要 がある • Tailwind CSSは前提となる背景が多いので余計に意識した ◦ 結果的に第1章と第2章がすごい長さになったけど、まぁそういうことです 18
  12. 「思想書」として書く • フレームワークの入門書が扱うのは主に「歴史」と「思想」である ◦ 作者の意思決定と世の中の変化、その間の論理の破綻のなさこそが重要 ◦ それを踏まえて「〜な状況で〇〇する方が良い」と読者に提示するのがゴール • テクノロジーを扱っているが、歴史書か思想書だと思って書いたほうが上手くいく ◦

    本屋さんで「理工書」のコーナーに置かれるけど、でもやるんだよの精神 ◦ これは技術記事をZennやQiitaに書くときも同じこと • 仕様や使い方の説明は「事実」なので正しいが、これだけでは新規性に乏しい ◦ そういうのは仕様書や公式ドキュメントに任せる方が良い ◦ 一番マズいのは「内容は公式の事実しか言ってないのに文体だけエモい」文章 ▪ これの真逆を行くことが大事 19
  13. 本当は周辺ライブラリに詳しくなかった • 私は「React・Tailwind CSS・clsx・React Aria があれば全部書けるじゃろ💪」 という発想だった ◦ なので cva

    とか shadcn-ui とか prettier-plugin-tailwindcss とか有名どころ をめちゃめちゃスルーしてました(すみません) ◦ 6章を書く過程でキャッチアップをし、サンプルコードを書く前に何とか • ポジティブに考えると「どのライブラリが必須でどのライブラリが好みの問題か」 の嗅覚はあった ◦ なぜ私はこのツールをスルーしてたのか、ちゃんと言語化すれば大丈夫 • ここはレビュアーのみなさまにアドバイスをもらった面が強いです(多謝) 21
  14. 本当にCSS設計の歴史に疎かった • 名前のついたコーディング規約を覚えるのにもともと苦手意識があった ◦ 私のCSS設計に対するスタンスは最初に話した通り • BEM以外よく分かってなかったし、その理解も結構間違っていた(ごめんなさい) ◦ @_yuheiy さんその節はありがとうございました

    • 代わりにCSSの技術的な発展史は語れることが多かったので、第1章がああなった • 実は「文章ベースのガイドラインを信じない人向けのCSS本」という読者像がある ◦ 第9章は暗にデザインシステム(≒しくみベース)と文章ベースの規約の二項 対立がある 23
  15. 24 • 執筆開始は2023年4月頃から • 基本「1ヶ月に2章ずつ、書ける 章から順に」で進めてた • 元々4章でクラスを説明した後6 章でコンポーネントの話を書く のがキレイかなーと思っていた

    • が、4章の終わりが不確定すぎ て一番最後に書くことになった 第4章の見積もりが マジで無理だった powered by https://tweet2image.vercel.app/ (ちなみに他の章は3万字ぐらいが中央値です)
  16. 傍点を活用する • 日本語にはイタリックがない • しかし強調の手段が太字しかない、というのは不便だ ◦ 多用するとブログっぽくなりすぎるので避けたい(いかがでしたか?感) ◦ 注意喚起のためにイタリックで強調、みたいなことは日本語でもやりたい ◦

    下線もなんか違うと思ってる(下線は読者が引くものだ) • Tailwind本ではMarkdownでいう ** を太字、 _ を傍点に割り当てる方針を採った ◦ 私は一般に <em lang="ja"> は傍点で表すのが良いと思っている(思想) 28
  17. 29 • 厳密な定義のありそうな単語を不 用意に使うのを避けたい • 検索で自信が持てないとき一旦 ChatGPTに聞く • これだけで答えがわかることはマ レなので追加の調査は必要だが

    (何で検索すればいいか分かる) • その他、執筆に便利な GitHub Actions の生成とかにも使った 執筆をChatGPTに 補助させる