Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Panda CSS と Ark UI ではじめる個人開発
Search
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.2k
いまさらのStorybook
ikumatadokoro
0
1k
これで最後にしたい! Astroと立ち向かう 6度目の個人ブログ再開発
ikumatadokoro
6
2.6k
見た目から始める生産性向上
ikumatadokoro
12
6.2k
ぼくが 美容師さんに伝えたかった バンドの話
ikumatadokoro
0
350
Railsアプリをコスパよく読むための環境整備
ikumatadokoro
2
1.4k
HTTPを手で書いて学ぶ ファイルアップロードの仕組み
ikumatadokoro
82
34k
たどころくん1号を支える技術
ikumatadokoro
1
380
Other Decks in Programming
See All in Programming
The Good Stuff, Not the Slop: Engineering High-Quality Android Apps with Modern AI Tooling
danybony
1
250
AI駆動開発にグラフDBを重ねてみた
satoshi256kbyte
2
790
Swift愛好会100回記念 第1回を振り返る
jollyjoester
0
120
[GoCon2026] When Goroutines Are Not Enough: Runtime Locality in High-Throughput Go
takehaya
6
2.1k
AI × TiDD / 2026.09.05 Redmine 大阪
tokudiro
1
140
App Intentsのビルドプロセスを支える技術
kntkymt
0
330
AWS Step Functions 大規模並列の壁を越える / jaws-sonic-2026-niigata-step-functions
kasacchiful
PRO
1
440
iOSDC Japan 2026 - Swiftで作って学ぼう!データベース自作入門
kaseken
2
150
Security issues being discussed on Web Platforms
petamoriken
0
860
Foundry Localでエージェント開発
seosoft
0
190
AI Agent時代のリアーキテクチャ戦略と実践
hokaccha
9
4.2k
ALB ログから Trace を気合で繋げる技術
fohte
7
890
Featured
See All Featured
Agile that works and the tools we love
rasmusluckow
331
22k
How to Build an AI Search Optimization Roadmap - Criteria and Steps to Take #SEOIRL
aleyda
1
2.2k
How Fast Is Fast Enough? [PerfNow 2025]
tammyeverts
3
880
Design of three-dimensional binary manipulators for pick-and-place task avoiding obstacles (IECON2024)
konakalab
0
590
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
16k
It's Worth the Effort
3n
188
29k
How To Speak Unicorn (iThemes Webinar)
marktimemedia
1
580
Introduction to Domain-Driven Design and Collaborative software design
baasie
1
980
世界の人気アプリ100個を分析して見えたペイウォール設計の心得
akihiro_kokubo
PRO
74
42k
Measuring & Analyzing Core Web Vitals
bluesmoon
9
990
Ecommerce SEO: The Keys for Success Now & Beyond - #SERPConf2024
aleyda
1
2.1k
jQuery: Nuts, Bolts and Bling
dougneiner
66
8.6k
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 は何を個人開発しているのか? 自動補完で単語帳作成 集めた単語を並べて ... スワイプで理解度チェック
実際に機能としてもだいたい 実装できていたのですが...
なんか飽きてしまった!😉
個人開発は技術を使うよりも モチベーションが大事!(唐突)
ありがとうございました!