めんどくさいフォーム

323 Views

November 26, 25

スライド概要

2024/05/26
CTOA若手エンジニアコミュニティ勉強会 #6にて発表

profile-image

エンジニア集会をやっています

シェア

またはPlayer版

埋め込む »CMSなどでJSが使えない場合

ダウンロード

関連スライド

各ページのテキスト
1.

CTOA若手エンジニアコミュニティ勉強会 #6 CTOA若手エンジニアコミュニティ勉強会 #6 https://engineer-meetup.com/ https://engineer-meetup.com/ Join me! めんどくさいフォーム めんどくさいフォーム エンジニア集会 代表 エンジニア集会 代表 慕狼ゆに 慕狼ゆに スライド撮影OK スライド撮影OK SNSアップOK SNSアップOK #エンジニア集会 #エンジニア集会

2.

自己紹介 慕狼 ゆに / しのがみ ゆに VR-SNSが大好き! VRChatプレイ時間9800時間 バーチャルでエンジニアが集まる技術コミュニティ 「エンジニア集会」の主催・運営 慕狼ゆに Shinogami Yuni 21卒の5年目Webエンジニア メインは、React x TS のフロントエンド中心 最近はFull-Stack TypeScript目指してNest.jsをやっている SNS X(Twitter): @yuni_shinogami

3.

みなさん一度は作ったことがあるはず

5.

Webフォーム

6.

Webフォーム Webエンジニアなら一度は作ったことがある Webフォーム

7.

Webフォームはめんどい Webエンジニアなら一度は作ったことがある Webフォーム めんどくさいフォームに遭遇したことが 一度や二度はあるのではないでしょうか?

8.

Webフォームはめんどい 複雑なWebシステムじゃなくても、 「めんどくさいフォーム」 に向き合う必要がある

9.

めんどくさいフォームの 向き合い方

10.

今回の前提 こういう技術選定をしていることが前提に話が進みます 言語:TypeScript FEライブラリ:React Fromライブラリ:React Hook Form Validation:Zod 個別の技術解説はこのスライドでは行いません

11.

今日話すこと めんどいフォームに 向き合っていくよ! めんどいフォームの何がめんどいのか めんどいフォームにどう立ち向かうか めんどいフォームについて考えるために やったこと

12.

今日話すこと 一つ目! めんどいフォームの何がめんどいのか めんどいフォームにどう立ち向かうか めんどいフォームについて考えるために やったこと

13.

今日話すこと めんどいフォームについて 何がめんどい? どう立ち向かうか 今回のためのリサーチ 1つ目!

14.

フォームがめんどくなる理由 フォームがめんどくなる理由・・・

15.

フォームがめんどくなる理由 フォームがめんどくなる理由・・・ 「動的」

16.

動的フォームはめんどい 例えば、こんな要件 「+」ボタンで増える入力フォーム 増えたフォームにもちゃんとValidationをかけてね フォームの入力値がhogehogeだったらこういう Validationをかけてね Radioボタンの選択肢は入力値を元にBEから選択肢 情報をもらって表示してね ※実際に私が趣味・仕事開発で遭遇した要件です

17.

動的フォームはめんどい まぁ、実装はできるけど・・・ めんどくさいなぁ・・・ では、何が面倒くさい?

18.

動的フォームはめんどい めんどくさい点1:コードが汚くなりがち フォームが増える&減るという仕様が入る時点で状態管理が 複雑になってしまう(仕様が膨らめば膨らむほどつらい) 値の持ち方を考えないと、handleSubmitをするタイミングで BEに情報を投げるためのロジックが生まれてしまう (どこでMappingするか、値の持ち方をどうきれいにするか 考えるのがめんどい) 保守性が低い実装になって触りたくないコードが生まれる

19.

動的フォームはめんどい めんどくさい点2:動的Validationがめんどい Validation schemaで「動的にフォームが増える・減る」こと を想定しないといけない。簡単なやり方ができない

20.

動的フォームはめんどい めんどくさい点1:コードが汚くなりがち めんどくさい点2:動的Validationがめんどい 変なことをやろうとして、変なロジックが至る所に 増えてしまう

21.

今日話すこと 二つ目! めんどいフォームの何がめんどいのか めんどいフォームにどう立ち向かうか めんどいフォームについて考えるために やったこと

22.

めんどいフォームに立ち向かうためのTips 対処法1:増えるフォームは、配列で管理すべし React Hook Formでは、useFieldArrayという配列でフ ォーム値を管理するHooksが用意されています Formikでは、FieldArrayがありそう 自分が使っているフォームライブラリに「配列で情報 を管理する機能」がないかどうか探してみよう BEに情報を投げるためにmappingは必要かも・・・? (BEの仕様しだい)

23.

めんどいフォームに立ち向かうためのTips 対処法2:動的Validationは、型を生成する関数をメモ化 し、型作りを頑張る 例:BEから受け取ったObjectを配列にして、key: stringのZod Schemaを作る実装 Zod Schemaを作る関数をメモ化して、BEからの情報が変わる たびにSchemaを再生成する

24.

めんどいフォームに立ち向かうためのTips 対処法1:増えるフォームは、配列で管理すべし 対処法2:動的Validationは、型を生成する関数をメモ化 し、型作りを頑張る 使っているFormライブラリに、便利機能がないか探して みよう。validationはsuperRefine()という逃げ道がある 型で頑張れ!!!!!!!

25.

今日話すこと 三つ目! めんどいフォームの何がめんどいのか めんどいフォームにどう立ち向かうか めんどいフォームについて考えるために やったこと

26.

考えるためにやったこと 簡単な動的フォームの知見はZenなどで見つけたが、 動的フォーム x 動的Validationに関する記事は上手く 見つけられなかった・・・

27.

考えるためにやったこと ちょうど、Claude4がリリースされたので使ってみるか

28.

生成AIにベストプラクティスを考えてもらう 生成させたFormがこちら Githubで公開しています

29.

生成AIにベストプラクティスを考えてもらう 生成させたFormの要件 必須入力のFormはValidationする 入力フォームは追加・削除をするこ とができる JSONを入力すると、そこから Radioボタンの選択肢を作る Githubで公開しています

30.

生成AIにベストプラクティスを考えてもらう だいぶ良いなと感じた学び方ができた 一度実装で悩む 悩んだ実装の要件をLLMに生成させる (単純に生成させるだけだと微妙なので、適度に修正する) LLMが生成したコードを読んで、使えそうなTipsを学ぶ

31.

めんどくさいフォーム まとめ 1. 動的フォームはめんどくさい 2. 動的フォームを乗りこなす術はある 3. めんどくさい実装をLLMに生成させて、自分の考えた実装との 差分を見ると、学びが捗る

32.

2024年度の成果 めんどくさいフォームに 向き合った

33.

めんどくさい実装に いい感じに向き合っていきましょう

34.

おまけ 欲張ってみた

35.

おまけ 欲張ってみた

36.

おまけ 欲張ってみた 要件がバチクソに膨らんだ 壊れたフォームができた 直すのめんどいので放置

37.

おまけ 欲張ってみた Githubで公開しています。oni branchを立ち上げると、 真の地獄フォームを見ることができます(壊れています)

38.

バーチャル空間を中心に エンジニアが集まり 技術交流を行う がコンセプトの技術者コミュニティです 興味があったら覗いてみてね