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.9k
ProxyによるWindow間RPC機構の構築
syumai
3
1.3k
CloudflareのChat Agent Starter Kitで簡単!AIチャットボット構築
syumai
2
820
Go製CLIツールをnpmで配布するには
syumai
3
1.5k
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
SwiftDataを使って10万件のデータを読み書きする
akidon0000
0
250
Go言語はstack overflowの夢を見るか?
logica0419
0
670
Software Architecture
hschwentner
6
2.4k
CSC509 Lecture 08
javiergs
PRO
0
270
Blazing Fast UI Development with Compose Hot Reload (Bangladesh KUG, October 2025)
zsmb
2
440
モテるデスク環境
mozumasu
3
1.4k
Swift Concurrency 年表クイズ
omochi
3
220
EMこそClaude Codeでコード調査しよう
shibayu36
0
530
What Spring Developers Should Know About Jakarta EE
ivargrimstad
0
660
外接に惑わされない自システムの処理時間SLIをOpenTelemetryで実現した話
kotaro7750
0
150
Designing Repeatable Edits: The Architecture of . in Vim
satorunooshie
0
210
三者三様 宣言的UI
kkagurazaka
0
330
Featured
See All Featured
What’s in a name? Adding method to the madness
productmarketing
PRO
24
3.7k
A better future with KSS
kneath
239
18k
Leading Effective Engineering Teams in the AI Era
addyosmani
7
700
The Power of CSS Pseudo Elements
geoffreycrofte
80
6k
GraphQLとの向き合い方2022年版
quramy
49
14k
Documentation Writing (for coders)
carmenintech
76
5.1k
Code Review Best Practice
trishagee
72
19k
Building Flexible Design Systems
yeseniaperezcruz
329
39k
VelocityConf: Rendering Performance Case Studies
addyosmani
333
24k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
31
2.9k
Navigating Team Friction
lara
190
15k
Being A Developer After 40
akosma
91
590k
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化の効果で前より楽になっている(以前の状 態は触ったことがないので知らない) •
コントリビューションガイドが充実していて、かなりレールが整っている • ⻑期に渡ってメンテナンスされ続けている⼤規模プロジェクトは凄い 最後に
ご清聴ありがとうございました!