Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
なぜ宣言的 UI は壊れにくいのか Zli × サイバーエージェント 合同LT 2024/07/14 @uenitty
Slide 2
Slide 2 text
宣言的 UI // オンかオフかを表す「状態」 const [isOn] = useState(false); true false
Slide 3
Slide 3 text
命令的 UI // クリックされたときに起こす「変化」 function handleClick() { // 見た目を変更する手続き 取っ手を左へ移動する(); 色をグレーに変更する(); }
Slide 4
Slide 4 text
宣言的 UI 取りうる「視覚状態」を記述する 命令的 UI 「変化」を細かく管理する 参考 : 宣言型 UI と命令型 UI の比較 https://ja.react.dev/learn/reacting-to-input-with-state
Slide 5
Slide 5 text
宣言的 UI は UI 要素や操作方法を追加・変更しても、他の既存実装が壊れにくい。 システムが将来的に大規模化したり複雑になっても壊れにくい。 参考 : 宣言型 UI と命令型 UI の比較 https://ja.react.dev/learn/reacting-to-input-with-state
Slide 6
Slide 6 text
なぜ宣言的 UI は壊れにくいのか
Slide 7
Slide 7 text
命令的 UI が壊れる様子 // クリックされたときに起こす「変化」 function handleClick() { // 見た目を変更する手続き 取っ手を左へ移動する(); 色をグレーに変更する(); }
Slide 8
Slide 8 text
命令的 UI が壊れる様子 // クリックされたときに起こす「変化」 function handleClick() { // 見た目を変更する手続き 取っ手を左へ移動する(); 色をグレーに変更する(); }
Slide 9
Slide 9 text
命令的 UI が壊れる様子 // クリックされたときに起こす「変化」 function handleClick() { // 見た目を変更する手続き 取っ手を左へ移動する(); 色をグレーに変更する(); }
Slide 10
Slide 10 text
命令的 UI が壊れる様子 // クリックされたときに起こす「変化」 function handleClick() { // 見た目を変更する手続き 取っ手を左へ移動する(); 色をグレーに変更する(); }
Slide 11
Slide 11 text
命令的 UI が壊れる様子 // クリックされたときに起こす「変化」 function handleClick() { // 見た目を変更する手続き 取っ手を左へ移動する(); 色をグレーに変更する(); }
Slide 12
Slide 12 text
命令的 UI が壊れる様子 // クリックされたときに起こす「変化」 function handleClick() { // 見た目を変更する手続き 取っ手を左へ移動する(); 色をグレーに変更する(); }
Slide 13
Slide 13 text
命令的 UI が壊れる様子 function handleClick() { if (isOn) { 取っ手を左へ移動する(); 色をグレーに変更する(); } else { 取っ手を右へ移動する(); 色をブルーに変更する(); } }
Slide 14
Slide 14 text
手続きは前の状態に依存する
Slide 15
Slide 15 text
手続きは前の状態に依存する 別の表現に言い換えると...
Slide 16
Slide 16 text
手続きは「モード」を発生させる モード 方法。型。 同じ入力でも他の設定の場合とは異なる結果を生じる設定。 モードがある = モーダル モードがない = モードレス
Slide 17
Slide 17 text
手続きは「モード」を発生させる if (isOn) { // オンのときモード 取っ手を左へ移動する(); // 取っ手を左へ移動したモード 色をグレーに変更する(); // 色をグレーに変更したモード }
Slide 18
Slide 18 text
モードは「モードエラー」を引き起こす 取っ手を左へ移動したモード内では 取っ手を左へ移動してはいけない → モードエラー
Slide 19
Slide 19 text
宣言的 UI はモードレス 前の状態に関わらず次の視覚状態が決まる モードエラーがない = 変更時に壊れにくい
Slide 20
Slide 20 text
モードレスにするコツは「名詞」起点 参考 : オブジェクト指向UIデザイン https://www.sociomedia.co.jp/10046
Slide 21
Slide 21 text
例:React フックは「名詞」起点を促す設計 const 名詞 = use名詞(); 動詞は固定なので、開発者は「起点にふさわしい名詞」を考えることになる 目当てになる有用な概念か? メンタルモデルと一致する粒度か? ※ 例えば useState は "State" を返すし、useEffect は "Effect" を返す ※ React フックは「オブジェクト(名詞)を宣言する」ものであって、「ロジック(動詞)を切り出す」ものでは決してない
Slide 22
Slide 22 text
まとめ モードレスならモードエラーはない 宣言的 UI はモードレスなので、変更時に壊れにくい モードレスにするには、名詞→動詞の順序で考える