0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

DefinitelytypedにPullRequestを出した話 + 型がないときの暫定の対処法

Posted at

やばい、型がない

ドラッグアンドドロップでリストの並び替えができるJSライブラリのSortableを使って開発をしていた際に、
PulginのOptionの型が存在していないことに気づきました。(つらい)

そもそも本体の最終リリースが1年前で活発にリポジトリが動いてないライブラリだけど、
自分がやりたい要件を満たせるライブラリ現状これしか見つからんしヤバい…
型ないと使えない…こまる…になってしまいひとしきり悶々した結果、

ていうかこれ他の人も困ってるかもしれんしDefinitelyTypedにPR出すか...になったときの備忘録です。

本記事で説明すること

  • DefinitelyTypedで既存のpackageの修正時のPullRequest(以下PR)の出し方
  • DefinitelyTypedへ出したPRがマージされるまでの暫定的な対処方法

本記事で説明しないこと

  • DefinitelyTypedが何か
  • 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のコントリビュート、ハードルが高いものだとずっと思っていたんですが、意外と気軽にコントリビュートできるなと思ったのでまた機会があったらやってみたいです

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?