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
1
700
初めてDefinitelyTypedにPRを出した話
TSKaigi Kansai 2024 LT:
https://kansai.tskaigi.org/talks/syumai
syumai
November 15, 2024
Tweet
Share
More Decks by syumai
See All by syumai
GoのGenericsによるslice操作との付き合い方
syumai
3
740
GoのWebAssembly活用パターン紹介
syumai
3
11k
Cloudflare Workersで進めるリモートMCP活用
syumai
13
2.3k
Go 1.24でジェネリックになった型エイリアスの紹介
syumai
2
510
StarlingMonkeyを触ってみた話 - 2024冬
syumai
3
440
利用者視点で考える、イテレータとの上手な付き合い方
syumai
7
870
ECMAScript仕様を読むのに必要な知識 - ダイジェスト版
syumai
9
4k
コード生成を活用したgqlgen+dataloaderの実装パターン解説
syumai
7
1.1k
Goのmultiple errorsについて (2024年4月版)
syumai
5
11k
Other Decks in Programming
See All in Programming
チームで開発し事業を加速するための"良い"設計の考え方 @ サポーターズCoLab 2025-07-08
agatan
1
430
猫と暮らす Google Nest Cam生活🐈 / WebRTC with Google Nest Cam
yutailang0119
0
140
システム成長を止めない!本番無停止テーブル移行の全貌
sakawe_ee
1
210
「Cursor/Devin全社導入の理想と現実」のその後
saitoryc
0
830
Is Xcode slowly dying out in 2025?
uetyo
1
280
AIプログラマーDevinは PHPerの夢を見るか?
shinyasaita
1
230
テスト駆動Kaggle
isax1015
0
200
20250704_教育事業におけるアジャイルなデータ基盤構築
hanon52_
5
800
A full stack side project webapp all in Kotlin (KotlinConf 2025)
dankim
0
120
Python型ヒント完全ガイド 初心者でも分かる、現代的で実践的な使い方
mickey_kubo
1
130
XP, Testing and ninja testing
m_seki
3
250
技術同人誌をMCP Serverにしてみた
74th
1
650
Featured
See All Featured
Measuring & Analyzing Core Web Vitals
bluesmoon
7
510
GitHub's CSS Performance
jonrohan
1031
460k
Reflections from 52 weeks, 52 projects
jeffersonlam
351
20k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
281
13k
The Cost Of JavaScript in 2023
addyosmani
51
8.5k
Learning to Love Humans: Emotional Interface Design
aarron
273
40k
The Pragmatic Product Professional
lauravandoore
35
6.7k
Site-Speed That Sticks
csswizardry
10
690
Rebuilding a faster, lazier Slack
samanthasiow
82
9.1k
Art, The Web, and Tiny UX
lynnandtonic
299
21k
Bootstrapping a Software Product
garrettdimon
PRO
307
110k
Automating Front-end Workflow
addyosmani
1370
200k
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化の効果で前より楽になっている(以前の状 態は触ったことがないので知らない) •
コントリビューションガイドが充実していて、かなりレールが整っている • ⻑期に渡ってメンテナンスされ続けている⼤規模プロジェクトは凄い 最後に
ご清聴ありがとうございました!