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
620
初めて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 1.24でジェネリックになった型エイリアスの紹介
syumai
2
400
StarlingMonkeyを触ってみた話 - 2024冬
syumai
3
400
利用者視点で考える、イテレータとの上手な付き合い方
syumai
5
780
ECMAScript仕様を読むのに必要な知識 - ダイジェスト版
syumai
8
3.8k
コード生成を活用したgqlgen+dataloaderの実装パターン解説
syumai
7
1k
Goのmultiple errorsについて (2024年4月版)
syumai
5
9.9k
ECMAScript仕様の読み方ガイド 〜比較演算子編〜
syumai
7
1k
Go言語で始めるCloudflare Workers
syumai
9
3k
xoのコード生成でgqlgenのDataLoader実装を楽にした話
syumai
2
470
Other Decks in Programming
See All in Programming
Defying Front-End Inertia: Inertia.js on Rails
skryukov
0
480
リストビュー画面UX改善の振り返り
splcywolf
0
140
gen_statem - OTP's Unsung Hero
whatyouhide
1
200
RubyKaigi Dev Meeting 2025
tenderlove
1
130
Being an ethical software engineer
xgouchet
PRO
0
210
趣味全開のAITuber開発
kokushin
0
200
小田原でみんなで一句詠みたいな #phpcon_odawara
stefafafan
0
330
サービスレベルを管理してアジャイルを加速しよう!! / slm-accelerate-agility
tomoyakitaura
1
180
ComposeでWebアプリを作る技術
tbsten
0
110
Chrome Extension Techniques from Hell
moznion
1
160
RuboCop: Modularity and AST Insights
koic
2
490
Exit 8 for SwiftUI
ojun9
0
130
Featured
See All Featured
[RailsConf 2023] Rails as a piece of cake
palkan
54
5.4k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
3.8k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
23
2.6k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
53k
Site-Speed That Sticks
csswizardry
5
490
Done Done
chrislema
183
16k
VelocityConf: Rendering Performance Case Studies
addyosmani
328
24k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
26k
Building Better People: How to give real-time feedback that sticks.
wjessup
367
19k
Documentation Writing (for coders)
carmenintech
69
4.7k
Fantastic passwords and where to find them - at NoRuKo
philnash
51
3.1k
Become a Pro
speakerdeck
PRO
27
5.3k
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化の効果で前より楽になっている(以前の状 態は触ったことがないので知らない) •
コントリビューションガイドが充実していて、かなりレールが整っている • ⻑期に渡ってメンテナンスされ続けている⼤規模プロジェクトは凄い 最後に
ご清聴ありがとうございました!