【学びログ】OAuth実装中に感じたTypeScriptの必要性
はじめに
現在、個人開発中のツールで GitHub の OAuth を使う必要があり、その仕組みを理解するために、自前で OAuth 認証のフローを実装して学んでいました。
その中で、「このコード、値が存在しない場合、普通にクラッシュするな…」という場面に遭遇しました。
今回、簡易的なサーバーを JavaScript で実装していたため、TypeScript は使用していませんでしたが、この一件で「やっぱり TypeScript って大事だ」と強く実感したので、学びのログとして残します。
JavaScript で起こりかけた事故
以下のコードが実際のクラッシュする可能性があったコードです。
const authHeader = req.headers["authorization"];
const token = authHeader.split(" ")[1];
やろうとしていたのは、クライアント側から送られてきたリクエストヘッダー authorization からトークンを取得する処理です。
久しぶりに JavaScript だけで書いていたため、型チェックもなくエラーも出ないのでそのままにしていたのですが、ふと「authorization がなかったらエラーでクラッシュするぞ…」と気づきました。
TypeScript であれば、authorization が undefined の可能性がある場合、「Object is possibly 'undefined'」といったエラーが表示されて、その場で気づくことができます。
普段は TypeScript の型エラーに助けられていたことを、ここで改めて実感しました。
気づいたこと・学び
今回のように小さなスクリプトであればすぐに気づけるかもしれませんが、中〜大規模なプロジェクトになると、すべての値を目視でチェックするのは困難です。
だからこそ、静的型チェックによる安全性の確保は非常に重要だと感じました。
また、自分でも TypeScript を使っているつもりになっていて、実際には「any のまま」や「曖昧な型」で済ませているケースがあるなと反省。
少し時間がかかっても、しっかりと型を定義する習慣をつけていきたいと強く思いました。
まとめ
- JavaScript は型定義が不要なぶん、すばやくコードを書いて動かせますが、細かい見落としが発生しやすいことを改めて実感しました。
- TypeScript は、型定義がやや面倒に感じることもありますが、致命的なミスを事前に防げるため、開発における強力な味方です。
- 今後は、「とりあえず any」や「型を省略」といった妥協を減らし、しっかりと型定義を行う習慣を意識していきたいと思います。
これからも日々の開発の中で、こうした気づきを活かしていきたいと思います。
Discussion