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
ローコードSaaSのUXを向上させるためのTypeScript 2024-11-16 TSKaigi Kansai 2024 株式会社ベースマキナ ⼤⻄太郎(taro)
Slide 2
Slide 2 text
自己紹介 ● ⼤⻄太郎 ● taro( @taroro_tarotaro) ● 株式会社ベースマキナのソフトウェアエンジニア ● ローコードで管理画⾯を作れるサービスを作ってます ⾃⼰紹介
Slide 3
Slide 3 text
⾃⼰紹介 ベースマキナでのTSの活⽤事例の話をします!
Slide 4
Slide 4 text
UXを向上させるためのTypeScriptとは?
Slide 5
Slide 5 text
UXを向上させるための TypeScriptとは? ● ベースマキナはローコードで管理画⾯を作成するサービス ● ⼀部ユーザーがJavaScriptで設定を書く機能が存在する UXを向上させるためのTypeScriptとは?
Slide 6
Slide 6 text
UXを向上させるための TypeScriptとは? UXを向上させるためのTypeScriptとは? JavaScriptで加⼯
Slide 7
Slide 7 text
UXを向上させるためのTypeScriptとは? アクション:APIやSQLなどを呼び出す処理 JavaScriptでワークフローを作成できる機能
Slide 8
Slide 8 text
UXを向上させるための TypeScriptとは? コードの⼊⼒や設定を楽にする機能の例 ● 値や関数の型がわかる ● ⼊⼒補完が効く ● 誤った関数の使い⽅を間違えてしまった時にバリデーションが効く ● エラーメッセージがわかりやすい →こういったUX改善のためにどのようにTSの機能やライブラリを使っているかの話 UXを向上させるためのTypeScriptとは?
Slide 9
Slide 9 text
セッションの流れ ● JavaScriptのコードエディターをTypeScriptの機能で便利にする ● JavaScriptの関数の引数の値が型通りかをバリデーションする ● まとめ 各話題は、やりたいことに対してどうやって実現したかの流れで進みます。 ぜひやりたいことのところで、みなさんならどうするか考えてみてください! 僕らとは違う⽅法やもっとよくできる点などあれば懇親会などで教えてください! セッションの流れ
Slide 10
Slide 10 text
JavaScriptのコードエディターを TypeScriptの機能で便利にする
Slide 11
Slide 11 text
JavaScriptのコードエディターを TypeScriptの機能で便利にする ● どんなJavaScriptのコードを設定する機能なのか? ● Monaco Editor ● default exportされる関数の引数にフォームの状態から⽣成した型をつける ● 組み込み関数に型をつける ● ユーザーが作成したデータを元に型をつける JavaScriptのコードエディターをTypeScriptの機能で便利にする
Slide 12
Slide 12 text
どんなJavaScriptのコードを設定する機能なのか?
Slide 13
Slide 13 text
どんなJavaScriptのコードを設定する機能なのか? JavaScriptアクション:JavaScriptでワークフローを作成できる機能 JavaScriptのコードエディターをTypeScriptの機能で便利にする ワークフローの処理
Slide 14
Slide 14 text
どんなJavaScriptのコードを設定する機能なのか? JavaScriptアクション:JavaScriptでワークフローを作成できる機能 JavaScriptのコードエディターをTypeScriptの機能で便利にする
Slide 15
Slide 15 text
JavaScriptのコードエディターをTypeScriptの機能で便利にする パラメーター: ワークフローの実⾏時のフォームの⼊⼒値 パラメーターはJavaScriptのコードと⼀緒に設定する
Slide 16
Slide 16 text
どんなJavaScriptのコードを設定する機能なのか? JavaScriptのコードエディターをTypeScriptの機能で便利にする 組み込み関数
Slide 17
Slide 17 text
Monaco Editor
Slide 18
Slide 18 text
Monaco Editor ● Microsoftが開発している ● ブラウザ上で動作するコードエディター JavaScriptのコードエディターをTypeScriptの機能で便利にする https://github.com/microsoft/monaco-editor
Slide 19
Slide 19 text
Monaco Editor Monaco Editorを使っているサービス ● TS Playground ● Google CloudのBigQueryのエディター JavaScriptのコードエディターをTypeScriptの機能で便利にする
Slide 20
Slide 20 text
Monaco Editor 今回のセッションにおいては、VSCodeと同様に ● カーソルのホバーで型情報が表⽰される ● 型による補完が効く エディターを使⽤しているという理解でOK! JavaScriptのコードエディターをTypeScriptの機能で便利にする
Slide 21
Slide 21 text
default exportされる関数の引数に フォームの状態から⽣成した型をつける
Slide 22
Slide 22 text
default exportされる関数の引数にフォームの状態から生成した型をつける JavaScriptのコードエディターを TypeScriptの機能で便利にする 引数に型をつけたい
Slide 23
Slide 23 text
default exportされる関数の引数にフォームの状態から生成した型をつける JavaScriptのコードエディターを TypeScriptの機能で便利にする フォームの設定内容から型が決まる
Slide 24
Slide 24 text
default exportされる関数の引数にフォームの状態から生成した型をつける JavaScriptのコードエディターを TypeScriptの機能で便利にする 型にもageが追加される age(数値)を追加
Slide 25
Slide 25 text
JavaScriptのコードエディターを TypeScriptの機能で便利にする JavaScriptの関数にどうやって型をつけるか?
Slide 26
Slide 26 text
default exportされる関数の引数にフォームの状態から生成した型をつける JavaScriptのコードエディターを TypeScriptの機能で便利にする JSDocで型をつける
Slide 27
Slide 27 text
default exportされる関数の引数にフォームの状態から生成した型をつける JavaScriptのコードエディターを TypeScriptの機能で便利にする https://nextjs.org/docs/app/api-reference/next-config-js https://vite.dev/config
Slide 28
Slide 28 text
default exportされる関数の引数にフォームの状態から生成した型をつける JavaScriptのコードエディターを TypeScriptの機能で便利にする
Slide 29
Slide 29 text
default exportされる関数の引数にフォームの状態から生成した型をつける JavaScriptのコードエディターを TypeScriptの機能で便利にする importしたHandler型をつける
Slide 30
Slide 30 text
default exportされる関数の引数にフォームの状態から生成した型をつける JavaScriptのコードエディターを TypeScriptの機能で便利にする
Slide 31
Slide 31 text
default exportされる関数の引数にフォームの状態から生成した型をつける JavaScriptのコードエディターを TypeScriptの機能で便利にする
Slide 32
Slide 32 text
JavaScriptのコードエディターを TypeScriptの機能で便利にする https://microsoft.github.io/monaco-editor/typedoc/interfaces/languages.typescript.LanguageServiceDefaults.html#addExtraLib
Slide 33
Slide 33 text
default exportされる関数の引数にフォームの状態から生成した型をつける JavaScriptのコードエディターを TypeScriptの機能で便利にする
Slide 34
Slide 34 text
default exportされる関数の引数にフォームの状態から生成した型をつける JavaScriptのコードエディターを TypeScriptの機能で便利にする フォームの設定内容から型を⽣成する
Slide 35
Slide 35 text
default exportされる関数の引数にフォームの状態から生成した型をつける JavaScriptのコードエディターを TypeScriptの機能で便利にする 泥臭く⽂字列結合で型を⽣成
Slide 36
Slide 36 text
default exportされる関数の引数にフォームの状態から生成した型をつける JavaScriptのコードエディターを TypeScriptの機能で便利にする
Slide 37
Slide 37 text
JavaScriptのコードエディターを TypeScriptの機能で便利にする フォームの状態に応じた型が効くようになった!🎉
Slide 38
Slide 38 text
組み込み関数に型をつける
Slide 39
Slide 39 text
組み込み関数に型をつける JavaScriptのコードエディターを TypeScriptの機能で便利にする 組み込み関数
Slide 40
Slide 40 text
組み込み関数に型をつける JavaScriptのコードエディターを TypeScriptの機能で便利にする
Slide 41
Slide 41 text
組み込み関数に型をつける JavaScriptのコードエディターを TypeScriptの機能で便利にする
Slide 42
Slide 42 text
組み込み関数に型をつける JavaScriptのコードエディターを TypeScriptの機能で便利にする
Slide 43
Slide 43 text
ユーザーが作成したデータを元に型をつける
Slide 44
Slide 44 text
ユーザーが作成したデータを元に型をつける JavaScriptのコードエディターを TypeScriptの機能で便利にする ユーザー体験的に⾜りない点がある
Slide 45
Slide 45 text
ユーザーが作成したデータを元に型をつける JavaScriptのコードエディターを TypeScriptの機能で便利にする ユーザーが作成したアクションのデータに基づいて渡せる値に制限がある
Slide 46
Slide 46 text
ユーザーが作成したデータを元に型をつける JavaScriptのコードエディターを TypeScriptの機能で便利にする アクションのIDまたは識別⼦ ● ID: ⾃動⽣成のユニーク値 ● 識別⼦: 任意に設定できるユニーク値
Slide 47
Slide 47 text
ユーザーが作成したデータを元に型をつける JavaScriptのコードエディターを TypeScriptの機能で便利にする
Slide 48
Slide 48 text
ユーザーが作成したデータを元に型をつける JavaScriptのコードエディターを TypeScriptの機能で便利にする ● ⼊⼒ミスを防げる ● ID/識別⼦を確認する⼿間を減らす
Slide 49
Slide 49 text
ユーザーが作成したデータを元に型をつける JavaScriptのコードエディターを TypeScriptの機能で便利にする アクションのパラメーター ● キー(string): パラメーターの名前 ● 値(any): パラメーターの値
Slide 50
Slide 50 text
ユーザーが作成したデータを元に型をつける JavaScriptのコードエディターを TypeScriptの機能で便利にする executeActionで呼び出している アクション(create-user)の パラメータの設定
Slide 51
Slide 51 text
ユーザーが作成したデータを元に型をつける JavaScriptのコードエディターを TypeScriptの機能で便利にする
Slide 52
Slide 52 text
ユーザーが作成したデータを元に型をつける JavaScriptのコードエディターを TypeScriptの機能で便利にする 第1引数のID/識別⼦を⼊⼒すると、第2引数のパラメーターの型が推論される! ● ⼊⼒ミスを防げる ● アクションの設定を確認する⼿間を減らす
Slide 53
Slide 53 text
ユーザーが作成したデータを元に型をつける JavaScriptのコードエディターを TypeScriptの機能で便利にする
Slide 54
Slide 54 text
ユーザーが作成したデータを元に型をつける JavaScriptのコードエディターを TypeScriptの機能で便利にする
Slide 55
Slide 55 text
ユーザーが作成したデータを元に型をつける JavaScriptのコードエディターを TypeScriptの機能で便利にする
Slide 56
Slide 56 text
ユーザーが作成したデータを元に型をつける JavaScriptのコードエディターを TypeScriptの機能で便利にする
Slide 57
Slide 57 text
ユーザーが作成したデータを元に型をつける JavaScriptのコードエディターを TypeScriptの機能で便利にする
Slide 58
Slide 58 text
ユーザーが作成したデータを元に型をつける JavaScriptのコードエディターを TypeScriptの機能で便利にする データベースに保存されているデータから型を⽣成する ● バックエンドとの通信: GraphQL ● データ取得&状態管理ライブラリ: Apollo Client
Slide 59
Slide 59 text
ユーザーが作成したデータを元に型をつける JavaScriptのコードエディターを TypeScriptの機能で便利にする
Slide 60
Slide 60 text
ユーザーが作成したデータを元に型をつける その他、型に影響するパラメータの設定 ● ⼊⼒が必須でなければオプショナルにする ● 必須でも初期値があればオプショナルにする ● パラメータが存在しない場合は第2引数をneverにする JavaScriptのコードエディターを TypeScriptの機能で便利にする
Slide 61
Slide 61 text
JavaScriptのコードエディターを TypeScriptの機能で便利にする ユーザーが作成したデータに応じた型が効くようになった!🎉
Slide 62
Slide 62 text
エディターの話のまとめ
Slide 63
Slide 63 text
まとめ ● JSDocの@typeでTypeScriptのようにJavaScriptに型をつけられる ● ローコードサービスでは、フォームの状態やデータベースの値から動的に型を ⽣成し、型情報やエディターの補完でユーザー体験を向上させている JavaScriptのコードエディターを TypeScriptの機能で便利にする
Slide 64
Slide 64 text
JavaScriptの関数の引数の値が型通りかを バリデーションする
Slide 65
Slide 65 text
JavaScriptの関数の引数の値が型通りかをバリデーションする ● 組み込み関数のバリデーションとは? ● JavaScriptのコードと組み込み関数が実⾏される流れ ● 組み込み関数の引数が型通りの値かどうかのバリデーション ● 可変⻑引数のバリデーション ● 省略可能な引数のバリデーション ● エラーメッセージをわかりやすくする JavaScriptの関数の引数の値が型通りかをバリデーションする
Slide 66
Slide 66 text
組み込み関数のバリデーションとは?
Slide 67
Slide 67 text
JavaScriptの関数の引数の値が型通りかをバリデーションする JavaScriptの関数の引数の値が型通りかをバリデーションする エディター上で型がついていてもあくまで実⾏するのはJavaScript
Slide 68
Slide 68 text
JavaScriptの関数の引数の値が型通りかをバリデーションする JavaScriptの関数の引数の値が型通りかをバリデーションする stringの引数に数値を渡してしまっている
Slide 69
Slide 69 text
JavaScriptのコードと組み込み関数が実⾏される流れ
Slide 70
Slide 70 text
JavaScriptのコードと組み込み関数が実行される流れ JavaScriptの関数の引数の値が型通りかをバリデーションする Web Frontend Main Backend JSExecutor
Slide 71
Slide 71 text
JavaScriptのコードと組み込み関数が実行される流れ JavaScriptの関数の引数の値が型通りかをバリデーションする Web Frontend Main Backend JSExecutor 画⾯のフォームから ワークフローを実⾏
Slide 72
Slide 72 text
JavaScriptのコードと組み込み関数が実行される流れ JavaScriptの関数の引数の値が型通りかをバリデーションする Web Frontend Main Backend JSExecutor DBからJSコードを 取得して送信
Slide 73
Slide 73 text
JavaScriptのコードと組み込み関数が実行される流れ JavaScriptの関数の引数の値が型通りかをバリデーションする Web Frontend Main Backend JSExecutor モジュールなどの後に default exportされた関数を 実⾏
Slide 74
Slide 74 text
JavaScriptのコードと組み込み関数が実行される流れ JavaScriptの関数の引数の値が型通りかをバリデーションする Web Frontend Main Backend JSExecutor 実⾏結果を返す 結果を返す
Slide 75
Slide 75 text
JavaScriptの関数の引数の値が型通りかをバリデーションする 組み込み関数はTypeScriptで実装
Slide 76
Slide 76 text
組み込み関数の引数が型通りの値かどうかのバリデーション
Slide 77
Slide 77 text
組み込み関数の引数が型通りの値かどうかのバリデーション JavaScriptの関数の引数の値が型通りかをバリデーションする ● 処理に⼊る前に、引数が型通りの値かどうかを検証したい ● 組み込み関数は複数あり今後も増えるので共通のバリデーション機構にしたい ● できるだけただのTypeScriptの関数と近い体験で実装できるようにしたい
Slide 78
Slide 78 text
組み込み関数の引数が型通りの値かどうかのバリデーション JavaScriptの関数の引数の値が型通りかをバリデーションする 組み込み関数 引数をバリデーションする zodのスキーマ
Slide 79
Slide 79 text
組み込み関数の引数が型通りの値かどうかのバリデーション JavaScriptの関数の引数の値が型通りかをバリデーションする https://zod.dev
Slide 80
Slide 80 text
組み込み関数の引数が型通りの値かどうかのバリデーション JavaScriptの関数の引数の値が型通りかをバリデーションする バリデーション後の値の型を推論できる
Slide 81
Slide 81 text
JavaScriptの関数の引数の値が型通りかをバリデーションする
Slide 82
Slide 82 text
JavaScriptの関数の引数の値が型通りかをバリデーションする
Slide 83
Slide 83 text
JavaScriptの関数の引数の値が型通りかをバリデーションする
Slide 84
Slide 84 text
JavaScriptの関数の引数の値が型通りかをバリデーションする
Slide 85
Slide 85 text
JavaScriptの関数の引数の値が型通りかをバリデーションする
Slide 86
Slide 86 text
JavaScriptの関数の引数の値が型通りかをバリデーションする stringの引数に数値を渡してしまっている
Slide 87
Slide 87 text
JavaScriptの関数の引数の値が型通りかをバリデーションする stringの引数に数値を渡してしまっている エラーメッセージは、 終盤にわかりやすくします!
Slide 88
Slide 88 text
可変⻑引数のバリデーション
Slide 89
Slide 89 text
可変長引数のバリデーション JavaScriptの関数の引数の値が型通りかをバリデーションする ※この組み込み関数はサンプルのため実在しません
Slide 90
Slide 90 text
JavaScriptの関数の引数の値が型通りかをバリデーションする
Slide 91
Slide 91 text
JavaScriptの関数の引数の値が型通りかをバリデーションする 可変長引数のバリデーション
Slide 92
Slide 92 text
JavaScriptの関数の引数の値が型通りかをバリデーションする
Slide 93
Slide 93 text
省略可能な引数のバリデーション
Slide 94
Slide 94 text
JavaScriptの関数の引数の値が型通りかをバリデーションする zodのスキーマで 省略可能な引数をどう表現するか?
Slide 95
Slide 95 text
JavaScriptの関数の引数の値が型通りかをバリデーションする 可変⻑引数にする…?
Slide 96
Slide 96 text
JavaScriptの関数の引数の値が型通りかをバリデーションする
Slide 97
Slide 97 text
省略可能な引数のバリデーション JavaScriptの関数の引数の値が型通りかをバリデーションする
Slide 98
Slide 98 text
JavaScriptの関数の引数の値が型通りかをバリデーションする 第3引数を省略
Slide 99
Slide 99 text
JavaScriptの関数の引数の値が型通りかをバリデーションする 複数のスキーマで 省略可能な引数を作れるようにした
Slide 100
Slide 100 text
省略可能な引数のバリデーション JavaScriptの関数の引数の値が型通りかをバリデーションする スキーマに対応した関数のユニオン型が推論される
Slide 101
Slide 101 text
JavaScriptの関数の引数の値が型通りかをバリデーションする
Slide 102
Slide 102 text
JavaScriptの関数の引数の値が型通りかをバリデーションする Mapped Typesで、スキーマの配列を関数のユニオン型に変換
Slide 103
Slide 103 text
JavaScriptの関数の引数の値が型通りかをバリデーションする
Slide 104
Slide 104 text
JavaScriptの関数の引数の値が型通りかをバリデーションする スキーマの配列のインデックス: そのスキーマの型を使った関数
Slide 105
Slide 105 text
JavaScriptの関数の引数の値が型通りかをバリデーションする スキーマの配列から、各スキーマを使った関数のユニオン型に変換できる
Slide 106
Slide 106 text
JavaScriptの関数の引数の値が型通りかをバリデーションする 引数の値と 同じ⻑さのスキーマを探す
Slide 107
Slide 107 text
JavaScriptの関数の引数の値が型通りかをバリデーションする 同じ⻑さのスキーマで バリデーション
Slide 108
Slide 108 text
JavaScriptの関数の引数の値が型通りかをバリデーションする 最⻑のスキーマで バリデーション
Slide 109
Slide 109 text
JavaScriptの関数の引数の値が型通りかをバリデーションする 省略可能な引数も 表現できるようになった!
Slide 110
Slide 110 text
JavaScriptの関数の引数の値が型通りかをバリデーションする
Slide 111
Slide 111 text
JavaScriptの関数の引数の値が型通りかをバリデーションする
Slide 112
Slide 112 text
JavaScriptの関数の引数の値が型通りかをバリデーションする 同じ⻑さの異なるスキーマにも対応
Slide 113
Slide 113 text
JavaScriptの関数の引数の値が型通りかをバリデーションする インターセクション型に変更が必要
Slide 114
Slide 114 text
エラーメッセージをわかりやすくする
Slide 115
Slide 115 text
JavaScriptの関数の引数の値が型通りかをバリデーションする stringの引数に数値を渡してしまっている
Slide 116
Slide 116 text
JavaScriptの関数の引数の値が型通りかをバリデーションする
Slide 117
Slide 117 text
エラーメッセージをわかりやすくする JavaScriptの関数の引数の値が型通りかをバリデーションする
Slide 118
Slide 118 text
エラーメッセージをわかりやすくする JavaScriptの関数の引数の値が型通りかをバリデーションする ただ全てのメソッドの全てエラータイプに設定するのは⾮現実的…
Slide 119
Slide 119 text
JavaScriptの関数の引数の値が型通りかをバリデーションする https://github.com/aiji42/zod-i18n
Slide 120
Slide 120 text
JavaScriptの関数の引数の値が型通りかをバリデーションする
Slide 121
Slide 121 text
JavaScriptの関数の引数の値が型通りかをバリデーションする
Slide 122
Slide 122 text
JavaScriptの関数の引数の値が型通りかをバリデーションする satisfiesは本当に便利…
Slide 123
Slide 123 text
JavaScriptの関数の引数の値が型通りかをバリデーションする pathでエラーの位置がわかる
Slide 124
Slide 124 text
JavaScriptの関数の引数の値が型通りかをバリデーションする 泥臭く⽂字列結合でエラーメッセージを⽣成
Slide 125
Slide 125 text
JavaScriptの関数の引数の値が型通りかをバリデーションする エラーメッセージがわかりやすくなった!🎉
Slide 126
Slide 126 text
バリデーションの話のまとめ
Slide 127
Slide 127 text
まとめ JavaScriptのコードエディターを TypeScriptの機能で便利にする ● zodのtupleを使うとJSの関数の引数が型通りかをバリデーションできる ● TypeScriptの柔軟な型の表現⼒と型推論のおかげで、通常のTSの関数を実装す るような体験で、バリデーションが適⽤された組み込み関数を実装できる
Slide 128
Slide 128 text
最後に
Slide 129
Slide 129 text
最後に 最後に ● ベースマキナではエディターの補完やバリデーションで、ユーザー体験のため にTypeScriptを活⽤している ● ユーザーにJSを書いてもらう機能をTSを活⽤して作るのは⾯⽩い ● 最終的には泥臭い実装で型やエラーメッセージを⽣成している🔥 泥臭い部分も含めてローコードサービス特有のTSを使った開発はとても⾯⽩い! (ベースマキナのブースもあるので、ぜひお越しください!)
Slide 130
Slide 130 text
ありがとうございました!