JavaScriptの限界

  • JavaScriptはもともと小規模スクリプトのために設計されており、大規模アプリケーションに成長することを想定していなかった。
  • アプリケーションが大きくなると、型のない言語での開発はエラーの温床となり、保守やチーム開発が難しくなる。
  • コードの意図や構造を把握するために、文書やコメントに依存することが多く、開発効率が落ちる。

なぜTypeScriptか(TypeScriptの価値)

  • TypeScriptはJavaScriptに型システムを導入し、静的解析が可能になることで、エラーを早期に発見できる。
  • 型によってコードの構造が明示的になり、ドキュメント代わりになる。
  • 型による補完とナビゲーション支援で、IDEの利便性が大幅に向上する。
  • 結果として、大規模なJavaScriptコードベースでも安全でスケーラブルな開発が可能になる。

https://www.typescriptlang.org/why-create-typescript/ をChatGPTに要約させた

で、我々はTypeScriptが必要なんだっけ?

例えば次のような状況ならTSは不要だろう

  • 小規模なプロジェクトで、数人の開発者が関わるだけ
  • 短期間で開発が完了する予定のプロジェクト
  • プロジェクトの要件が頻繁に変わる(今あるものの保守を考える必要がないくらい頻繁)
  • 開発者がJavaScriptに精通しており、型のない言語でも問題ないと感じる
  • プロジェクトが単純で、複雑なデータ構造やロジックがない

もしくは人間がTSがやってくれることをやり続けるのならTSは不要だろう

  • コードレビューを徹底し、全てのコードに対して厳格なレビューを行う
  • コードの意図や構造を明確にするために、詳細なドキュメントやコメントを作成する
  • コードの変更や追加に対して、十分なテストを行い、エラーを早期に発見する

世の中の大抵の開発プロジェクトはこれらの条件は合致しない。
かつ、プロダクト開発に多くのリソースを割くためにも、自動化できる部分は自動化しよう。

※ 上記のリストは見出しなどを除きほぼCopilot生成

TypeScriptを使う、という意識はいらない

  • TypeScriptを使うこと自体が目的ではない
  • 設計を実装に落とし込んでおけば、TypeScriptが自動的に型を推論や静的検査をしてくれる
  • 重要だと判断した仕様・設計が担保されていればよく、それ以上の型パズルに時間をかける必要はない

ガイドレールを敷く事で迷いなく進めるようにする

  • ガイドレールがあることで、その範囲の中で迷いなく開発を進められるようになる。
  • もしTypeScriptというガイドレールが邪魔だと感じることがあれば次のいずれかだろう
    • 開発者が間違えている
      • anyなどで型を無効化しなければいけないとしたら、自分たちのプロダクトの設計を適切に実装できていない
    • 設計を見直す時が来た
      • 既存の設計が新たに作ろうとしている機能などを実現するにあたって不適切になっている