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
76
拙作OSSライブラリvalidated-extendable.jsの紹介
Yuki Takagi
November 09, 2024
Tweet
Share
Other Decks in Programming
See All in Programming
実践Claude Code:20の失敗から学ぶAIペアプログラミング
takedatakashi
18
7.6k
O Que É e Como Funciona o PHP-FPM?
marcelgsantos
0
190
タスクの特性や不確実性に応じた最適な作業スタイルの選択(ペアプロ・モブプロ・ソロプロ)と実践 / Optimal Work Style Selection: Pair, Mob, or Solo Programming.
honyanya
3
190
pnpm に provenance のダウングレード を検出する PR を出してみた
ryo_manba
1
150
PHPに関数型の魂を宿す〜PHP 8.5 で実現する堅牢なコードとは〜 #phpcon_hiroshima / phpcon-hiroshima-2025
shogogg
1
320
Claude CodeによるAI駆動開発の実践 〜そこから見えてきたこれからのプログラミング〜
iriikeita
0
320
Catch Up: Go Style Guide Update
andpad
0
240
Server Side Kotlin Meetup vol.16: 内部動作を理解して ハイパフォーマンスなサーバサイド Kotlin アプリケーションを書こう
ternbusty
3
240
なぜGoのジェネリクスはこの形なのか? - Featherweight Goが明かす設計の核心
qualiarts
0
240
Claude Agent SDK を使ってみよう
hyshu
0
1.4k
3年ぶりにコードを書いた元CTOが Claude Codeと30分でMVPを作った話
maikokojima
0
620
デミカツ切り抜きで面倒くさいことはPythonにやらせよう
aokswork3
0
260
Featured
See All Featured
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
34
2.5k
Keith and Marios Guide to Fast Websites
keithpitt
411
23k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
9.7k
Rebuilding a faster, lazier Slack
samanthasiow
84
9.2k
Bootstrapping a Software Product
garrettdimon
PRO
307
110k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
190
55k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
Become a Pro
speakerdeck
PRO
29
5.6k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
127
54k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
31
2.7k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
55
3k
Fireside Chat
paigeccino
40
3.7k
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