Upgrade to PRO for Only $50/Year—Limited-Time Offer! 🔥
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
76
拙作OSSライブラリvalidated-extendable.jsの紹介
Yuki Takagi
November 09, 2024
Tweet
Share
Other Decks in Programming
See All in Programming
ゲームの物理 剛体編
fadis
0
340
テストやOSS開発に役立つSetup PHP Action
matsuo_atsushi
0
150
AIコーディングエージェント(skywork)
kondai24
0
170
C-Shared Buildで突破するAI Agent バックテストの壁
po3rin
0
390
Rediscover the Console - SymfonyCon Amsterdam 2025
chalasr
2
160
関数実行の裏側では何が起きているのか?
minop1205
1
690
非同期処理の迷宮を抜ける: 初学者がつまづく構造的な原因
pd1xx
1
710
AIエンジニアリングのご紹介 / Introduction to AI Engineering
rkaga
6
2.1k
Rubyで鍛える仕組み化プロヂュース力
muryoimpl
0
110
宅宅自以為的浪漫:跟 AI 一起為自己辦的研討會寫一個售票系統
eddie
0
500
dotfiles 式年遷宮 令和最新版
masawada
1
770
手軽に積ん読を増やすには?/読みたい本と付き合うには?
o0h
PRO
1
170
Featured
See All Featured
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
55
3.1k
Balancing Empowerment & Direction
lara
5
800
Code Review Best Practice
trishagee
74
19k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.2k
Facilitating Awesome Meetings
lara
57
6.7k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.6k
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.4k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
17k
Git: the NoSQL Database
bkeepers
PRO
432
66k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
25
1.6k
A better future with KSS
kneath
240
18k
Visualization
eitanlees
150
16k
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