Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
TypeScript Compiler APIを使って 型のユニットテストをブラウザーで動かす nagoya.ts
Slide 2
Slide 2 text
2. デモ 3. @typescript/vfs 目次 5. できあがったもの 1. 自己紹介 4. 外部ライブラリの型解決
Slide 3
Slide 3 text
自己紹介 @steelydylan https://x.com/steelydylan
Slide 4
Slide 4 text
妻と2歳の息子の3人暮らし サービス開発してます 小さな会社やってます 自己紹介 個人開発が大好きなWebエンジニア!特にフロントエンドの領域が好き
Slide 5
Slide 5 text
【宣伝】mosya Reactというサービスをリリースしました! 初学者だけでなく現役の方にも楽しんでもらえる勉強になる教材を用意してます!
Slide 6
Slide 6 text
今回の発表ではこの前作であるmosya TCの型採点機能について ブラウザーで書いた型が正しいかテストできる!
Slide 7
Slide 7 text
このサービスで今回発表したい機能 フロントエンドでの型採点機能 実際にみてみましょう! https://mosya.dev/type-challenges/challenge-trim
Slide 8
Slide 8 text
なぜブラウザーで型採点を実現しようと思ったか 採点速度向上でUX改善 コードをサーバーに送ってサーバーサイドでテストするよりも早い 余計なサーバー通信が発生しないのでコストを抑えられる mosyaではプレビューや採点はすべてブラウザーで実行されてるの でコストがかなり抑えられている なによりかっこいい 本来実現困難なことがブラウザーでできたらかっこいい 😎
Slide 9
Slide 9 text
ブラウザーでTypeScriptを利用する際の最大の障害 FileSystemの再現
Slide 10
Slide 10 text
ブラウザーにはfsがないので基本的には tsを実行できないのだ。 。 。
Slide 11
Slide 11 text
どのように実現したか
Slide 12
Slide 12 text
@typescript/vfsを利用しました!
Slide 13
Slide 13 text
@typescript/vfsとは MapをつかったTypeScriptのファイルシステム これを使うことでフロントエンドでもファイルシステムの再現が可能になりコンパイルできるように なる!
Slide 14
Slide 14 text
ts.Systemの再現 ts.Systemは readFile や writeFileなど、実際にファイルを読み書きするためのAPI 本来はフロントエンドではこのAPIが動かないためコンパイラが動かない。 。 。 @typescript/vfs を使うことで下記のコードで簡単にメモリベースのts.Systemができる
Slide 15
Slide 15 text
ts.CompilerHostの再現 コンパイル環境用のAPI。このAPIによって実際にTSファイルのコンパイルができる 今回は実際のファイルではなく、メモリ上のファイルをコンパイルするのでこれもバーチャル化する ことができる @typescript/vfs を使うことで下記のコードで簡単にコンパイラーホストの再現ができる
Slide 16
Slide 16 text
ts.Programの作成 実際に書いたコードを評価するためのProgram APIを用意します
Slide 17
Slide 17 text
コードの評価結果を取得 Program APIのemit関数で評価結果を取得できます!
Slide 18
Slide 18 text
node_modules内のライブラリに 依存する場合はどうするの?
Slide 19
Slide 19 text
TypeScriptの標準ライブラリの場合
Slide 20
Slide 20 text
TypeScriptの標準ライブラリの場合 lib.es2022.d.tsなどの標準ライブラリ @typescript/vfsがTypeScriptの標準ライブラリを読み込むためのAPIを用意されて る!!
Slide 21
Slide 21 text
例えば、@types/reactなど特定のライブラリの場合
Slide 22
Slide 22 text
あらかじめライブラリの型情報をjson化しておく mosyaではレッスンごとにこんな感じのファイルを自動生成している https://static.mosya.dev/react-props-typescript/deps.json
Slide 23
Slide 23 text
用意したJSONを先ほどのfsMapにセットしていく 先ほどのfsMapに新しく取得した型情報をセット
Slide 24
Slide 24 text
以上を踏まえて。 。 。
Slide 25
Slide 25 text
型テストをブラウザーで行うためのライブラリーを作りました! 以上の知識をまとめてこんな感じでブラウザーでテストを実行できるライブラリを つくりました!!!
Slide 26
Slide 26 text
おまけ
Slide 27
Slide 27 text
@typescript/vfsはどこでつかわれているのか? TypeScriptのドキュメントなどでよく使われるTwoslashなどで使用されている
Slide 28
Slide 28 text
以上です!! 懇親会等でぜひ仲良くしていただけたら嬉しいです!