Web forms made easy (with formative)

21
Web forms made easy Ikuru K

Transcript of Web forms made easy (with formative)

Page 1: Web forms made easy (with formative)

Web forms made easyIkuru K

Page 2: Web forms made easy (with formative)

About Me

- Ikuru K- エンジニア @ サイボウズスタートアップス株式会社

- 2016 年 5 月〜- https://github.com/iku000888- https://twitter.com/iku000888

Page 3: Web forms made easy (with formative)

Web forms

Page 4: Web forms made easy (with formative)

Our Product

- 安否確認サービス 2 - https://anpi.cstap.com/anpi2.html

- ~100 web forms- バリエーション :

- 同じデータを受け取るが、見た目が異なる- 同じような見た目だが受け取るデータが異なる

Page 5: Web forms made easy (with formative)

Form の問題点- 機能と見た目の記述が混在する- データ型の記述が出来ない- バリデーションが記述出来ない

- バリデーション結果のフィードバックを統一的に書けない

Page 6: Web forms made easy (with formative)

見た目と機能の記述が混在する

Page 7: Web forms made easy (with formative)

見た目のための記述少しだけ見た目を変えたいときとかの再利用性。。。?

Page 8: Web forms made easy (with formative)

機能の記述- action- method- enctype- accept- accept-charset etc...- => 本質的に外見とは別物なので、同じ場所に書きたくない

Page 9: Web forms made easy (with formative)

フォームの項目にデータ型を記述出来ない- Http リクエストに送られるのは文字列- 数字なのか、日付なのかをパースする必要がある- =>DRY に済ませたい

Page 10: Web forms made easy (with formative)

バリデーションとエラーのフィードバック- 多種多様なやり方、ライブラリがある- ユーザーにどのようなフィードバックを返すかまで考慮してバリデーションを行う必要がある。

Page 11: Web forms made easy (with formative)

そこで Formative

- clj/cljs- https://github.com/jkk/formative- Original Author: Justin Kramer

Page 12: Web forms made easy (with formative)

マップとして記述する

Page 13: Web forms made easy (with formative)

レンダリング- formative.core/render-form- hiccup データを吐く- マルチメソッドで見た目とフォームの機能を分離- ユーザーが自由に見た目のレンダリングを拡張することが可能- Bootstrap style を同梱

Page 14: Web forms made easy (with formative)

項目にデータ型を指定できる

- フィールドを int, date, etc としてパース可能- マルチメソッドなので自由に拡張可能- Ring のリクエストマップを、フィールドのデータ型に基づいてパースできる

Page 15: Web forms made easy (with formative)

バリデーションを簡潔に記述できる

それぞれに独自のエラーメッセージを書くことも可能

:validations [[:required [:foo]] [:max-length 3 [:foo]] [:after #inst"2020" :date]]

Page 16: Web forms made easy (with formative)

バリデーション結果を元にエラーをレンダリング

Page 17: Web forms made easy (with formative)

使った感想- フォームを統一的に記述できて幸せ- エラーのレンダリング楽- 必要な場所では html をインラインで記述できて柔軟性があった- マップなので Clojure の関数で簡単に操作できる

- 「少しだけ違う」フォームを用意に記述できる

Page 18: Web forms made easy (with formative)

余談その 1

最近メンテナを引き受けた- 2014 年から放置されていた- cljx -> cljc- 新しい cljs だと動かない部分を修正- Pull Requests welcome!

Formativeのメンテナンス

Page 19: Web forms made easy (with formative)

余談その2Formative について話そうと Clojure/west のCFP に応募 

Page 20: Web forms made easy (with formative)

散った

- ちなみに 80 名くらい応募したらしい- 登壇者は 24 名

Page 21: Web forms made easy (with formative)

Thank you