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
780
初めて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
実践AIチャットボットUI実装入門
syumai
8
2.8k
ProxyによるWindow間RPC機構の構築
syumai
3
1.3k
CloudflareのChat Agent Starter Kitで簡単!AIチャットボット構築
syumai
2
810
Go製CLIツールをnpmで配布するには
syumai
3
1.4k
MCPで実現できる、Webサービス利用体験について
syumai
7
2.8k
GoのGenericsによるslice操作との付き合い方
syumai
3
960
GoのWebAssembly活用パターン紹介
syumai
3
11k
Cloudflare Workersで進めるリモートMCP活用
syumai
13
2.8k
Go 1.24でジェネリックになった型エイリアスの紹介
syumai
2
700
Other Decks in Programming
See All in Programming
他言語経験者が Golangci-lint を最初のコーディングメンターにした話 / How Golangci-lint Became My First Coding Mentor: A Story from a Polyglot Programmer
uma31
0
470
Leading Effective Engineering Teams in the AI Era
addyosmani
7
670
Reactive Thinking with Signals and the Resource API
manfredsteyer
PRO
0
120
Blazing Fast UI Development with Compose Hot Reload (Bangladesh KUG, October 2025)
zsmb
2
400
実践Claude Code:20の失敗から学ぶAIペアプログラミング
takedatakashi
18
9.1k
Pythonに漸進的に型をつける
nealle
1
140
バッチ処理を「状態の記録」から「事実の記録」へ
panda728
PRO
0
200
Node-REDのノードの開発・活用事例とコミュニティとの関わり(Node-RED Con Nagoya 2025)
404background
0
100
TFLintカスタムプラグインで始める Terraformコード品質管理
bells17
2
480
Cursorハンズオン実践!
eltociear
2
1.2k
pnpm に provenance のダウングレード を検出する PR を出してみた
ryo_manba
1
170
The Past, Present, and Future of Enterprise Java
ivargrimstad
0
380
Featured
See All Featured
Visualization
eitanlees
150
16k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
15k
A Modern Web Designer's Workflow
chriscoyier
697
190k
The World Runs on Bad Software
bkeepers
PRO
72
11k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
359
30k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
230
22k
Docker and Python
trallard
46
3.6k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
10
890
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4k
Imperfection Machines: The Place of Print at Facebook
scottboms
269
13k
Into the Great Unknown - MozCon
thekraken
40
2.1k
A Tale of Four Properties
chriscoyier
161
23k
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化の効果で前より楽になっている(以前の状 態は触ったことがないので知らない) •
コントリビューションガイドが充実していて、かなりレールが整っている • ⻑期に渡ってメンテナンスされ続けている⼤規模プロジェクトは凄い 最後に
ご清聴ありがとうございました!