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
初めてDefinitelyTypedにPRを出した話
Search
syumai
November 15, 2024
Programming
890
1
Share
初めてDefinitelyTypedにPRを出した話
TSKaigi Kansai 2024 LT:
https://kansai.tskaigi.org/talks/syumai
syumai
November 15, 2024
More Decks by syumai
See All by syumai
『[入門] Cloudflare Workers』本はなぜ誕生したのか
syumai
0
280
tsgolintはいかにしてtypescript-goの非公開APIを呼び出しているのか
syumai
9
2.9k
知られているようで知られていない JavaScriptの仕様 4選
syumai
3
1.2k
CloudflareのSandbox SDKを試してみた
syumai
0
770
実践AIチャットボットUI実装入門
syumai
9
4k
ProxyによるWindow間RPC機構の構築
syumai
3
1.5k
CloudflareのChat Agent Starter Kitで簡単!AIチャットボット構築
syumai
2
1.1k
Go製CLIツールをnpmで配布するには
syumai
3
2k
MCPで実現できる、Webサービス利用体験について
syumai
7
3k
Other Decks in Programming
See All in Programming
運転動画を検索可能にする〜Cosmos-Embed1とDatabricks Vector Searchで〜/cosmos-embed1-databricks-vector-search
studio_graph
0
370
Kingdom of the Machine
yui_knk
2
690
アクセシビリティ試験の"その後"を仕組み化する
yuuumiravy
1
160
ハーネスエンジニアリングにどう向き合うか 〜ルールファイルを超えて開発プロセスを設計する〜 / How to approach harness engineering
rkaga
24
14k
Kubernetes上でAgentを動かすための最新動向と押さえるべき概念まとめ
sotamaki0421
3
560
ソフトウェア設計の結合バランス #phperkaigi
kajitack
0
140
AI時代のPhpStorm最新事情 #phpcon_odawara
yusuke
0
190
事業会社でのセキュリティ長期インターンについて
masachikaura
0
260
PDI: Como Alavancar Sua Carreira e Seu Negócio
marcelgsantos
0
130
アーキテクチャモダナイゼーションとは何か
nwiizo
19
5.3k
How We Benchmarked Quarkus: Patterns and anti-patterns
hollycummins
1
150
Surviving Black Friday: 329 billion requests with Falcon!
ioquatix
0
670
Featured
See All Featured
Money Talks: Using Revenue to Get Sh*t Done
nikkihalliwell
0
210
Navigating Algorithm Shifts & AI Overviews - #SMXNext
aleyda
1
1.2k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4.2k
Odyssey Design
rkendrick25
PRO
2
580
How to Think Like a Performance Engineer
csswizardry
28
2.6k
The Spectacular Lies of Maps
axbom
PRO
1
710
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
38
2.8k
HDC tutorial
michielstock
2
630
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
11
890
Facilitating Awesome Meetings
lara
57
6.8k
Designing for Timeless Needs
cassininazir
0
200
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
12
1.1k
Transcript
初めてDefinitelyTypedにPRを出した話 2024-11-16 TSKaigi Kansai 2024 株式会社ベースマキナ syumai
• ECMAScript 仕様輪読会 主催 • Xコミュニティ「浅草界隈プログラマー」をやってます • 株式会社ベースマキナで管理画面のSaaSを開発中 ◦ GoでGraphQLサーバー
(gqlgen) や TypeScriptでフロント エンドを書いています • Software Design 2023年 12月号からCloudflare Workersの連 載をしてます • 𝕏: @__syumai • Website: https://syum.ai ⾃⼰紹介 syumai
None
初めてDefinitelyTypedにPRを出した話
PRを出すことになった経緯 DefinitelyTypedに初めてPRを出した話 • encoding-japaneseというライブラリにパッチを送る必要があった • ライブラリ本体の修正に成功したが、いざ使ってみたら型エラーが発⽣ • 型エラーを無視したくないので、DefinitelyTypedにPRを出す道へ…
DefinitelyTyped
DefinitelyTypedとは • https://github.com/DefinitelyTyped/DefinitelyTyped • あらゆるJavaScript製ライブラリに対するTypeScriptの型定義を配布 • TypeScript黎明期を⽀えた偉⼤なプロジェクト • `@types/${npm package名}`
という名前で型定義を配布している ◦ ほとんどの⼈が使ったことのあるやつ: @types/node, @types/react, etc… DefinitelyTypedとは
DefinitelyTypedの課題 • 型定義のメンテナンスがライブラリ本体から独⽴している ◦ → ライブラリ⾃体の更新に型定義の更新が追いつかないことが発⽣ • メンテナがライブラリ本体と分かれている場合がある ◦ そもそも、第三者が型定義を追加することで成⻑してきたプロジェクト
DefinitelyTypedとは 課題理解におすすめの記事↓
2024年現在、⼀般的な型定義の配布⽅法 • ライブラリ本体に抱き合わせ ◦ いまや、当たり前のようにライブラリ本体がTSで書かれている ◦ ライブラリがTSで書かれていなくても、⼿書きd.tsを抱き合わせて配 布する⽅が楽 • 直近DefinitelyTypedに触れる場⾯は、新しいpackageの導⼊時と⾔うより
古くから使われているライブラリの型定義が必要な時 DefinitelyTypedとは
DefinitelyTypedのプロジェクト構成 • 2024年11⽉現在、8953プロジェクトを保有する超巨⼤なpnpm workspace ◦ `./types` ディレクトリ配下に各プロジェクトを設置 • 基本的なファイル: ◦
package.json, tsconfig.json • 追加の設定ファイル: ◦ .eslintrc.json, .npmignore • テストコード: ◦ ${npm package名}-tests.ts DefinitelyTypedとは encoding-japaneseの例
2023年10⽉(わりと最近!)にガッとpnpm workspace移⾏された
DefinitelyTypedのバージョニング • 各packageのpackage.jsonに記載 • 常にpatchバージョンとして .9999 を指定する ◦ patchバージョン部分がリリース時に⾃動で0から順にインクリメント される
◦ 例: 2.2.9999 -> 2.2.0 (2.2系の初回リリース時) • major, minorバージョンはライブラリ本体と合わせる必要がある ◦ → DefinitelyTypedから配布される型定義のpatchバージョンはライブ ラリ本体と同期していない DefinitelyTypedとは
DefinitelyTypedにPRを出す流れ
PRを出す⼤まかな⼿順 1. リポジトリのclone、dependenciesのインストール 2. 型定義の修正 3. テストコードの修正 4. コードのフォーマット 5.
(必要があれば) バージョンの更新 6. PRをOpen 詳しい⼿順はREADMEのHow can I contribute?に記載 DefinitelyTypedにPRを出す流れ
1. リポジトリのclone、dependenciesのインストール • github.com/DefinitelyTyped/DefinitelyTyped をclone • 無邪気にpnpm installすると、8900個以上あるWorkspaceのpnpm install が⼀⻫に⾛って⼤変
◦ `pnpm install -w --filter "...{./types/npm package名}...` で フィルタする DefinitelyTypedにPRを出す流れ
2. 型定義の修正 • ⼿書きd.tsを直す • ⾃分が対応したのはfallbackオプションの修正。 ◦ ⾃分が追加した "ignore" と、別のPRで追加されていた
"error" の追加 DefinitelyTypedにPRを出す流れ
3. テストコードの修正 • 型チェックのみを⾏うためのテストが各packageに存在する • 今回は、 fallback プロパティに "ignore" と、"error"
を追加しても型 エラーにならないことを検証 DefinitelyTypedにPRを出す流れ "ignore" のテストの抜粋 →
4. コードのフォーマット • dprintを使う • `pnpm dprint fmt -- 'types/${npm
package名}/**/*.ts'`で 簡単実⾏ DefinitelyTypedにPRを出す流れ
5. (必要があれば) バージョンの更新 • major / minorバージョンはライブラリ本体と合わせる必要あり • encoding-japaneseが 2.2.0
に上がっていたので 2.0.9999 から 2.2.9999 に変更 DefinitelyTypedにPRを出す流れ
6. PRをOpen • CODEOWNERにレビューの通知が⾶ぶ ◦ 今回は、encoding-japaneseのDefinitelyTyped側CODEOWNERの ドッグさん (@rhysd) が⾮常に迅速にレビューしてくださった ◦
PRを出したその⽇のうちにマージ&リリースまで進められました! DefinitelyTypedにPRを出す流れ
PRを出してみた感想
PRを出してみた感想 • 出す前は、巨⼤プロジェクトすぎて⼤変そうだと思っていた • 実際やると意外と楽 ◦ 恐らくpnpm workspace化の効果で前より楽になっている(以前の状 態は触ったことがないので知らない) •
コントリビューションガイドが充実していて、かなりレールが整っている • ⻑期に渡ってメンテナンスされ続けている⼤規模プロジェクトは凄い 最後に
ご清聴ありがとうございました!