Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Panda CSS と Ark UI ではじめる個人開発
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
ikuma-t
May 24, 2024
Programming
3k
4
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Panda CSS と Ark UI ではじめる個人開発
https://aegis.connpass.com/event/317419/
の登壇資料です!
ikuma-t
May 24, 2024
More Decks by ikuma-t
See All by ikuma-t
Querying Design System デザインシステムの意思決定を支える構造検索
ikumatadokoro
1
1.5k
Make Impossible States Impossibleを 意識してReactのPropsを設計しよう
ikumatadokoro
0
1.1k
いまさらのStorybook
ikumatadokoro
0
1k
これで最後にしたい! Astroと立ち向かう 6度目の個人ブログ再開発
ikumatadokoro
6
2.6k
見た目から始める生産性向上
ikumatadokoro
12
6.2k
ぼくが 美容師さんに伝えたかった バンドの話
ikumatadokoro
0
340
Railsアプリをコスパよく読むための環境整備
ikumatadokoro
2
1.4k
HTTPを手で書いて学ぶ ファイルアップロードの仕組み
ikumatadokoro
82
33k
たどころくん1号を支える技術
ikumatadokoro
1
370
Other Decks in Programming
See All in Programming
<title><a id="</title>君はこのHTMLをパースできるか"></a></title> #雑LT_study
pizzacat83
0
180
片田舎のおっさん、 Swift Buildのダイアモンド問題解決の不具合修正PRを出すが、解決方法がキャッシュをしないようにすることであり、ビルド時間が伸びると言われてマージされないので高速化もする/swiftbuild
yimajo
0
310
AIに既存システムを理解させる技術 ~レガシーを見捨てないハーネスエンジニアリング入門~
ochtum
0
170
関東Kaggler会_NVIDIA_Nemotron_コンペ_振り返り
rick_ds
0
730
go-spidermonkeyでAIエージェントのCode Modeを実装する
syumai
3
1.3k
レビュー履歴をAIに食わせて、 Compose移行を加速するs
shihochan
0
230
KotlinConf Extended South Korea 2026 Keynote
l2hyunwoo
0
120
仕様書を書く前にハーネスを作る - Agent Native開発は「探索を速く、判定を固く」
gotalab555
5
1.8k
Loosening the Reins: Go Generics Get More Flexible
kuro_kurorrr
0
350
Oxlintはいいぞ(続)
yug1224
1
480
Dockerfile CMD for Node.js
grazie1999
0
140
S3 を使うアプリケーションをローカル完結で動かすことに全力を注いでみた / Running S3 Apps Offline
contour_gara
0
660
Featured
See All Featured
Docker and Python
trallard
47
4.2k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
37
6.6k
Designing for Performance
lara
611
70k
技術選定の審美眼(2025年版) / Understanding the Spiral of Technologies 2025 edition
twada
PRO
120
120k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
32
3k
Art, The Web, and Tiny UX
lynnandtonic
304
22k
Prompt Engineering for Job Search
mfonobong
0
420
Rebuilding a faster, lazier Slack
samanthasiow
85
9.6k
Have SEOs Ruined the Internet? - User Awareness of SEO in 2025
akashhashmi
0
450
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
16k
How to Align SEO within the Product Triangle To Get Buy-In & Support - #RIMC
aleyda
2
1.8k
How to make the Groovebox
asonas
2
2.4k
Transcript
Panda CSS と Ark UI で始める個人開発 ikuma-t AegisエンジニアLT交流会
ikuma-t 2 株式会社エンペイで働くエンジニア。 普段のお仕事ではVue.jsやRailsを書いています。 プライベートでは SVG と格闘しています。 もうそろそろエンジニア3年目に入ります。 千葉のどこかに住んでいます。 ikuma-t
ikumatdkr ikuma-t.com
Panda CSS と Ark UI の とりあえずのはじめ方 お話しすること
チーム開発における運用を意識した 両ライブラリの使い方 話さないこと お!言い訳だ!
• 「ドキュメント見るのめんどいから、今回もTailwind CSSでいいか」と思っている人 • Panda CSS / Ark UI を使おうと思っている方
想定する聴者
Panda CSS の概要を掴む
Panda CSS Chakra UI が開発している ゼロランタイム CSS in JS ライブラリ
https://panda-css.com/ 本物のパンダは和歌山でみるのがおすすめ
とりあえずスタイリングしたい 個人開発なので、そこまで考えず
None
None
None
Panda CSS は選択肢が多い😮 これまでの CSS フレームワークのいいとこ取りだから
Panda CSS の 2 つの側面 Styling engine Token generator sea.80
text-button-normal
Panda CSS の 2 つの側面 Styling engine Token generator sea.80
text-button-normal 個人で使う分には まずスタイリング(左側)できればOK
Panda CSS のスタイリング記法 1. Object Literal(Atomic Styles / Shorthand Properties)
2. Template Literals(`css` / `styled`) 3. Patterns 4. Recipes 5. Slot Recipes Panda CSSでスタイリングを行うための記法は以下のとおり。
Object Literal (Atomic Style) • オブジェクトで CSS プロパティを記載する • class
に適用する • 型補完が効く
• オブジェクトで CSS プロパティを記載する • Panda が提供する独自 短縮記法プロパティ (Utilities)を利用する Object
Literal (Shorthand Properties)
Template Literals • テンプレートリテラルで定 義する記法。 • token に対する補完が効 かない、pattern と
recipe が生成されないな どの不足がある。
Patterns • よく使用するレイアウトを 簡単に再利用するための 機能。 • Flex、Divider、...etc • JSXの形式でも使用でき る。
Recipes • 複数のプロパティのセット をひとまとめにしたもの。 • 例えばボタンの形式・サイ ズを定義する • ラフに使うのは Atomic
Recipe(cva)
Slot Recipes • 複数の要素から構成され るコンポーネントの Recipeを定義するため のもの • Compound Pattern
の スタイリングに有効
どれで書くのか?💭
基本は Object Literal(Atomic Style)を使う • Object Literal は Panda CSS
の推奨。過不足なく使える。 ◦ Utilitiesは短縮してかけるが、CSS-in-JS自体が補完を行えるのでそこまで恩恵を感じ ない。通常のCSSプロパティを使った方が移行容易性・保守性は良さそう。 ◦ Template Literal は一部生成されない内容がある。 • ある程度利用パターンが見えている場合(共通のコンポーネント)には、適 宜 Recipes / Slot Recipes も使える。 • Patterns は無秩序にならなそうなら便利に使える。
ラフに規約を設定する 資料のみです
規約を設定する • チーム開発ではないので、すべてをガチガチに固める必要はない • 一方で開発時の迷いやミスを削減するために、選択肢を絞るような規約を 設けることは、個人開発においても効果的。
• panda.config.ts のオプションを指定すると、不要なプロパティや値を生成 しないことができる(補完にも出なくなる)。 • shorthands: ショートハンドプロパティの生成を制限 ◦ 例)backgroundColor は使えるが、bg
が使えなくなる。 • strictPropertyValues:一部のCSSプロパティについて、無効な値の設定 をできないようにする ◦ 例)display: “hoge” はエラー。display: “grid”や”flex”はOK。 使わないプロパティや値 / 無効な値に対する規約
やりすぎな気もするけど、patterns も消せる • panda css には Preset と呼ばれる設定集がある。 • デフォルトでは次の
2 種類の Preset が適用されている。 ◦ @pandacss/preset-base:pattern や 擬似要素を定義している。 ◦ @pandacss/preset-panda: デフォルトのカラーパレットなどを定義している。 • Preset は npm として提供されており、またインターフェースとして Config のオブジェクトを返すだけなので、patterns を省いたオブジェクトで Config を再構成すると、patterns が生成されなくなる。 ◦ https://panda-css.com/docs/customization/presets#which-panda-presets-will -be-included-
デザイントークンを段階的に定義する 意味的なレイヤー 参照レイヤー sea.80 text-button-normal 原始的な値 #0017C1 Primitive / Semantic
な値をそれぞれ指定可能
デザイントークン定義の ためのヘルパー関数 • 色やボーダー、余白など 部分的にトークンを定義 できる。 • defineToken と defineSemanticToken
という二種類のAPIが用 意されている。
作成済みのデザイントークンを参照する(panda studio) Astro製のカタログ。npmで別途 @pandacss/studio を追加する必要がある
Ark UI のコンポーネントを使う
Ark UI Headless UI コンポーネント ライブラリ https://ark-ui.com/
Ark UI は Zag.js で構築されている
Zag.js UIの状態・属性を管理 Ark UI 状態や属性をDOMに注入 Panda CSS スタイル層
Zag.js 有限ステートマシンによる コンポーネントフレームワーク https://zagjs.com/
余談)Zag 用語 • Zag:方向を急激に変えること。Zag.js のアプローチの革新性を示してい る。 • zag it!:「Zag.jsでコンポーネント作ろうぜ!」 •
zagger:Zag.js を使っている人 • zagadat:Zag.js を使ったときの感覚 • zag nation:Zag.js のコミュニティ
Zag.jsをざっくり掴む - State Machine - コンポーネントの状態を State Machine で管理するライブラリ Dialogの場合(簡略版)
closed open open close 薄暗い背景を表示 薄暗い背景を非表示 data-state=”open” data-state=”closed” (共通)適切な aria 属性を付与 状態に応じたdata属性の付与 アクセシビリティの考慮 状態に応じたDOMの変更
Zag.jsをざっくり掴む - Components Anatomy - コンポーネントの構成要素。この単位で属性の付与が行われる。 画像引用元:https://zagjs.com/components/react/dialog
Zag.jsをざっくり掴む - machine と connect - 状態遷移を定義する「machine」とそれを UI に繋ぎこむ「connect」で構成
Zag.jsからArk UIへ zag.jsと同じ粒度でコンポーネントを構成 https://ark-ui.com/docs/react/components/dialog
Zag.js からArk UI へ State Machine Connect Custom Hook HTML
Dialog.Title Dialog.Content Dialog.Description Dialog.Trigger Dialog.CloseTrigger Dialog.Backdrop Dialog
Panda CSS の Slot Recipes を使ってスタイリングする Ark UIのコンポーネントはCompound Patternで構成されている。
Slot Recipes • 複数の要素から構成され るコンポーネントの Recipeを定義するため のもの • Compound Pattern
の スタイリングに有効
補足:slotには @ark-ui/anatomy が便利 • @ark-ui/anatomy には 各コンポーネントの Anatomy が格納されて いる。
• このkeyをとることで、 slotsが簡単に指定でき る。
補足:Atomic Slot Recipes と Config Slot Recipes • slot recipesを構成する方法には、sva(Atomic
Slot Recipes)と、 defineSlotRecipes(Config Slot Recipes)がある。 • 前者のCSSはJust in timeで生成されるため、パフォーマンス的には後者 のほうが優れている。 • デザインシステムなどの共通化が多くある場合は後者を利用する。このと き、Storybookですべてのパターンが生成されないので注意が必要 (staticCSSというオプションで回避できる。)
状態によって変わる部分にスタイリングを当てる • Zag.js経由で各要素に状態に応じたdata属性が付与されているので、こ れをターゲットにスタイルをつける。 • Panda CSSでは、「_」から始まるプロパティがdata属性に変換される (Utilityとして定義のあるもののみ)。 • 例えば「_open」と指定した場合、「&:is([open],
[data-open], [data-state="open"])」に対してスタイリングされる。
Factory を使って共通 コンポーネントを作る • Ark UI には Button や Input
といったコンポーネ ントはない。 • factory を使うと、 asChild が付与されたコ ンポーネントを作れる
おわりに
Panda CSS と Ark UI で始める個人開発 ikuma-t AegisエンジニアLT交流会
Panda CSS と Ark UI で始める個人開発 ikuma-t AegisエンジニアLT交流会
結局 ikuma-t は何を個人開発しているのか? 自動補完で単語帳作成 集めた単語を並べて ... スワイプで理解度チェック
実際に機能としてもだいたい 実装できていたのですが...
なんか飽きてしまった!😉
個人開発は技術を使うよりも モチベーションが大事!(唐突)
ありがとうございました!