こんにちは、テックフィード白石です。
日本のエンジニア界隈をリードするエキスパートに、テクノロジーの最前線を語っていただくYouTube動画連載「Ask the Expert」の新着動画が公開されました!
今回は、TypeScriptのエキスパートうひょさんに、TypeScriptの最新動向について詳しく伺ってきました。
うひょさんのアカウントをぜひフォローしましょう!
うひょさん(株式会社カオナビ フロントエンドエンジニア)
ついでに白石のもフォロー推奨:
聞き手: テックフィード白石
以下に掲載するのは、インタビュー動画の内容の要約です(正確な書き起こしではありません)。
内容をフルにご覧になりたい方は、ぜひ動画をご視聴ください。
(ご質問、ご感想などはYouTubeのコメント、もしくはこの記事のコメント欄でも受け付けております)
TypeScript史上初めてのdeprecation
うひょ:今年の3月に、TypeScript 5.4という新しいバージョンがリリースされたことは記憶に新しいと思うんですけども、公式リリースノートから気になったトピックを持ってきました。
簡単に言うと、昔からある古いTypeScriptオプションの効果が一部なくなる ということですね。TypeScriptはかなり後方互換性に厳しくて、10年前と同じ設定でもそのまま動き続けるように作られてきたのですが、古いオプションを整理しようとしています。ちょうど1年くらい前のTypeScript 5.0から始まっていまして、バージョン10個をまたぐ大きな計画だったんです 。
白石:10個またいで、どんどんdeprecationしていくんですね。
うひょ:はい。TypeScript 5.0でコンパイラからワーニングが出るようになりました。その時点ではワーニングが出るだけでまだ動き続けたんですけど、5個後のバージョン5.5では動かなくなります。さらに後のバージョン6.0では、指定されると知らないオプションだということでエラーになります。この3つのステップでdeprecationが進みます。
白石:期間で言うとだいたいどれぐらいですか? バージョン6というのはいつ頃出る予定なのでしょうか。
うひょ:マイナーバージョンアップ1つが3か月。今から6バージョン先だから、18か月後ですね。
白石:だいぶ先ですね。
うひょ:でも、今回deprecationされるオプションを使っている方は、3か月後の5.5でもう動かなくなってしまうので対応が必要です。今回、そういう予告として、5.4のリリースノートに追加されているので、もしこれをご覧の皆さんで ワーニングが出ている方がいたら、期限はあと3か月です。気にしておいてください。
isolatedDeclarationsオプションとは?
うひょ:isolatedDeclarationsはTypeScriptのビルド高速化プロジェクトのようなもので、最終目標はこのisolatedDeclarationsというオプションをTypeScriptに追加することです。1年以上前からアナウンスされていて、主にブルームバーグの方々が中心的に取り組んでいます。
白石:メディア企業のブルームバーグですか?
うひょ:そうです。継続してエンジニアの方がTypeScriptにコントリビュートするという形ですね。
白石:なるほど。これは具体的にはどういうものなのでしょうか?
うひょ:一言で言うと、サードパーティのツールでも、TypeScriptのコードから型定義ファイルが生成できるようにしよう 、というものです。従来、型定義ファイルの生成はTypeScriptコンパイラにしかできなかったのですが、それをサードパーティーの型定義生成ツールでもできるようにしたい。
というのも、今TypeScriptのコードはコンパイラに頼らずにJavaScriptに変換できる時代になっているからです。Babelに始まり、SWCやesbuilldといったツールでもTSからJSへの変換、いわゆるトランスパイルはできるようになっています。
だから遅いと言われるTypeScriptのビルドの中でもそこはボトルネックではなくなっていたんですけども、 型チェックはTypeScript本体にしかできなくて 、ビルドの中でも一番遅い部分です。
TypeScriptにコンパイルオプションisoratedDeclarationsが追加されると、 サードパーティーのツールでもd.ts(型定義ファイル)を出力できるかをチェックしてくれます。
うひょ:つまり、TypeScript本体でisolatedDeclarationsを有効にしてその状態でも大丈夫なコードを書くことによって、サードパーティーのツールでも.d.tsが生成できることが保証されるんです。
白石:なるほど。これはつまり、 サードパーティのツールにとって型定義ファイルを作りやすいコードを書かないといけなくなる、というオプション なんですね
うひょ:その通りです。 型推論に頼らずにひたすら型を明記し続ける必要がある ような状態にはなりますので、実用性を疑問視する声もあるのですが、 ビルド速度は何ものにも代えられない ということで、開発チーム内でも前向きに検討が進んでいます。
Correttore - 「いいとこどり」の新たなバリデーションライブラリ
うひょ:これまではTypeScript本体の話だったんですけども次はちょっとエコシステム寄りなお話です。
TypeScriptのバリデーションライブラリでよく聞くのはzodやyupで、今一番広く使われていると思われるのはzodでしょう。また、最近はValibotというのも出てきていますが、今回私が紹介したいのは、「Correttore」です。
うひょ:zodやyupはメソッドベースのAPIになっていて、読み書きに便利ですが、Tree Shakingが効かないのが難点です。そこで出てきたのがさっきのValibotで、メソッドを使わずに全部関数にすることでTree Shakingが効くようになりました。しかし、その分APIにやや使い辛い部分があります。
Correttoreはzodと同じようにメソッド定義の形で使えて、しかもTree Shakingが効く という、いいとこどりのAPIになっています。これを支えているのは、initCorrettore()を1回挟むAPIなんですね。
initCorrettore()に、minLengthなどを明示的に渡すというステップを挟むことによってTree Shakingが効くし、その後はメソッドの形で使えるようになっています。
白石:なるほど。
うひょ:開発者本人が書いたブログのタイトルが「Nobel technique」、つまり全く新しいテクニックだということで、 私はこういう新しい考え方が大好き です。
白石:メソッドチェーンの形式で書けるけれども、Tree Shakingが効いているのでサイズが小さいということですね。
うひょ:はい。バリデーションライブラリはTypeScriptユーザーの間でも最近かなり広く使われていると思います。Tree Shakingというのはフロントエンドの話題ですが、フロントエンドでもサーバーサイドでも、TypeScriptユーザーの間では最近バリエーションライブラリが馴染みのあるものになってきているので、そこにこういう新しい選択肢を加えていただけると嬉しいですね。
@geometry dash この動画はすごく興味深いですね!TypeScriptの最新動向に関する情報がリードエンジニアから直接得られるって素晴らしいです。特に、TypeScriptのdeprecationや新しいバリデーションライブラリの紹介は、開発者にとって非常に役立ちそうです。また、開発者が新しいテクニックを取り入れているという点も面白いですね。これからの動画も楽しみにしています!