やばい、型がない
ドラッグアンドドロップでリストの並び替えができるJSライブラリのSortableを使って開発をしていた際に、
PulginのOptionの型が存在していないことに気づきました。(つらい)
そもそも本体の最終リリースが1年前で活発にリポジトリが動いてないライブラリだけど、
自分がやりたい要件を満たせるライブラリ現状これしか見つからんしヤバい…
型ないと使えない…こまる…になってしまいひとしきり悶々した結果、
ていうかこれ他の人も困ってるかもしれんしDefinitelyTypedにPR出すか...になったときの備忘録です。
本記事で説明すること
- DefinitelyTypedで既存のpackageの修正時のPullRequest(以下PR)の出し方
- DefinitelyTypedへ出したPRがマージされるまでの暫定的な対処方法
本記事で説明しないこと
- DefinitelyTypedが何か
- リポジトリのREADMEが日本語でも公開されているのでそちらを参考にしてください
- DefinitelyTypedに新規でパッケージの型を追加する方法
- 今回は既にあるパッケージへ型を追加する方法を説明しています。
環境
- macOS: 11.7.1
- node: v16.13.0
- npm: v8.1.0
- 対象のpackage: Sortable
PRを作成するまでのフロー
1 DefinitelyTypedのリポジトリをフォークする
まず自分のリポジトリにDefinitelyTypedをフォークします
フォークはGitHubのリポジトリの右上にあるForkボタンを押して、
Create forkボタンを押せばOKです
2 フォークしたリポジトリをcloneする
フォークしたリポジトリをlocalにcloneします
リポジトリが大きいので自分の環境だと3分位かかりました
git clone <フォークしたリポジトリ>
3 npm installを行う
cloneしたリポジトリのディレクトリへ移動し、npm install
を行って環境構築を行います。
cd DefinitelyTyped
npm install
4. 型定義の編集を行う
変更したいパッケージのディレクトリへ移動し型の修正を粛々と行います。
4.1 テストコードを書く
テストコードを書くと該当のパッケージの型定義のオーナーがApproveしたらマージできるようになるので、PRのマージまでの時間が短縮されます。(書けない場合はDefinitelyTyped本体のメンテナのApproveを待つ必要があります)
${PACKAGE_NAME}-test.ts
が存在しているので、そちらに追加した型に対するコードを書けばOKです。
参考: DefinitelyTyped/README.ja.md at master · DefinitelyTyped/DefinitelyTyped
5. PRを出す
修正とサンプルコードのフォークした自分のDefinitelyTypedのリポジトリにプルリクエストを作成します。
プルリクエストはテンプレートが用意されているので、そちらの記述を確認しながらチェックボックスにチェックをいれればOKです。
あとはApproveを待つだけ
6. マージする
マージできる状況になったらbotが教えてくれるので以下のコメントを入力すれば自動的にマージされます
Ready to Marge
PRが通るまで暫定的に型を定義する方法
ほとんどのPRは1週間以内にマージされますが、
めちゃくちゃ急ぎでパッチを当てたいケースも世の中には存在すると思います。
そういうときは以下の方法で対応可能です。
その場合、コメントで一時しのぎであることも含めて書いてphおくと良いかなと思います
/** @NOTE DefinitelyTypedに該当の型が存在しないためパッチ対応 マージされたら削除する */
declare module 'package名' {
追加したい型定義を書く。
}
自分は今回、sortablejsのSortableOptions
という型に avoidImplicitDeselect
というoptionがなかったため、以下のような記述で暫定的に型を定義しました。
/**
* @NOTE DefinitelyTypedにavoidImplicitDeselectの型が存在しないためパッチ対応
* マージされたら削除する
*/
declare module 'sortablejs' {
interface SortableOptions {
avoidImplicitDeselect?: boolean | undefined;
}
}
所感
大きいリポジトリなのでPRのフローが明確なのとbotが全てのプロセスを教えてくれるので開発体験としてめちゃくちゃ良いなと思いました。
OSSのコントリビュート、ハードルが高いものだとずっと思っていたんですが、意外と気軽にコントリビュートできるなと思ったのでまた機会があったらやってみたいです