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.7k
見た目から始める生産性向上
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
Security issues being discussed on Web Platforms
petamoriken
0
1k
XP祭りでしか伝わらないフリップネタ #xpjug
murabayashi
0
150
iOSDC Japan 2026 - Swiftで作って学ぼう!データベース自作入門
kaseken
2
230
動作中のプログラムの中身をリアルタイムに覗く / Realtime Debugger for CSharp with Roslyn
prota
1
810
スマートフォンでモールス信号を送受信する 〜スマートフォンのLEDとカメラで作る光通信の設計と実装〜
atsuki_seo
0
160
The Rails Doctrine Decade
koic
2
190
Augmenting AI with the Power of Jakarta EE
ivargrimstad
0
250
テストを司るデーモンに会いに行く 〜隔離した仮想マシンでテストを通すまで〜
h1d3mun3
1
550
AI が書く Go コードの品質を劇的に向上させる Linter: “declscope”
mpyw
0
380
SONY CISC-NEWS NWS-1750 + NWB-225 フレームバッファの NetBSD/news68k ドライバ実装 / OSC2026Hiroshima
tsutsui
0
130
速く作れる。その次は、速く確かめられる開発へ 〜AIネイティブ開発を支える、Shift Down〜 / Can build fast. Next, moving to development where we can verify fast.
rkaga
5
3.7k
ハーネス設計入門 〜 基礎知識の整理から実務へのステップアップ 〜
kinopeee
5
3.2k
Featured
See All Featured
Are puppies a ranking factor?
jonoalderson
2
3.9k
Utilizing Notion as your number one productivity tool
mfonobong
4
590
How to Build an AI Search Optimization Roadmap - Criteria and Steps to Take #SEOIRL
aleyda
1
2.2k
Abbi's Birthday
coloredviolet
4
10k
The Cost Of JavaScript in 2023
addyosmani
55
10k
SEO Brein meetup: CTRL+C is not how to scale international SEO
lindahogenes
2
2.9k
RailsConf 2023
tenderlove
30
1.6k
Winning Ecommerce Organic Search in an AI Era - #searchnstuff2025
aleyda
2
2.1k
Typedesign – Prime Four
hannesfritz
42
3.2k
Evolving SEO for Evolving Search Engines
ryanjones
0
300
How to audit for AI Accessibility on your Front & Back End
davetheseo
0
550
A Modern Web Designer's Workflow
chriscoyier
699
190k
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 は何を個人開発しているのか? 自動補完で単語帳作成 集めた単語を並べて ... スワイプで理解度チェック
実際に機能としてもだいたい 実装できていたのですが...
なんか飽きてしまった!😉
個人開発は技術を使うよりも モチベーションが大事!(唐突)
ありがとうございました!