Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
拙作OSSライブラリvalidated-extendable.jsの紹介
Search
Yuki Takagi
November 09, 2024
Programming
81
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
拙作OSSライブラリvalidated-extendable.jsの紹介
Yuki Takagi
November 09, 2024
Other Decks in Programming
See All in Programming
肥大化するレガシーコードに立ち向かうためのインターフェース分離と依存の逆転 / JJUG CCC 2026 Spring
hirokunimaeta
0
590
エンジニア向け会社紹介/Findy Company Profile
findyinc
6
350k
技術記事、 専門家としてのプログラマ、 言語化
mizchi
13
6.3k
AIで効率化できた業務・日常
ochtum
0
140
Oxlintのカスタムルールの現況
syumai
6
1.1k
メソッドのジェネリクスでGoの夢は広がるか? / Kyoto.go #65
utgwkk
3
870
Go1.27で導入されるジェネリクスメソッドでできること
mackee
0
160
The ROI of Quarkus for Spring Boot Applications
hollycummins
0
130
IBM Bobを活用したレガシーアプリの最新化
oniak3ibm
PRO
1
210
AI 時代のソフトウェア設計の学び方
masuda220
PRO
29
13k
RTSPクライアントを自作してみた話
simotin13
0
620
JavaDoc 再入門
nagise
1
370
Featured
See All Featured
Leadership Guide Workshop - DevTernity 2021
reverentgeek
1
310
コードの90%をAIが書く世界で何が待っているのか / What awaits us in a world where 90% of the code is written by AI
rkaga
62
44k
Everyday Curiosity
cassininazir
0
230
How to Align SEO within the Product Triangle To Get Buy-In & Support - #RIMC
aleyda
2
1.5k
B2B Lead Gen: Tactics, Traps & Triumph
marketingsoph
0
160
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
287
14k
Done Done
chrislema
186
16k
Learning to Love Humans: Emotional Interface Design
aarron
275
41k
Designing Experiences People Love
moore
143
24k
Agile that works and the tools we love
rasmusluckow
331
22k
Fireside Chat
paigeccino
42
4k
Reflections from 52 weeks, 52 projects
jeffersonlam
356
21k
Transcript
拙作OSSライブラリ の紹介 validated-extendable.js
はじめに 今回のお話 • 最近小規模なTypeScript製ライブラリをOSSとして開発しNPMに公開した
はじめに 近況 NPMに公開 • 初コミットから1ヶ月半 • NPM上で約1000DL/週 • GitHubの⭐数: 10
TABLE OF CONTENTS モチベーション なぜライブラリを作り 始めたか 機能 ライブラリでできること ・使用例 OSSにして良かった点
OSSにしたことで得ら れた恩恵 苦戦した点 どの部分に時間をか けたか 既存ライブラリとの差 別化 類似ライブラリ・相違 点 まとめ 要約・感想 01 02 03 04 05 06
01 モチベーション
モチベーション Zodを使ったコードとクラスベースなコード の融合 Zodを使った型定義 クラスベースな型定義 • バリデーションを宣言的に 記述できる • 関連する操作をメソッドとして
紐付けられる
モチベーション Zodを使ったコードとクラスベースなコード の融合 Zodを使った型定義 クラスベースな型定義 記法が異なるため同時には使えない → Zodを使うことで、コードベースの一部分 が非クラスベースになる
モチベーション Zodを使ったコードとクラスベースなコード の融合 なんとか同時やろうとすると? • 記述量が多い • ボイラープレートのよう • name,
ageって何回書くねん! 一例:
モチベーション Zodを使ったコードとクラスベースなコード の融合 まとめ • Zodを使ったコードとクラスベースなコード、それぞれに特徴がある ◦ Zod: 宣言的なバリデーション ◦
クラス: メソッドの定義 • しかし、両方のいいとこ取りをしようとする長いボイラープレートを書くことになる この課題を解決するためにライブラリを作る
機能 02
Zodスキーマをもとにしたクラス定義 主な機能 機能 スキーマをもとにクラスのコンストラクタとプロパティを自動で定義する TypeScriptサポート コンストラクタやプロパティには、スキーマから推論された型が付けられる バリデーション コンストラクタ及びプロパティのセッターで、バリデーションを行う
機能 使用例 スキーマをクラスに
機能 使用例 スキーマをクラスに クラスを使用
機能 使用例 スキーマをクラスに バリデーション 型チェック
機能 使用例 スキーマをクラスに 元になったスキーマを取得
機能 使用例 可変なプロパティ • デフォルトでは、プロパティは readonlyになるようにしてい る • 可変にしたいときは Validatedの代わりに
ValidatedMutableを使う
機能 使用例 可変なプロパティ プロパティのセッターでもバリデーション
OSSにして良かった点 03
OSSにして良かった点 ユーザーからのバグ報告 • GitHubのissueでバグを報告してもらえた ◦ 認知していなかったバグを発見できてライブラリの改善に役立った
OSSにして良かった点 ユーザーからのバグ報告 • GitHubのissueでバグを報告してもらえた ◦ 認知していなかったバグを発見できてライブラリの改善に役立った
苦戦した点 04
苦戦した点 デュアルパッケージ化 • JavaScriptには大きく2種類のモジュールシステムが存在する ◦ ES Modules ◦ CommonJS •
利用者側の環境によってどちらが使われるかが変わる • ライブラリの場合、両方に対応しているのが望ましい(デュアルパッケージ) 背景
苦戦した点 デュアルパッケージ化 • CJSとESM両方のビルドをdistに含 める 対応
苦戦した点 デュアルパッケージ化 • CJSとESM両方のビルドをdistに含 める • pnpm run buildで2種類のビル ドが実行されるようにする
対応 package.json:
苦戦した点 デュアルパッケージ化 • CJSとESM両方のビルドをdistに含 める • pnpm run buildで2種類のビル ドが実行されるようにする
• package.jsonのexports ◦ CJSとして読み込まれたときと ESMとして読み込まれたとき で異なるファイルが読み込ま れるように指定できる 対応 package.json:
既存ライブラリとの 差別化 05
既存ライブラリとの 差別化 類似ライブラリ • オブジェクトのスキーマからクラスを定義する zod-class
既存ライブラリとの 差別化 類似ライブラリ • めっちゃ似てる😭 • ライブラリが完成したあとに見つけた zod-class
既存ライブラリとの 差別化 相違点 • オブジェクト型以外のスキーマもクラスにできる ◦ プリミティブ型(z.string(), z.number(), …) ▪
値オブジェクトを定義するのに便利 ◦ ユニオン型(z.union(), z.enum(), …) ◦ 配列型 ◦ … • コンストラクタだけでなくプロパティのセッターでもバリデーションが行われる
まとめ 06
まとめ 今回のお話 • 最近小規模なTypeScript製ライブラリをOSSとして開発しNPMに公開した • ライブラリを使用することで Zodを使ったコードとクラスベースなコードの融合が可能 になった • OSSにしたことでライブラリのユーザーからフィードバックをもらえてクオリティの向
上に役立った • 本格的なTypeScriptのパッケージを公開するのは初めてでデュアルパッケージ化 に苦戦した • 完成後に機能が被りまくりのライブラリを見つけてしまったが、それぞれにしかでき ないこともあった 感想 • 自分のような個人が開発する OSSでもフィードバックをくれるユーザーがいることに 驚いた • OSS開発は想像していた以上に気軽・身近なものなのかもしれない
CREDITS: This presentation template was created by Slidesgo, including icons
by Flaticon, infographics & images by Freepik THANKS ご清聴ありがとうございました! Please keep this slide for attribution