Slide 1

Slide 1 text

Web Componentsを作れる
 デザインツールの開発 2022-08-17 PWA Night vol.42 @seanchas_t Macaron

Slide 2

Slide 2 text

@seanchas_t (しゃなはす) フリーランスエンジニア 以前はiOSアプリ/Qt/C++など Webフロントエンド、ちょっとUIデザイン フロントエンドは上から下まで (Wasm/WebGLなどからUIデザインまで) 全部やりたい派 個人開発: Web開発者向けのデザインツールを開発中

Slide 3

Slide 3 text

以前はiOSアプリ/Qt/C++など Webフロントエンド、ちょっとUIデザイン フロントエンドは上から下まで (Wasm/WebGLなどからUIデザインまで) 全部やりたい派 個人開発: Web開発者向けのデザインツールを開発中

Slide 4

Slide 4 text

Macaron https://macaron-elements.com/

Slide 5

Slide 5 text

Macaronってどんなツール? 背景とモチベーション 技術構成 今後の展望

Slide 6

Slide 6 text

Macaronってどんなツール? 背景とモチベーション 技術構成 今後の展望

Slide 7

Slide 7 text

VS Code Extension

Slide 8

Slide 8 text

Figmaに近いUIでWeb Componentsを作成 R ドラッグで要素追加(テキスト/四角3 R リサイズ/移G R サイドバーでスタイル変更 Macaronってどんなツール?

Slide 9

Slide 9 text

Macaronってどんなツール? 専用ファイル (.macaron) → JSに書き出し Vite/webpackでそのままimport import from export default macaronLoader ; { : [macaronLoader()], }; "@macaron-elements/loader-vite" plugins < = > import > < > > script script my-component my-component type "module" "./components.macaron";

Slide 10

Slide 10 text

Macaronってどんなツール? Figma Pluginで Figmaファイルから コピーペースト

Slide 11

Slide 11 text

https://macaron-elements.com/ Webサイトに動くデモあります

Slide 12

Slide 12 text

Macaronってどんなツール? 背景とモチベーション 技術構成 今後の展望

Slide 13

Slide 13 text

フロントエンドUI開発のペイン 脳内CSSパース/レンダリングがしんどい デザインを実装する単純作業が大変

Slide 14

Slide 14 text

Design as Code Code as Design @seanchas_tが考えた理想世界 デザインがそのままコードになる世界 コードがデザインとして振る舞える世界

Slide 15

Slide 15 text

@seanchas_tが考えた理想世界 デザインがそのままコードになる世F T 実装の単純作業がな2 T デザインと実装の乖離がない コードがデザインとして振る舞える世界
 ・何が実装されているのか一目でわかる

Slide 16

Slide 16 text

1つの解としての コードの一部をデザインツールで構築する仕組み → Macaron

Slide 17

Slide 17 text

Macaronってどんなツール? 背景とモチベーション 技術構成 今後の展望

Slide 18

Slide 18 text

エディタUI: 技術構成 UIフレームワーク React 状態管理 MobX

Slide 19

Slide 19 text

MobXの紹介 Reactは単なる状態色付け係に! オブジェクトのプロパティや配列などを observable(変更検知可能)にできる Reactなどのviewでそれらを参照すると 変更があったときに自動でviewを更新する仕組みを提供

Slide 20

Slide 20 text

class constructor this this this const new const { @observable secondsPassed = () { makeObservable( ) } increase() { .secondsPassed += } reset() { .secondsPassed = } } myTimer = Timer() TimerView = observer(({ timer }) => ( < = => timer.reset()}>Seconds passed: {timer.secondsPassed} > )) setInterval(() => { myTimer.increase() }, ) Timer 0 1 0 onClick 1000 button button {() 公式サイトより

Slide 21

Slide 21 text

MobXの良いところ + Macaronが採用した理由 b ReactなどのUIフレームワークに依存しなV b クラスベースで状態のモデリングができY b → 複雑なドメインロジックを持つアプリに最0 ) テストしやすV ) オブジェクト指向で設計できる

Slide 22

Slide 22 text

EditorState Document Component Element Text Element React UI MobX 状態モデル (概略) エディタUI: アーキテクチャ

Slide 23

Slide 23 text

VS Code Extension: アーキテクチャ VS Code Extension VS CodeやNodeのAPIに自由に アクセスできる ファイル (.macaron) ファイル (.macaron) Web View エディタUIを表示 Web View タブで表示 postMessageで通信 同期

Slide 24

Slide 24 text

VS Code Custom Editor API "contributes" "customEditors" "viewType" "displayName" "selector" "filenamePattern" : { : [ { : , : , : [ { : } ] } ] }, "macaron.macaronFile" "Macaron" "*.macaron" 指定した拡張子のファイルを開くと
 テキストエディタの代わりに webviewのエディタを表示させられる https://code.visualstudio.com/api/extension-guides/custom-editors

Slide 25

Slide 25 text

Macaronってどんなツール? 背景とモチベーション 技術構成 振り返りと今後の展望

Slide 26

Slide 26 text

技術的な成果 複雑GUIに対する知見がめっちゃ溜まった 自分でコードを書く開発のいいところ: プロダクトがうまく行ってもいかなくても技術が貯まる

Slide 27

Slide 27 text

リリースしてみたものの、 良い使い所が自分でも見つけられない… ちょっと試してみてその後使わないユーザが多そう →まずは自分で使い込めるプロダクトにしたい

Slide 28

Slide 28 text

Web Componentsを
 ビジュアルエディタの出力先にする弱点

Slide 29

Slide 29 text

React + Web Componentsの対応状況 ReactはWeb Componentsのサポート度がまだ低い https://custom-elements-everywhere.com/

Slide 30

Slide 30 text

React + Web Componentsの対応状況 RFC: Plan for custom element attributes/properties in React 19 #11347 https://github.com/facebook/react/issues/11347 Web Componentsの完全サポートは React 19までお預け

Slide 31

Slide 31 text

Web Componentsの弱点 F customized built-in element → Safariが未対" F (input/buttonとか には作れない) shadow rootが特定のタグにしか作れない input/buttonなどのスタイルを変えただけの コンポーネントが作りにくい

Slide 32

Slide 32 text

CSS界隈の新しい潮流

Slide 33

Slide 33 text

Utility-First な ライブラリ/フレームワークの台頭 などなど…

Slide 34

Slide 34 text

Utility-First (と言われる) ライブラリ/フレームワークの特徴 q CSSはHTML要素一つ一つに対しに記述する
 (インラインスタイルっぽいV q インラインスタイルより強I ‡ 省略記法で場所取らな` ‡ 擬似要素/擬似クラス/レスポンシブデザインに対応

Slide 35

Slide 35 text

Utility-First (と言われる) ライブラリ/フレームワークの特徴 D CSSはHTML要素一つ一つに対しに記述する
 (インラインスタイルっぽい3 D インラインスタイルより強† ‰ 省略記法で場所取らなq ‰ 擬似要素/擬似クラス/レスポンシブデザインに対応 Figmaとかのレイヤーっぽい
 ビジュアルエディタと相性が良さそう

Slide 36

Slide 36 text

React+Tailwindで書かれたコードを 直接いじれるツールを作る…? twitter.com/seanchas_t/status/1558032125987024896

Slide 37

Slide 37 text

ありがとうございました! もっと詳しい話は でもお話しできます! Meety