Dear Great Hackers

  1. Qiita
  1. トピックス

Podcast番組 #30 | TypeScriptにのめり込んでいる理由

『エンジニアストーリー by Qiita』は、「エンジニアを最高に幸せにする」というQiitaのミッションに基づき、エンジニアの皆さまに役立つヒントを発信していくPodcast番組(無料・登録不要)です。毎回、日本で活躍するエンジニアの方々をゲストに迎え、キャリアやモチベーションに関するお話をしていただきます。

配信一覧を見る

今回の記事では、TypeScriptの入門書「プロを目指す人のためのTypeScript入門」の著者でエンジニアのuhyoさんをゲストにお迎えした回について、配信の模様をご紹介します。

uhyoさんの学生時代のお話やプログラミングとの出会い、そしてTypeScriptにのめり込んでいる理由やTypeScriptとJavaScriptの使い分け/棲み分けなどについて詳しくお話をお伺いしました。
是非ご覧ください!

プロフィール

uhyo(うひょ)
<ゲスト>
株式会社カオナビ フロントエンドエキスパート
東京大学大学院情報理工学系研究科を修士で卒業し、LINE株式会社・株式会社バベルを経て2024年1月から現職。フロントエンド領域の横断的な改善に取り組む。著書『プロを目指す人のためのTypeScript入門』(技術評論者)

 

清野 隼史
<番組ホスト>
Qiita株式会社 プロダクトマネージャー
内定者アルバイトを経て、2019年4月にIncrements株式会社(現 Qiita株式会社)へ新卒入社。Qiita Jobs開発チーム、Qiita開発チームでプロダクト開発や機能改善等を担当。2020年1月「Qiita」のプロダクトマネージャーに就任。

テーマ「TypeScriptにのめり込んでいる理由」

清野:今回のゲストは、「TypeScript入門」の著者でエンジニアのuhyoさんです。よろしくお願いします。

uhyo:こんにちは、uhyoです。2019年4月にLINE株式会社に新卒で入社しまして、そこでフロントエンドエンジニアとしてのキャリアを始めました。その後、2022年の中頃に転職しまして、今は株式会社バベルでプリンシパルエンジニアという肩書きでやっております。どうぞよろしくお願いします。

清野:よろしくお願いします。今日はuhyoさんとお話しできることをとても楽しみにしてました。

uhyo:こちらこそ光栄です。ありがとうございます。

清野:ありがとうございます。uhyoさんとお送りする第1回目のテーマは「TypeScriptにのめり込んでいる理由」です。お話を伺う前に、僕もいつもuhyoさんの記事とかとても参考にさせていただいてるんですけれど、uhyoさんの学生時代とか仕事は具体的にどのようなことをやってるのかとか意外と知らないので、最初にそのようなことをお伺いできたらなと思ってます。

uhyo:分かりました。

学生時代どのようなことをしていたのか?

清野:ということで最初にズバリ聞いていきたいなと思うんですけど、学生時代どのような勉強してたというか、どういう学生だったとかってありますか?

uhyo:高校まではいわゆる普通の進学校で勉強していたんですけれど、 大学入るときに東京に出てきました。大学院で修士まで行ったんですが、その時の専門が実はプログラミング言語理論でして、いわゆるコンピューターサイエンスのど真ん中といいますか、そういったところの勉強をしておりました。

清野:今、お話聞いて初めて知ったんですけど、uhyoさんは東京ご出身ではないんですね。

uhyo:はい。札幌出身なんです。

清野:そうなんですね。じゃあ高校までは札幌でずっと勉強してて、大学に進学するタイミングで東京に来たっていう感じですかね。

uhyo:そうです。

清野:今、プログラミングを専攻していたってお話がありましたけれど、プログラミング自体は大学入ってから勉強しはじめたみたいな感じですか?

uhyo:いえ、実はもうちょっと前からやってまして。具体的に言うと小学5年生の時からですね。

清野:小学5年生からやってたんですか…!

uhyo:はい。そうなんです。初めて与えられたWindows98のパソコンを触っていました。

清野:家にあるパソコンでプログラミングを勉強してたというか、やってたみたいな感じなんですか。

uhyo:そうです。自分の書いたプログラムをフロッピーディスクに保存していたことが懐かしいですね。

清野:すごい…!そうなんですね。プログラミングを始めたきっかけってあるんですか?

uhyo:はい。最初にプログラムを書く1年くらい前に、ウェブサイトを作りたいなって思ったんですよ。当時は2004年とかそれくらいなんですけれども、まだSNSはそんなに盛んではなくて個人サイトが非常に幅をきかせている時代といいますか。

その中で私も個人サイトをいくつか巡っていまして、自分も作ってみたいなと思って当時のHTMLの本なんか買ったりしました。それでHTMLを組んで簡単なウェブサイトなんか作っていたんですけれども、しばらくして「これ動かないな」って気づいて、動かすにはどうしたらいいか調べたんですよ。 それがJavaScriptでしたね。JavaScriptにはそのタイミングで触れています。

清野:そうなんですね。そこからずっとやってらっしゃる感じなんですね。

uhyo:はい。なので初めてのプログラミング言語がJavaScriptということになりますね。

清野:そうなんですね。たしかに、僕の知り合いとかも初めてプログラミング触った言語ってJavaScriptっていう子が多い気がします。結構みんなウェブサイトを作りたいとか、そういうところからのめり込む子がやっぱり多いんですかね。

uhyo:そうですね。当時はダイナミックHTMLとか呼ばれていた時代で、あまり大したこともできなくて。今はもうブラウザにステータスバーっていうのがないですけれども、当時はあったのでそこに文字を流して喜んでいたりとか、そういうのが最初のJavaScriptとの出会いでしたね

清野:そうなんですね。じゃあプログラミング歴って、今どれぐらいになるんですか?

uhyo:JavaScript歴18年です。

清野:18年…すごい!僕は大学に入ってからプログラミング始めた口で、本当にまだ7、8年ぐらいなので大先輩だなと思いました。
お話の中でウェブを触っててってお話もありましたけれど、元々インターネットとかが好きだったんですか?

uhyo:インターネットはどうして好きだったのかっていうのも正直覚えていないんですけれど、当時、それこそWindows98の時代にインターネットの回線が実家にあったわけですね。そこから自然にという感じなんだとは思います。

清野:僕も小学生の時実家にパソコンあったなと思いつつ、ウェブサイト作ろうとか全然思わなかったので、やっぱり当時からもの作りが好きだったんですね。

そこから大学に入ってプログラミングの勉強をやってらっしゃっいますけれど、最初はウェブ開発みたいなところからプログラミングを始めて、大学ではどっちかというとサイエンス系っぽいことをやってらっしゃったんですね。勉強をする内容とか、違いとかってありましたか?

uhyo:そうですね。大学での研究はプログラミングというより、どっちかというと数学というような状態でしたね。プログラムの書き方を勉強するのとはかなり違っていました。大学生なので曲がりなりにも論文みたいなものを書くんですけれど、具体的なプログラムなんて全然出てこなくて、本当に数学の論文か?みたいなものが15ページくらい並んでいるんです。そういったものの書き方とか理論とか、そういうのを大学では主に勉強していましたね。

清野:そうなんですね、あるあるですよね。プログラミングやりたくて大学に入ったけど意外とプログラミングやらないみたいな。なんやかんやで独学でやってるみたいな。

uhyo:そうですね。私も大学時代、ウェブに関係するプログラムは結構書き続けてはいましたけれども、ほとんど独学でしたね。

清野:そうなんですね。ぶっちゃけ大学生活って楽しかったですか?

uhyo:それで言うと結構楽しかったですよ。コンピューターサイエンスの理論的な部分もやってみたいなと思って選んだところではありますので。それで勉強したことっていうのは結構満足しているといいますか、やって良かったなと思っています。

清野:そうなんですね。ありがとうございます。当時ってウェブサービスみたいなのってどういうものを作っていましたか?

uhyo:小学生、中学生くらいの時はウェブでちょっとしたゲームが遊べるっていうのがあって、それがいわゆるCGIゲームの時代だったんですね。掲示板とかも当時はプログラミング言語で言うとPerlとかで作られているものが多くて、私も結構Perlを触ってそういったプログラムを作ていました。

当時「箱庭諸島」っていうCGIゲームがあったんですよ。みんなでコマンドを実行して自分の島を作っていくっていうゲームなんですけれど、そのサーバーがPerlで組まれていまして。なので私はそのソースコードをダウンロードしてちょっと改造して、自分のサービスとして公開していたこともありましたね。

清野:そうなんですね。それやってたのって2000年代とかじゃないですか?

uhyo:そうですね、2000年代です。その後、2010年代になってからNode.jsと出会いまして、PerlじゃなくてそこからJavaScriptでサーバーが書いていくようになるんですけれども、その前がPerlでしたね。

清野:じゃあ本当にCGIで、各時代からずっとやっていたんですね。大学の頃はどういうウェブサービスを作ってましたか?大学の時点でプログラミング歴十数年とかですよね。

uhyo:多分それくらいはありますね。

清野:ですよね。その時にどういうコード書いてたのかなっていうのが、すごい気になります。

uhyo:大学時代も結構ずっとメンテナンスしていたものがあります。高校時代にNode.jsで組んだものなんですが、人狼っていうゲームをテキストベースでチャットで会話しながらオンラインでできるっていうサービスです。それは2010年か2011年かそれくらいに作ったもので、大学に入ってからも社会人になってからもずっとメンテナンスしつづけているサービスの一つです。

清野:そうなんですね。じゃあ結構作って終わりじゃなくて、それをちゃんと運用しているというか、ずっとメンテナンスもやってらっしゃるんですね。

uhyo:そうですね。実はそれ以外にはサービスって呼べるものはあまり作っていなくて。特に大学に入ってからは、どちらかというとちょっとしたHTML1ページで終わるような簡単なものとか、あるいはNode.jsだとNPMで公開するようなライブラリとか、そういうのを作るほうに少しずつ興味が移っていってましたね。

清野:そうなんですね、じゃあものづくりっていうところも、いろいろやりながら新しい領域もやりつつみたいな。

uhyo:そうですね。

清野:小さいときにプログラミングを始めてみるのはすごくなるほどなと思ったんですけど、uhyoさんってそこがずっと続いてるわけじゃないですか。ずっと続けられてるってことはたぶん好きだったり、面白いと思ってるのかなと思うんですけれど、そこの面白さについて聞いても良いですか?

uhyo:そうですね、月並みではありますけれど、やはり自分の書いたものがちゃんとその通りに動くこと。これは結構自分にとって面白い体験だったな思いました。

当時はまだ子どもだったので、機械が自動的に動くってだけでも、すごいことのように感じるんですよね。しかもそれは自分が書いた通りに動くものであって、自分の作りたかったものを作れるわけですね。そういったところに喜びを感じていたなと思っています。

清野:そうなんですね。大人になってもずっと続けていらっしゃるそこの面白さって、ずっと同じ感じなんですかね?

uhyo:そうですね、今でも思いついたものを結構すぐ作りたくなるたちなんですよ。ちょっとしたギャグっぽいものとか、そういったものを最近は作ることもあって。

そういうのを思いついたら、もうそこからずっと空いてる時間は手を動かしていないと気が済まないようなたちで、それで公開までいって満足するとか、そういうことを最近でもやっています。それは小さい時からずっと変わらないといいますか、そういうところに面白さを感じているのかなと思います。

清野:本当にずっとプログラミングを使ったものづくりとかそういうのが面白くてやってらっしゃるっていう感じなんですね。

uhyo:そうですね、それは根本にあると思います。

清野:なるほど。ありがとうございます。

今TypeScript以外にのめり込んでいるもの

清野:ちなみになんですけれど、プログラミング以外に趣味って何かありますか?プログラミングのお話はいっぱい聞くなと思いつつ、それ以外の趣味とかあるのかなって思いました。

uhyo:プログラミング以外は普通のオタクみたいなものですよ。ゲームなんかは好きですし、逆に言うとゲームくらいしかプログラミング以外に大きい趣味はないかもしれないですね。

清野:普段ゲームとプログラミングやってる時間の割合ってどんな感じですか?

uhyo:最近は半々くらいです。

清野:そうなんですね。すごいな、本当にプログラミングが好きでずっとやってるって感じなんですね。

uhyo:気づけば人生もうずっとやっていますね。

清野:もう根っからのハッカーですね。ものづくり楽しいってところから今社会人になってお仕事も実際されてると思いますが、仕事になるとまた事情が変わるのかなって思っています。趣味を仕事にしたら趣味のこと嫌いになっちゃったとか、そういう話も世の中って結構あると思うんですよね。そのあたりの感覚ってどうですか?

uhyo:そうですね、仕事で書くプログラムと趣味で書くプログラムは、なんだかんだ結構違うものだなと思いますね。仕事だと個人で書くものよりも更にメンテナンス性などを重視しないといけないとか。他のメンバー がスムーズに理解できるというか、いわゆる読みやすくてメンテナンスしやすいコードですね。趣味で書くよりも、そういったところに比重が大きいというところで違いを感じることがありますね。

清野:ありがとうございます。仕事でコードを書いて世の中にプロダクト出していくってなると、今お話しいただいたようなことを考えないといけないなと思うんですけど、そこを考えるのは鬱陶しいなと思ってるのか、もしくはそれはそれで楽しんでるのかでいうと、どういう感じですか?

uhyo:結構楽しんでいますね。メンテナンス性が高いコードを考えた時に、それって結局どういうコードなんだろうかと、技術の記事も書いたこともありますし。論理立てて考えられるところかなというふうには思っています。その論理立てで考えるプロセスは私は結構好きなので、その意味では、仕事のために必要なことも楽しんでやっているかなと思います。

清野:そうなんですね。プログラミングと文脈がまたちょっと違う考え方をするところも楽しめているんですね。

uhyo:そうですね、私にとってはプログラミングの楽しいところの一つといいますか、そう思ってます。

清野:それを含めてプログラミングってことですね、ありがとうございます。uhyoさんのお話を伺って、本当にプログラミングやものづくりがお好きなんだなと改めて感じました。ありがとうございます 。

TypeScriptとJavaScriptの使い分け/棲み分け

清野:先ほどからJavaScriptのお話とかを聞いてきましたが、uhyoさんはTypeScriptの人という印象が、僕の中ですごくあって。TypeScriptを好きになった理由とか、いつぐらいからTypeScriptを触ってるのかについて、お伺いしても良いですか?

uhyo:TypeScriptを最初に触ったのは2013年か2014年か、それくらいですね。

清野:TypeScriptが出たのって2011年とかでしたっけ?

uhyo:たしか最初のパブリックバージョンが出たのが2012年とか、それぐらいだったような気がします。

清野:本当に初期の頃からTypeScript触ってるってことなんですか?

uhyo:そうですね。当時は主にJavaScriptでサーバー側のNode.jsのプログラムなんかも書いていたときで、どこから情報仕入れたのかもう忘れちゃいましたけれど「TypeScriptっていうものがあるらしいぞ」と聞きつけてですね。早速、当時作ろうと思っていたプログラムに組み込んでみたというか、取り入れてみたんですよ。それで、これは普通に良いなというふうに思いまして、そこからは基本的に、JavaScriptを使うときはTypeScriptで書くっていう習慣が始まっていきましたね。

清野:良いなって思ったことって、具体的にどういうことなんですか?

uhyo:当時のそれまでの私は、いわゆる静的片付け言語っていうのをあまりやっていなかったんです。だってJavaScriptとPerlですから、主に関係ないですね。子ども時代にJavaもちょっとやってみようかなと思ったんですけれど、Public static void mainが何回やっても覚えられなくて挫折してしまって、そちらの道にあまり行かなかったんです。なので初めての静的型付けの言語というのがTypeScriptだったんです。それもTypeScript良いなと思った一因なのかもしれないですね。

清野:なるほど。そこで型に対しての印象が変わったみたいな感じなんですか?

uhyo:そうですね。それまで特に型を嫌っていたというわけでは全然ないんですけれども、ちゃんと型のあるプログラミングと言うんですか、初めてしっかりと体験しまして。それはTypeScriptの印象として私の中ではやっぱり強いところですね。

清野:そうなんですね。逆にTypeScript以外の静的型付け言語にもちょっと興味があるとか、実際触ってるみたいなことあるんですか?

uhyo:大学時代に入ってから結構やっていまして。TypeScript以外だとよく触っていたのはOCaml、Rustなどの辺りですね。

清野:そこら辺も関数型言語も触るし、いわゆる手続き型っぽいやつも、新しいパラダイムのやつも触れればみたいな感じだったんですか?

uhyo:そうなんです。特にOCamlはまさに関数型言語なんですけれど、実はこれ大学の授業で習いまして。講義を通して関数型の考え方を知って「こんなものもあるんだ、面白いな」と思った記憶がありますね。

清野:そこでの経験が、TypeScriptの知見とかテクニックにつながってるとかってあったりしますか?

uhyo:大いにあると思います。特にOCamlから学んだ関数型的な考え方というか更に論理的なところだと、いわゆるカリー・ハワード同型とかの辺りもちょっと勉強はしたんですけれど、そのような考え方は関数型言語だけではなくて、一般のプログラミング言語にも通じるところがあると思ってまして。実際、その考え方は役に立っています。

清野:確かに最近の言語って、手続き型言語でも関数型言語のエッセンスを取り入れていく流れがあるというか。

uhyo:そうですね。

清野:どちらの書き方もできるようなのが多いので、確かにそのあたりを勉強しておくと参考になるのかなと改めて思いました。ありがとうございます。

あとはちょっとトレンドっぽい話にもなるかなと思うんですけれど、TypeScriptとJavaScriptの使い分けについてお伺いしたいです。どこでもTypeScriptを使ったほうがいいのか、それともこういう場面だったらJavaScriptでも良いよねとか、ここは逆にJavaScriptじゃなくてTypeScriptのほうが良かったとか、そういうのがあるかお伺いしてもいいですか?

uhyo:私は結構何でもTypeScriptにしちゃうほうで、逆にあえてTypeScriptを使わなくてJavaScriptで良いやって思うのは、それこそ1ファイルでちょっとシェルスクリプトの代わりに使うみたいな、それくらいのことが多いかなと思います

清野:その理由って何かありますか?

uhyo:単純に、TypeScriptの提供する型があって損はないというか、あって困ることが特にないんですよね。TypeScriptをしてしまうと、いわゆるトランスファイルが挟まるのが面倒くさいというような考え方もあると思うんですけれど、それこそ電脳などのツールが障壁を取っ払ってくれているかなと思いますので、TypeScriptを使わない理由がないというのが正直な感想ですね。

清野:なるほど、ありがとうございます。これからも様々な論争を呼ぶかもしれないんですけど、TypeScriptは型を書けるメリットがある一方、型を書かないといけないみたいな語られ方をする場面もあるかなと思ってて。そこら辺ってどう考えてますか?型を書くことの億劫さをどう考えているか、ですね。

uhyo:そうですね、本当に小さいプログラムだったらいちいち型を書くの大変だなみたいな気持ちも分からなくもないですけれど、一方ある程度ちゃんとしたプログラムであれば、型っていうのは確かに実際の動作には関わらないですが、プログラムの設計の一部だなというふうに私は思っています。

型を書くにしろ書かないにしろ、例えばインターフェースとかそういったものの設計はあると思うんですよね。であればそれが頭の中なのかドキュメントなのか、そういった別のところにあるのか、それともソースコードの上に型として書かれているのか。そういう違いなんじゃないかなと私は思っております。

清野:なるほど、じゃあそもそも型を書かなければ型のことは考えなくて良いってことはないってことですかね。

uhyo:そうなんですよね。これもよく言われますけど、型を書かない人はたぶん頭の中に全部型に相当するものが入ってるんだとか、そういう言い方もたまにされますね。

清野:なるほど、確かに動的型付け言語でも最近アノテーションもちゃんとつけるというか、型は書いてないけどドキュメントは書いてるみたいなのは多い気がするので、結局そういうことなのかなって僕も今お話聞いてて感じました。

uhyoさん、今日はありがとうございました。

このエピソードをPodcastで聞く

さいごに

「エンジニアストーリー by Qiita」は、近年高まるエンジニア向けPodcastのニーズに応え、エンジニアのキャリア形成に有益な情報を発信しています。興味のあるテーマを見つけて配信を聞いてみましょう!

配信一覧を見る

関連記事