SlideShare a Scribd company logo
1 of 17
Download to read offline
ライブラリを作る
思考回路
株式会社エクストーン 豊田陽一
ライブラリを作った(ている)
▰ useMaterialUIForm
▰ ReactのカスタムHook
▰ フォーム定義を渡すとMaterial-UIで作られた
フォームコンポーネントが返る
▰ フォーム入力の値はstateとして管理
今日のお話
▰ ライブラリの話
▰ …はしません
▰ これがどのような思考回路で出来たか
▰ という話
そもそも
▰ ライブラリ化するつもりは別になく
▰ Reactでもりもりとフォーム作ってました
開発中
▰ 結構大変
▰ あれ、このままだと予定通り終わらん
▰ 開発をスピードアップしたい
▰ 他のメンバーの開発
▰ あんまり共通ルールとか作りたくない
▰ 自然に共通化されるのがよい
どう書けたら楽になる?
▰ フォーム作るときに考えたいこと
▰ 更新する値と利用するフォームの種類
▰ テキスト、ラジオボタン、セレクト、
etc.
▰ バリデーション
▰ 考えたくないこと
▰ GUIの配置・整理
▰ HTMLの書き方
▰ Reactでの状態の管理
考えたいことだけ表現する
▰ フォーム定義
▰ 変数名
▰ フォームの種類
▰ 選択肢(セレクトボックスとか)
考えたくないものを受け取る
▰ 考えたくないもの
▰ GUIのコンポーネント
▰ フォームで管理する値の状態
プロトタイプ
▰ 欲しいもの
▰ 入力
▰ フォーム定義
▰ 出力
▰ GUIコンポーネント
▰ フォームで管理する値の状態
▰ 隠蔽されるもの
▰ フォームで値を更新すると状態が書き変わる
書いてみる
const formDefinitions = [
{ name: “title”, type: “text” },
]
const { state, comp } = useMaterialUIForm(formDefinitions)
return <>
{ comp.name }
</>
書いてみて
▰ 悪くない
▰ formDefinition書いたらフォームがにょきにょき
生えてくるの楽しい
▰ やりたいことが増える
▰ 時間用のフォーム欲しい
▰ 必須マークつけたい
▰ etc.
構造のテコ入れ
▰ 不満点
▰ フォーム送信
▰ 今回は大半がfirebaseの更新
▰ 保存時になんか処理書きたい
▰ あんまり共通化できなさそう
▰ 保存自体の処理は毎回書きたくない
▰ これは隠すか
▰ コンポーネントのカスタマイズ
▰ 複雑であんまり使わないフォームもある
▰ All or Nothingにしたくない
インターフェイスの改善
▰ 暗黙的処理を外部に公開する
▰ 状態管理はuseReducerを利用
▰ reducer用のdispatch関数を外部から触れる
ようにする
▰ そういや今のままだと保存できんわ
改善した
const formDefinitions = [
{ name: “title”, type: “text” },
]
const { state, comp, dispatch } = useMaterialUIForm(formDefinitions)
return <>
{ comp.name }
<Button onClick={() => dispatch({ type: “create” })}>
保存
</Button>
</>
さらに書いてみて
▰ 既存のものをリプレース
▰ フォームの初期値は渡したい
▰ 改善
▰ あとはだいたいきれいに置き換えられた
一通り作ってみて
▰ 設計のポイント
▰ 誰が幸せになるか
▰ 自分
▰ 楽に書ける
▰ その時考えなくてもいいことを考えない
▰ プロジェクトメンバー
▰ 似たようなものを同じコードで表現出来る
▰ プロジェクト外の人が幸せになるようだったら公
開ライブラリにするとよい
結論
▰ ライブラリを作る理由
▰ 幸せになる
▰ 幸せになろうとしたら結果的に出来る
▰ 幸せになれないなら作らない方がいい

More Related Content

More from Yoichi Toyota

Railsの開発環境作るぞ
Railsの開発環境作るぞRailsの開発環境作るぞ
Railsの開発環境作るぞYoichi Toyota
 
jqで極めるシェル芸の話
jqで極めるシェル芸の話jqで極めるシェル芸の話
jqで極めるシェル芸の話Yoichi Toyota
 
足し算をつくろう
足し算をつくろう足し算をつくろう
足し算をつくろうYoichi Toyota
 
React Hooksでカスタムフックをつくろう
React HooksでカスタムフックをつくろうReact Hooksでカスタムフックをつくろう
React HooksでカスタムフックをつくろうYoichi Toyota
 
ActionCableのクライアントはRails外から利用できるのか
ActionCableのクライアントはRails外から利用できるのかActionCableのクライアントはRails外から利用できるのか
ActionCableのクライアントはRails外から利用できるのかYoichi Toyota
 
サーバーレスアプリケーションの作り方
サーバーレスアプリケーションの作り方サーバーレスアプリケーションの作り方
サーバーレスアプリケーションの作り方Yoichi Toyota
 
SPA時代のOGPとの戦い方
SPA時代のOGPとの戦い方SPA時代のOGPとの戦い方
SPA時代のOGPとの戦い方Yoichi Toyota
 
AWS WAFでらくらくファイアーウォール生活
AWS WAFでらくらくファイアーウォール生活AWS WAFでらくらくファイアーウォール生活
AWS WAFでらくらくファイアーウォール生活Yoichi Toyota
 
Docker in production
Docker in productionDocker in production
Docker in productionYoichi Toyota
 
How to fight against “full scratch disease”
How to fight against  “full scratch disease”How to fight against  “full scratch disease”
How to fight against “full scratch disease”Yoichi Toyota
 
Amazon lexを触ってみた
Amazon lexを触ってみたAmazon lexを触ってみた
Amazon lexを触ってみたYoichi Toyota
 
Forkwell Meetup #3 Productivity Engineering スポンサーLT - 株式会社エクストーン
Forkwell Meetup #3 Productivity Engineering スポンサーLT - 株式会社エクストーンForkwell Meetup #3 Productivity Engineering スポンサーLT - 株式会社エクストーン
Forkwell Meetup #3 Productivity Engineering スポンサーLT - 株式会社エクストーンYoichi Toyota
 
Is the order code deploy?
Is the order code deploy?Is the order code deploy?
Is the order code deploy?Yoichi Toyota
 
React starter-kitでとっとと始めるisomorphic開発
React starter-kitでとっとと始めるisomorphic開発React starter-kitでとっとと始めるisomorphic開発
React starter-kitでとっとと始めるisomorphic開発Yoichi Toyota
 
なぜ人は必死でjQueryを捨てようとしているのか
なぜ人は必死でjQueryを捨てようとしているのかなぜ人は必死でjQueryを捨てようとしているのか
なぜ人は必死でjQueryを捨てようとしているのかYoichi Toyota
 
ActionCableを触ってみた
ActionCableを触ってみたActionCableを触ってみた
ActionCableを触ってみたYoichi Toyota
 
Werckerを使ってみた
Werckerを使ってみたWerckerを使ってみた
Werckerを使ってみたYoichi Toyota
 
Github時代のgitのはなし
Github時代のgitのはなしGithub時代のgitのはなし
Github時代のgitのはなしYoichi Toyota
 
Amazon SNS+SQSによる Fanoutシナリオの話
Amazon SNS+SQSによる Fanoutシナリオの話Amazon SNS+SQSによる Fanoutシナリオの話
Amazon SNS+SQSによる Fanoutシナリオの話Yoichi Toyota
 
Amazon api gatewayで web apiをサーバーレスで構築しよう
Amazon api gatewayで web apiをサーバーレスで構築しようAmazon api gatewayで web apiをサーバーレスで構築しよう
Amazon api gatewayで web apiをサーバーレスで構築しようYoichi Toyota
 

More from Yoichi Toyota (20)

Railsの開発環境作るぞ
Railsの開発環境作るぞRailsの開発環境作るぞ
Railsの開発環境作るぞ
 
jqで極めるシェル芸の話
jqで極めるシェル芸の話jqで極めるシェル芸の話
jqで極めるシェル芸の話
 
足し算をつくろう
足し算をつくろう足し算をつくろう
足し算をつくろう
 
React Hooksでカスタムフックをつくろう
React HooksでカスタムフックをつくろうReact Hooksでカスタムフックをつくろう
React Hooksでカスタムフックをつくろう
 
ActionCableのクライアントはRails外から利用できるのか
ActionCableのクライアントはRails外から利用できるのかActionCableのクライアントはRails外から利用できるのか
ActionCableのクライアントはRails外から利用できるのか
 
サーバーレスアプリケーションの作り方
サーバーレスアプリケーションの作り方サーバーレスアプリケーションの作り方
サーバーレスアプリケーションの作り方
 
SPA時代のOGPとの戦い方
SPA時代のOGPとの戦い方SPA時代のOGPとの戦い方
SPA時代のOGPとの戦い方
 
AWS WAFでらくらくファイアーウォール生活
AWS WAFでらくらくファイアーウォール生活AWS WAFでらくらくファイアーウォール生活
AWS WAFでらくらくファイアーウォール生活
 
Docker in production
Docker in productionDocker in production
Docker in production
 
How to fight against “full scratch disease”
How to fight against  “full scratch disease”How to fight against  “full scratch disease”
How to fight against “full scratch disease”
 
Amazon lexを触ってみた
Amazon lexを触ってみたAmazon lexを触ってみた
Amazon lexを触ってみた
 
Forkwell Meetup #3 Productivity Engineering スポンサーLT - 株式会社エクストーン
Forkwell Meetup #3 Productivity Engineering スポンサーLT - 株式会社エクストーンForkwell Meetup #3 Productivity Engineering スポンサーLT - 株式会社エクストーン
Forkwell Meetup #3 Productivity Engineering スポンサーLT - 株式会社エクストーン
 
Is the order code deploy?
Is the order code deploy?Is the order code deploy?
Is the order code deploy?
 
React starter-kitでとっとと始めるisomorphic開発
React starter-kitでとっとと始めるisomorphic開発React starter-kitでとっとと始めるisomorphic開発
React starter-kitでとっとと始めるisomorphic開発
 
なぜ人は必死でjQueryを捨てようとしているのか
なぜ人は必死でjQueryを捨てようとしているのかなぜ人は必死でjQueryを捨てようとしているのか
なぜ人は必死でjQueryを捨てようとしているのか
 
ActionCableを触ってみた
ActionCableを触ってみたActionCableを触ってみた
ActionCableを触ってみた
 
Werckerを使ってみた
Werckerを使ってみたWerckerを使ってみた
Werckerを使ってみた
 
Github時代のgitのはなし
Github時代のgitのはなしGithub時代のgitのはなし
Github時代のgitのはなし
 
Amazon SNS+SQSによる Fanoutシナリオの話
Amazon SNS+SQSによる Fanoutシナリオの話Amazon SNS+SQSによる Fanoutシナリオの話
Amazon SNS+SQSによる Fanoutシナリオの話
 
Amazon api gatewayで web apiをサーバーレスで構築しよう
Amazon api gatewayで web apiをサーバーレスで構築しようAmazon api gatewayで web apiをサーバーレスで構築しよう
Amazon api gatewayで web apiをサーバーレスで構築しよう
 

ライブラリを作る思考回路