Mobile Factory Tech Blog

技術好きな方へ!モバイルファクトリーのエンジニアたちが楽しい技術話をお届けします!

社内勉強会を通じて DefinitelyTyped に新しいパッケージを追加した話

こんにちは、ブロックチェーンチームでソフトウェアエンジニアをしている id:odan3240 です。

モバファクには毎日1時間社内勉強会の制度があります。

tech.mobilefactory.jp

様々な目的の社内勉強会が開催されていますが、その中に一つOSSへの貢献が目的の勉強会があります。この勉強会の紹介は別の機会として、この記事では、この勉強会を通じてDefinitelyTyped に新しいパッケージの型定義を追加したので、その紹介をします。

DefinitelyTyped とは

DefinitelyTyped とは TypeScript の型定義を集めたリポジトリです。
TypeScript を書いているときに、 npm パッケージと一緒に @types/xxx というパッケージをインストールしたことがある方もいるかも知れません。この @types から始まるパッケージを集約しているリポジトリが DefinitelyTyped です。 DefinitelyTyped には型定義のない JavaScript 製のパッケージに対する型定義 1 が大量にあります。

今回は、keccak - npm に対する型定義を追加しました。

手順

コントリビュートの手順については README の How can I contribute? に丁寧に紹介されています。今回は新しいパッケージの追加だったため、Create a new package にある手順に沿って作業をしました。

ボイラープレートの作成

README にある通り、dts-gen を用いてボイラープレートを生成しました。今回の対象のモジュールは keccak なので、以下のコマンドを実行しました。

$ npx dts-gen --dt --name keccak --template module

このコマンドにより、index.d.ts, keccak-test.ts, tsconfig.json, tslint.json の4つのファイルが生成されます。
index.d.ts に型定義を、keccak-test.ts に型定義に対するテストを書くのが今回のゴールです。

テスト

.d.ts ファイルの lint やテストには dtslint が使用されます。

テストでは以下のように、コメントで期待される型を書く形式になっています。

const keccak = create('keccak224'); // $ExpectType Keccak

実際のプルリク

実際に出したプルリクはこれです。

feat: add types of keccak by odanado · Pull Request #44016 · DefinitelyTyped/DefinitelyTyped

typescript-bot という bot が住んでいます。この bot はレビューが遅れていると、「もう少し待ってね」というコメントを付けるようです。個人的に放置されている感じが少なくて良いと思いました。

感想

keccak はブロックチェーンの Ethereum で使用されているハッシュ関数です。Ethereum に関するコードを書く時によく使用していましたが、型定義が存在しないのがいつも気になっていました。そんな中、 OSS への貢献を目的とした社内勉強会が開催されると聞いて良い機会と感じて keccak の型定義を追加するプルリクを作成しました。

DefinitelyTyped には世界中のエンジニアが協力して型定義のない npm パッケージに型定義を追加しています。仕事でも趣味でも TypeScript を書いている人間としては DefinitelyTyped には普段からお世話になっています。今回は、これに自分も協力できたという実感があり、感慨深いです。


  1. 元の npm パッケージに型定義が含まれている場合もある