『実践TypeScript』の著者・吉井健文が考えるTypeScriptの魅力と可能性

世の中にはさまざまなプログラミング言語が存在します。そして、人によってはただならぬ愛着を持つ人も。そこで本企画では、このプログラミング言語にフォーカス。お気に入りのプログラミング言語のことをマニアックに語っていただくとともに、知識の獲得方法などについてお伺いします。第2回にご登場いただくのは、書籍『実践TypeScript ~ BFFとNext.js&Nuxt.jsの型定義~』の著者・吉井健文(@takepepe)さんです。

Offers MGR」は、プロダクト開発組織の生産性を最大化したい企業・担当者の皆さま向けのサービスです。個人、チームの業務プロセス・生産性を可視化し、皆で強いチームを作っていきませんか?

→Offers MGRをもっと詳しくみる!

JavaScriptらしさを支える型システムだと感じた

エンジニアになる前はデザイナーとして活動されていたという話を伺いました。どうしてエンジニアになろうと思ったのでしょうか?

デザイナーといってもすごく昔の話なんですけど、僕が仕事を始めたときはFlash全盛期で。Webサイトをデザインしてコーディングするまで一貫して請けるのは、珍しいことではありませんでした。後からコードも書けるようになったものの、どっちつかずなスキルセットが腑に落ちず、どちらかのスキルに尖っていきたいと思うようになったからなんです。

それでエンジニアになったと。なんとなくイメージが湧きました。そのなかでTypeScriptに興味を持つようになったきっかけは何だったのでしょうか。

会社で使っていたコードがflowtypeだったのですが、一部のコードをライブラリとしてOSS(オープンソースソフトウェア)にして配信できそうだと考えたんです。当時はflowtypeとともにTypeScriptも話題になり始めている時期でした。それならば、両方に対応しないとなって。

それで初めてTypeScriptを触ったんですけど、型推論の強さにまず惹かれました。プログラマーが書いたコードのルーツを辿れる表現力があって。その頃は、Conditional Typeという機能が搭載されたばかりの時期です。それがもう衝撃的で。自分が考えていた型の概念を覆されたというか。JavaScriptは柔軟な言語で、完璧に型安全にするハードルはかなり高いと思うのですが、それをカバーできるだけの表現力があるなと感じたんです。

その点は優秀ですよね。僕自身、過去にUnityでC#を使ったことがあるんですけど、厳密に型を定義しないといけない上にコード量が多くて疲れてしまいました。TypeScriptはそういうことが少ない気がします。

よりベストな形を目指していける感じがしますよね。型があるコードに対しても、ないコードに対しても、要望を受け取ってくれる。そんな懐の広さを感じます。あと途中で違うコードに置き換えるときもそこまでハードルが高くないので、取り組みやすいのかなと思います。

私もTypeScriptを使うことがあるんですけど、初動だと厳密に型を定義でない場合があるじゃないですか。そういうときに、後から置き換えればいいやという感じで楽に進められますよね。

テストを書いてから進めるか、書かないで進めるかみたいな話に似ていますよね。ひとつずつ確実に定義していくか、速度を最優先にするのかっていう。後から対応するのは大変なので、始めからきちんとする方が、もちろんおすすめですけど(笑)。

こんなこともできるの!? という驚きをエンジニアに届けたかった

『型の強化書』はどういったきっかけで書かれたのでしょうか?

先ほど申し上げたように、僕がTypeScriptに触れたのはver2.8になった時。このタイミングで、技術書典の出展権利がたまたま当たって。それで同人誌として、TypeScriptの魅力を自分なりの視点で書くことにしました。

同人誌発なんですね。

はい。そうしたら、たまたま出版社の方が手に取ってくれて。それで商業誌執筆のお誘いをいただいたんです。

正しい同人誌からのステップアップですね。

本当にラッキーだったとしかいいようがなくて。今でこそTypeScriptは誰もが注目している技術だと思うのですが、当時はその斬新な型システムの存在を認知している人はほとんどいなくて。だからこそ、書き下ろす題材に困ることがありませんでしたね。

あの本の魅力って、ベースとなるライブラリの説明があった上で、TypeScriptを導入する場合のことがサンプル付きで丁寧に書かれていることだと思うんですよ。それも普及させたかったのでしょうか?

そうですね。TypeScriptの最大の魅力は、参入ハードルの低さ。一方で、誰でもなんとなくで書けてしまう。それはすごく良いことでもありつつ、裏を返せば正しくない型定義が蔓延する可能性が高いことを意味します。そうすると、現場として導入するにはリスクが伴うじゃないですか。

確かに。

それに僕自身、腑に落ちないライブラリがあって。それに対してオフィシャルからはっきりとした説明がなかったので、掘り下げたいと思ったんです。だから、いろんなアプローチをしました。

未知の領域に挑戦していく、みたいな。

そうですね。こんなこともできるの!? という驚きを同じエンジニアに届けたいと考えました。それに人の数だけアプローチの仕方があると思うんですよ。それに対して、自分が良いと思う方法を試す過程が楽しくて。だから、本の構成も第1章でこういう推論型があるよってことを説明して、第2章で組み合わせを解説、そして第3章以降で問題点を解決するようにしていて。自分の創意工夫やアイデアを練り上げて提示しています。

アプローチの仕方が決まっていたら、興味を惹かれなかった

あらためてTypeScriptの魅力はどんなところにあると思いますか?

アプローチの仕方によって新しい可能性が生まれるポテンシャルが、何よりもある気がします。僕がTypeScriptに惹かれたのも、まさにそこですし。

アプローチの仕方が決まっていたら、興味を惹かれることはなかったと。

何かの課題に対して、発想力をもとにエンジニアリングで解決できるのが面白いですよね。オフィシャルから「このようにしてください」と明示していないからこそ、僕もいろいろ挑戦したいという意欲が湧きました。

あと、現在進行形で進化している点も大きいです。今までできなかったことが、寝て起きたらできるようになっているなんてこともよくある。先日発表されたばかりの「Template literal types」は大変注目を集めましたが、このような革命が起こるとワクワクしますよね。

機能強化が追加されるにつれ、どんどん表現力が向上し、ひいてはランタイムコードの設計を覆すぐらいの影響力を持ちます。

そういう意味では、一つの文化というか、時代を作るみたいな感覚に近いかもしれないですね。

そうですね。TypeScriptにそういった表現力のポテンシャルはあるんですけど、明文化されていませんでした。だからこそ、本にしようと思ったんです。それをきっかけに僕より若くて優秀なエンジニアたちが触発されて、様々なアプローチをしている姿を見るのが、僕自身勉強になるし、すごく嬉しいです。

そういう意味では、TypeScriptは今が旬というか。

そうですね。巷でよく言われている「型パズル」は、バージョンを重ねることで表現力が増すので、それによってできるようになった解法があります。それ以外にも「CompilerAPI」というものがあって、それを使うことでできる解法もあります。また、両方のアプローチが合わさるようになれば、さらに難解なことも実現できるようになる。それを僕はひたすら言い続けているので、面白がっていただけたているんじゃないかと自負しています(笑)。

これからTypeScriptを学びたいというエンジニアは、どういったことを意識するといいでしょうか。

JavaScriptライブラリといえど、もはやTypeScriptの型定義がないようなライブラリは、技術選定の段階で除外され始めています。そして、どのようなI/O(入出力規格)が備わっているか、型定義から読み解くことが当たり前になってきています。

だからこそ、ライブラリの裏側が、どのような型定義で支えられているのかをよく見てほしいです。そうすることで、一見使い所が分からない難解な型について実例を見ることができるし、学び取れることが多いと思います。

過程から学べ、と。

いろんな人の工夫やアイデアが積み重なって型定義ができあがっていくわけですからね。それを人任せにするのではなく、自分たちで開拓していくことは、本当に楽しいですよ!

インタビュー:kgsi
編集:村上広大

この記事をシェア

関連記事


副業・フリーランス

プログラミング

インタビュー

デザイン

お金

採用・組織

転職

イベントレポート