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
1
77
拙作OSSライブラリvalidated-extendable.jsの紹介
Yuki Takagi
November 09, 2024
Tweet
Share
Other Decks in Programming
See All in Programming
20260313 - Grafana & Friends Taipei #1 - Kubernetes v1.36 的開發雜記:那些困在 Alpha 加護病房太久的 Metrics
tico88612
0
230
Angular-Apps smarter machen mit Gen AI: Lokal und offlinefähig - Hands-on Workshop!
christianliebel
PRO
0
130
Windows on Ryzen and I
seosoft
0
360
車輪の再発明をしよう!PHP で実装して学ぶ、Web サーバーの仕組みと HTTP の正体
h1r0
2
300
GoのDB アクセスにおける 「型安全」と「柔軟性」の両立 - Bob という選択肢
tak848
0
270
AI活用のコスパを最大化する方法
ochtum
0
280
AI 開発合宿を通して得た学び
niftycorp
PRO
0
160
Linux Kernelの1文字のミスで 権限昇格ができた話
rqda
0
2.1k
野球解説AI Agentを開発してみた - 2026/02/27 LayerX社内LT会資料
shinyorke
PRO
0
360
Laravel Nightwatchの裏側 - Laravel公式Observabilityツールを支える設計と実装
avosalmon
1
140
生成 AI 時代のスナップショットテストってやつを見せてあげますよ(α版)
ojun9
0
300
OTP を自動で入力する裏技
megabitsenmzq
0
120
Featured
See All Featured
SEO for Brand Visibility & Recognition
aleyda
0
4.4k
How People are Using Generative and Agentic AI to Supercharge Their Products, Projects, Services and Value Streams Today
helenjbeal
1
140
Paper Plane (Part 1)
katiecoart
PRO
0
5.8k
Un-Boring Meetings
codingconduct
0
230
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.7k
How to audit for AI Accessibility on your Front & Back End
davetheseo
0
220
Making the Leap to Tech Lead
cromwellryan
135
9.8k
Visual Storytelling: How to be a Superhuman Communicator
reverentgeek
2
480
Digital Projects Gone Horribly Wrong (And the UX Pros Who Still Save the Day) - Dean Schuster
uxyall
0
800
For a Future-Friendly Web
brad_frost
183
10k
Have SEOs Ruined the Internet? - User Awareness of SEO in 2025
akashhashmi
0
300
Getting science done with accelerated Python computing platforms
jacobtomlinson
2
150
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