今まで
今までは DefinitelyTyped を Git submodule で丸ごと取得し、インポート用の *.d.ts を手書きしていました。
プロジェクトの構成はこんな感じです。
+-- src
| `-- (ソースコード)
+-- typings
| +-- DefinitelyTyped (Git submodule)
| +-- browser.d.ts (フロント用型定義)
| +-- main.d.ts (サーバー用型定義)
| `-- test.d.ts (テスト用型定義)
+-- .gitmodules
実際にはこれに package.json やら gulpfile.js やらビルド時に生成されるファイルやらが加わります。
このパターンはわりと有用でそこそこうまく回っていました。具体的には;
- 型定義が丸ごと手元に落ちてくるので新しい型定義を追加する手間が少ない
- Git の一機能に乗っかるので、発展途上なTypeScriptのツールに振り回されない
が、しばらく回しているうちに状況が変わってきました。一番の大きな要因は型定義のツールとして tsd が deprecate されて Typings が推奨され、いい感じに流行りだしていることです。また、 DefinitelyTyped は巨大になりすぎて Git submodule で落としてくるにはちょっと大きすぎるのがボトルネックになってきました。
これから
オレオレ型定義のイマイチさを Typings に移行することで払拭できそうなのでまるっと移行してみました。
移行後のプロジェクトはこうなります。
+-- src
| `-- (ソースコード)
+-- typings.json
スッキリ。
自前のテンプレートの移行に関わる差分
https://github.com/progre/template-typescript/commit/fa1b8272d1054055dc9d13d80bb53f2801f958b7
移行してよかった点は;
- チェックアウト~フルビルドが30秒近く短縮 (1分半→1分)
- コマンドラインがこなれていて新しい型定義の導入があまり苦にならない
- 使っている型定義だけがファイルツリーに現れるので、エディターで型定義を参照しにいってもツリーが汚れない
今までと変わった点は;
- 型定義を直接修正→ fork したリポジトリに push → pullreq ができなくなった
- Typings は fork したリポジトリから型定義を取得できるので、 fork したリポジトリの型定義を修正→ Typings で取得 & pullreq 作成 という流れに変わりました
- main.d.ts browser.d.ts で依存ライブラリを分けることができなくなった
- test.d.ts でテスト用の依存ライブラリを定義することができなくなった
- Code だと開発中はどのみち型定義が混ざってしまっていたのでなくなっても困りませんでした
まとめ
まとめると、以下のことにつらみを感じている方は Typings への移行をおすすめします;
- 型定義の収集のつらみ
- 発展途上のツール( tsd へのトラウマを含む)のつらみ
- DefinitelyTyped へのコントリビューションと現行の開発との両立のつらみ