SlideShare ist ein Scribd-Unternehmen logo
1 von 21
Web forms made easy
Ikuru K
About Me
- Ikuru K
- エンジニア@サイボウズスタートアップス株式会社
- 2016年5月〜
- https://github.com/iku000888
- https://twitter.com/iku000888
Web forms
Our Product
- 安否確認サービス2
- https://anpi.cstap.com/anpi2.html
- ~100 web forms
- バリエーション:
- 同じデータを受け取るが、見た目が異なる
- 同じような見た目だが受け取るデータが異なる
Formの問題点
- 機能と見た目の記述が混在する
- データ型の記述が出来ない
- バリデーションが記述出来ない
- バリデーション結果のフィードバックを統
一的に書けない
見た目と機能の記述が混在する
見た目のための記述
少しだけ見た目を変えたい
ときとかの再利用性。。。
?
機能の記述
- action
- method
- enctype
- accept
- accept-charset etc...
- => 本質的に外見とは別物なので、同じ場所に
書きたくない
フォームの項目にデータ型を記述出来ない
- Httpリクエストに送られるのは文字列
- 数字なのか、日付なのかをパースする必要が
ある
- =>DRYに済ませたい
バリデーションとエラーのフィードバック
- 多種多様なやり方、ライブラリがある
- ユーザーにどのようなフィードバックを返す
かまで考慮してバリデーションを行う必要が
ある。
そこでFormative
- clj/cljs
- https://github.com/jkk/formative
- Original Author: Justin Kramer
マップとして記述する
レンダリング
- formative.core/render-form
- hiccupデータを吐く
- マルチメソッドで見た目とフォームの機能を
分離
- ユーザーが自由に見た目のレンダリングを拡
張することが可能
- Bootstrap styleを同梱
項目にデータ型を指定できる
- フィールドをint, date, etc としてパー
ス可能
- マルチメソッドなので自由に拡張可能
- Ringのリクエストマップを、フィール
ドのデータ型に基づいてパースできる
バリデーションを簡潔に記述できる
それぞれに独自のエラーメッセージを書くことも可能
:validations [[:required [:foo]]
[:max-length 3 [:foo]]
[:after #inst"2020" :date]]
バリデーション結果を元にエラーをレンダリング
使った感想
- フォームを統一的に記述できて幸せ
- エラーのレンダリング楽
- 必要な場所ではhtmlをインラインで記述でき
て柔軟性があった
- マップなのでClojureの関数で簡単に操作でき
る
- 「少しだけ違う」フォームを用意に記述で
きる
余談その1
最近メンテナを引き受けた
- 2014年から放置されていた
- cljx -> cljc
- 新しいcljsだと動かない部分を
修正
- Pull Requests welcome!
Formativeのメンテナンス
余談その2
Formativeについて話そうとClojure/westのCFPに
応募
散った
- ちなみに80名くらい
応募したらしい
- 登壇者は24名
Thank you

Weitere ähnliche Inhalte

Andere mochten auch

KEPASIFIKAN Solomon island
KEPASIFIKAN Solomon island KEPASIFIKAN Solomon island
KEPASIFIKAN Solomon island INDRI KARUNDENG
 
Alzheimers 101for families
Alzheimers 101for familiesAlzheimers 101for families
Alzheimers 101for familiesalz2011
 
Guía ii los seres vivos y sus características-
Guía ii   los  seres  vivos  y  sus  características-Guía ii   los  seres  vivos  y  sus  características-
Guía ii los seres vivos y sus características-Giuliana Tinoco
 
А.В. Мастепанов - О диверсификации экспортных поставок российского природного...
А.В. Мастепанов - О диверсификации экспортных поставок российского природного...А.В. Мастепанов - О диверсификации экспортных поставок российского природного...
А.В. Мастепанов - О диверсификации экспортных поставок российского природного...Moscow School of Economics (MSE MSU)
 
El grupo nominal en inglés.
El grupo nominal en inglés.El grupo nominal en inglés.
El grupo nominal en inglés.claudiadachary
 

Andere mochten auch (6)

KEPASIFIKAN Solomon island
KEPASIFIKAN Solomon island KEPASIFIKAN Solomon island
KEPASIFIKAN Solomon island
 
Alzheimers 101for families
Alzheimers 101for familiesAlzheimers 101for families
Alzheimers 101for families
 
Guía ii los seres vivos y sus características-
Guía ii   los  seres  vivos  y  sus  características-Guía ii   los  seres  vivos  y  sus  características-
Guía ii los seres vivos y sus características-
 
A revolução inglesa
A revolução inglesaA revolução inglesa
A revolução inglesa
 
А.В. Мастепанов - О диверсификации экспортных поставок российского природного...
А.В. Мастепанов - О диверсификации экспортных поставок российского природного...А.В. Мастепанов - О диверсификации экспортных поставок российского природного...
А.В. Мастепанов - О диверсификации экспортных поставок российского природного...
 
El grupo nominal en inglés.
El grupo nominal en inglés.El grupo nominal en inglés.
El grupo nominal en inglés.
 

Ähnlich wie Web forms made easy (with formative)

Power Appsで Excel関数を利用する3つの方法
Power Appsで Excel関数を利用する3つの方法Power Appsで Excel関数を利用する3つの方法
Power Appsで Excel関数を利用する3つの方法Nagao Hiroaki
 
Excel でパケット分析 - グラフ化
Excel でパケット分析 - グラフ化Excel でパケット分析 - グラフ化
Excel でパケット分析 - グラフ化彰 村地
 
ノンコーディングでここまでできる!LINE BOT を作ってみよう!
ノンコーディングでここまでできる!LINE BOT を作ってみよう!ノンコーディングでここまでできる!LINE BOT を作ってみよう!
ノンコーディングでここまでできる!LINE BOT を作ってみよう!典子 松本
 
[勉強会資料] Excel + SharePoint + Power Platform によるローン返済シミュレーションアプリ開発
[勉強会資料] Excel + SharePoint + Power Platform によるローン返済シミュレーションアプリ開発[勉強会資料] Excel + SharePoint + Power Platform によるローン返済シミュレーションアプリ開発
[勉強会資料] Excel + SharePoint + Power Platform によるローン返済シミュレーションアプリ開発Ai Hirano
 
PowerShell と .Net 使った SharePoint Online の管理手法
PowerShell と .Net 使った SharePoint Online の管理手法PowerShell と .Net 使った SharePoint Online の管理手法
PowerShell と .Net 使った SharePoint Online の管理手法Kosuke Kuromiya
 
次期Visioのご紹介
次期Visioのご紹介次期Visioのご紹介
次期Visioのご紹介kumo2010
 
120331 silverlight5新機能早めぐり
120331 silverlight5新機能早めぐり120331 silverlight5新機能早めぐり
120331 silverlight5新機能早めぐりTakayoshi Tanaka
 

Ähnlich wie Web forms made easy (with formative) (8)

Power Appsで Excel関数を利用する3つの方法
Power Appsで Excel関数を利用する3つの方法Power Appsで Excel関数を利用する3つの方法
Power Appsで Excel関数を利用する3つの方法
 
Excel でパケット分析 - グラフ化
Excel でパケット分析 - グラフ化Excel でパケット分析 - グラフ化
Excel でパケット分析 - グラフ化
 
ノンコーディングでここまでできる!LINE BOT を作ってみよう!
ノンコーディングでここまでできる!LINE BOT を作ってみよう!ノンコーディングでここまでできる!LINE BOT を作ってみよう!
ノンコーディングでここまでできる!LINE BOT を作ってみよう!
 
Webteko 20090925
Webteko 20090925Webteko 20090925
Webteko 20090925
 
[勉強会資料] Excel + SharePoint + Power Platform によるローン返済シミュレーションアプリ開発
[勉強会資料] Excel + SharePoint + Power Platform によるローン返済シミュレーションアプリ開発[勉強会資料] Excel + SharePoint + Power Platform によるローン返済シミュレーションアプリ開発
[勉強会資料] Excel + SharePoint + Power Platform によるローン返済シミュレーションアプリ開発
 
PowerShell と .Net 使った SharePoint Online の管理手法
PowerShell と .Net 使った SharePoint Online の管理手法PowerShell と .Net 使った SharePoint Online の管理手法
PowerShell と .Net 使った SharePoint Online の管理手法
 
次期Visioのご紹介
次期Visioのご紹介次期Visioのご紹介
次期Visioのご紹介
 
120331 silverlight5新機能早めぐり
120331 silverlight5新機能早めぐり120331 silverlight5新機能早めぐり
120331 silverlight5新機能早めぐり
 

Mehr von Ikuru Kanuma

Kukutei shinkoku with Clojure
Kukutei shinkoku with ClojureKukutei shinkoku with Clojure
Kukutei shinkoku with ClojureIkuru Kanuma
 
Locarise,reagent and JavaScript Libraries
Locarise,reagent and JavaScript LibrariesLocarise,reagent and JavaScript Libraries
Locarise,reagent and JavaScript LibrariesIkuru Kanuma
 
ClojureScript@node
ClojureScript@nodeClojureScript@node
ClojureScript@nodeIkuru Kanuma
 
Welcome to ClojureScript
Welcome to ClojureScriptWelcome to ClojureScript
Welcome to ClojureScriptIkuru Kanuma
 
Clojure web dev history
Clojure web dev historyClojure web dev history
Clojure web dev historyIkuru Kanuma
 
Arachne Unweaved (JP)
Arachne Unweaved (JP)Arachne Unweaved (JP)
Arachne Unweaved (JP)Ikuru Kanuma
 
Review June2015 Dec2015
Review June2015 Dec2015Review June2015 Dec2015
Review June2015 Dec2015Ikuru Kanuma
 
Redmine on amazon ec2
Redmine on amazon ec2Redmine on amazon ec2
Redmine on amazon ec2Ikuru Kanuma
 
Engineering Ethics (In Japanese)
Engineering Ethics (In Japanese)Engineering Ethics (In Japanese)
Engineering Ethics (In Japanese)Ikuru Kanuma
 
First Real Pull Request Ever
First Real Pull Request EverFirst Real Pull Request Ever
First Real Pull Request EverIkuru Kanuma
 
Review june2014 june2015
Review june2014 june2015Review june2014 june2015
Review june2014 june2015Ikuru Kanuma
 
Elementary vim tricks
Elementary vim tricksElementary vim tricks
Elementary vim tricksIkuru Kanuma
 
Processors in a nutshell
Processors in a nutshellProcessors in a nutshell
Processors in a nutshellIkuru Kanuma
 
Computer hardware, and network
Computer hardware, and networkComputer hardware, and network
Computer hardware, and networkIkuru Kanuma
 
Installing Japanese environment(mozc) on Debian 8 + Mate
Installing Japanese environment(mozc) on Debian 8 + Mate Installing Japanese environment(mozc) on Debian 8 + Mate
Installing Japanese environment(mozc) on Debian 8 + Mate Ikuru Kanuma
 
Git for standalone use
Git for standalone useGit for standalone use
Git for standalone useIkuru Kanuma
 
Soap ui introduction
Soap ui introductionSoap ui introduction
Soap ui introductionIkuru Kanuma
 

Mehr von Ikuru Kanuma (20)

clj and deps.edn
clj and deps.ednclj and deps.edn
clj and deps.edn
 
Kukutei shinkoku with Clojure
Kukutei shinkoku with ClojureKukutei shinkoku with Clojure
Kukutei shinkoku with Clojure
 
Locarise,reagent and JavaScript Libraries
Locarise,reagent and JavaScript LibrariesLocarise,reagent and JavaScript Libraries
Locarise,reagent and JavaScript Libraries
 
clara-rules
clara-rulesclara-rules
clara-rules
 
ClojureScript@node
ClojureScript@nodeClojureScript@node
ClojureScript@node
 
Welcome to ClojureScript
Welcome to ClojureScriptWelcome to ClojureScript
Welcome to ClojureScript
 
Clojure web dev history
Clojure web dev historyClojure web dev history
Clojure web dev history
 
Arachne Unweaved (JP)
Arachne Unweaved (JP)Arachne Unweaved (JP)
Arachne Unweaved (JP)
 
Review June2015 Dec2015
Review June2015 Dec2015Review June2015 Dec2015
Review June2015 Dec2015
 
Redmine on amazon ec2
Redmine on amazon ec2Redmine on amazon ec2
Redmine on amazon ec2
 
Engineering Ethics (In Japanese)
Engineering Ethics (In Japanese)Engineering Ethics (In Japanese)
Engineering Ethics (In Japanese)
 
First Real Pull Request Ever
First Real Pull Request EverFirst Real Pull Request Ever
First Real Pull Request Ever
 
Pyunit
PyunitPyunit
Pyunit
 
Review june2014 june2015
Review june2014 june2015Review june2014 june2015
Review june2014 june2015
 
Elementary vim tricks
Elementary vim tricksElementary vim tricks
Elementary vim tricks
 
Processors in a nutshell
Processors in a nutshellProcessors in a nutshell
Processors in a nutshell
 
Computer hardware, and network
Computer hardware, and networkComputer hardware, and network
Computer hardware, and network
 
Installing Japanese environment(mozc) on Debian 8 + Mate
Installing Japanese environment(mozc) on Debian 8 + Mate Installing Japanese environment(mozc) on Debian 8 + Mate
Installing Japanese environment(mozc) on Debian 8 + Mate
 
Git for standalone use
Git for standalone useGit for standalone use
Git for standalone use
 
Soap ui introduction
Soap ui introductionSoap ui introduction
Soap ui introduction
 

Web forms made easy (with formative)