【宣伝】『プロを目指す人のためのTypeScript入門』4月22日発売!
2022年4月11日 公開
皆さんこんにちは。先日、私が書いたTypeScriptの入門書『プロを目指す人のためのTypeScript入門』が発表されました。この本は4月22日発売で、すでにネット書店などでは予約受付中です。また、電子版も発売の予定があります。この記事ではこの本を宣伝します。
同出版社の『プロを目指す人のためのRuby入門』がチェリー本と呼ばれているのに合わせて、この本はブルーベリー本やベリー本と呼ばれているのを見かけました。そのような愛称がつくと嬉しいですね。
どんな本なの?
タイトルにもある通り、TypeScriptの入門書です。
具体的な内容については、技術評論社のWebサイトで目次が公開されていますので、それを見ればおおよそ把握することができるでしょう。扱う範囲としては以下の通りです。
- TypeScriptという言語そのものに注目し、周辺のエコシステム(フロントエンド開発、サーバーサイド開発など)には触れません。(ただし、コードを動作させる学習環境が必要なのでそのためにNode.jsに少し触れています。)
- 言語機能や型システムそのものの解説を重視し、実際に面白いプログラムを組んだりはしません。FizzBuzzくらいは書きますが、ToDoアプリは作りません。1ページまるまるソースコードが続いていて写経させるようなことはありません。
対応TypeScriptバージョンは?
発売時点の最新版であるTypeScript 4.6です。
対象読者は?
タイトルにある通り、プロを目指す人です。
知識面では、まったくプログラミングを経験したことがない人だと少し厳しいという難易度設定になっています。具体的には「変数」や「関数」といった概念を全く理解していない人向けの説明は用意していないので、前提知識として「変数とは何か」とか「関数とはどんなものか」といったことのイメージがついている必要があります。すでに他の言語を経験している人や、少し独習したという人ならば問題ないでしょう。
「プロ」という言葉は語感だけで使っているわけではありません。本書の「はじめに」には次のように書きました。
プログラミングの成果物というのは、何か求められたとおりの挙動をするコードです。しかし実は、あなたが書いたコードが期待どおりの挙動をすることは、プログラミングのスタートラインにすぎません。そのコードに、バグが発生しにくい、ほかの人が読んだときにわかりやすい、将来にわたってメンテナンスしやすいなどといったさまざまな付加価値を与えることで、あなたのコードはプロレベルのコードとなります。そのようなコードを書けるようになるための方法は、自分が書いたコードを説明するための理屈を身につけることです。
何となくコードを書いて何となく動く、ということは本書の読者のゴールではありません。この本は入門書なので、この本を読むだけでここでいう「プロ」になれるわけではありませんが、この本はそのための基礎固めをするという意味での「入門」書なのです。
そのために、本書では「ただ動いて面白い」ことをゴールとしない、体系的かつ厳密な説明を重視し、読者が「プロ」になるまで使える有用な知識を提供します。筆者の経験上、TypeScriptエンジニアとしてレベルの高い現場でレベルの高い動きをするためには、TypeScriptに対するしっかりした理解が不可欠です。それがあってこそ、チームとしてTypeScriptに関する意思決定を行い、コードのクオリティを高く保つことができます。そのような環境を維持しリードするエンジニアになりたい方は、ぜひ本書を手にとっていただきたいです。
内容のレベルは?
前述の通り、前提知識は「変数とは」くらいのもので、TypeScriptのさまざまな言語機能を1から説明します。他の言語でもいいので何かちょっとでもやっていれば、TypeScriptに関する前提知識は一切いりません。また、JavaScript既習者がTypeScriptの学習に進むというのはよく聞く話ですが、本書はJavaScriptの知識が無くても読むことができます。
言語機能の範囲としては、モジュールの取り扱いや非同期処理、async/awaitなども含め、普段のTypeScriptプログラミングで必要になる機能のかなりの部分をカバーしています。省かれているのはイテレータ・ジェネレータやシンボルなど今のところ使用頻度があまり高くない機能や、Object.keys
などメタプログラミング寄りの機能です。また、組み込み関数やメソッドなども必要最低限のものだけ紹介し、網羅していません。どうせプロのエンジニアでも今どきは全部暗記していないし検索するので、本に全部載っている必要は無いというスタンスです。
型システムに関しては、ユニオン型・リテラル型などを使いこなせるレベルまで読者を導きます。本書は第1章〜第9章までありますが、実はユニオン型やリテラル型などの紹介を含む第6章が最もページ数が多く、力が入っています。実際、この辺りの型をしっかり使いこなしてこそTypeScriptらしいプログラムが書けますから、プロを目指す人のための入門書としては是が非でも力が入るところです。
ただ、それより上の領域(いわゆる型レベルプログラミングと呼ばれる領域)には、残念ながら踏み込んでいません。具体的にはmapped typesやconditional typesといったところですね。これらも業務で使うときは結構使うのですが、さすがに入門書で扱う内容ではないと思ったので、名前を紹介するくらいにとどめています。
アピールポイントは?
細かいですが、用語は原則として「文 (sentence)」のように英語での名前も合わせて紹介するようにしています。そのおかげもあり、索引はA〜Zの分量がかなり多いです。これにはレベルの高いTypeScript使いは英語圏の情報にも触れなければならないという意味もありますし、エラーメッセージの読解のためという意味もあります。また、エンジニアたるものいざという時に一次情報に当たらなければいけませんが、用語の多くは英語で書かれた仕様書で定義されていますから、それを尊重するという意味合いもあります。
書かれている内容はかなりしっかりしていて丁寧です。何しろ、スコープをTypeScriptの言語仕様という入門書としては狭いところに絞った上で、本文は400ページくらいあります。特に、TypeScriptの最大の特徴たる型システムの説明は、ことさらに厳密な説明となるように心がけています。静的型システムでは型を持つのが(値ではなく)変数や式であることとか、型推論の目的や方法に触れている点などはこだわりポイントです。また、鬼門の一つである部分型関係についても、理解できるようにさまざまな角度から説明し、共変や反変といった概念も取り入れています(これは難しいのですべての読者に理解しろとは言いませんが)。
言語機能の解説はもちろんですが、どの言語機能をどのような場合に使うべきかといった「考え方」の部分もTypeScriptプログラミングにおいては重要です。本書には筆者がこれまで培ってきた知見をできる限り詰め込んでおり、結論だけではなく理由を説明するようにしています。これを通して、読者が同じように自ら考えられるTypeScript使いになるのを支援します。
さらに、JavaScript/TypeScriptは歴史のある言語ですが、本書では基本的に歴史の話はおまけとして扱い、現在の視点で捉えたTypeScriptの姿を紹介しています。例えば変数宣言では、var
やlet
ではなくまずconst
から紹介します。
どんな人・場面におすすめ?
もちろんTypeScriptに入門したいすべての人におすすめする一冊ですし、独習でもかなりTypeScript力がつくはずですが、筆者として特におすすめの使い方は教科書のように使うことです。そのため、企業等でのTypeScript教育シーンにもかなりおすすめです。
大学受験ではよく「教科書だけ完璧に理解していれば東大に入れる」という噂話が聞かれますが、本書もそれに近い性質を持っていると考えます。本書に書いてあることを隅から隅まで完璧に理解していれば、並のTypeScriptエンジニアをもはや超えているはずです。
しかし、相当プログラミングに慣れ親しんでいる読者でなければ、この本1冊持って一人だけで努力しても全てを完璧に理解するのは難しいかもしれません。そのときに質問に答えてくれる先輩やメンターがいれば学習がとてもスムーズに進むことでしょう。
また、この本の教科書的な側面はもう一つあり、それは応用の方向性をほぼ全く与えないということです。冒頭で述べたとおり、この本の内容はTypeScriptそのものの言語機能の話にほぼ終始しています。作りたいものがもうある人なら問題ありませんが、そうでない人はこの本だけ読んでも面白くて実用性の何かをどんどん生み出せるようになるわけではありません。
そのため、TypeScriptで何をするかという方向性の部分は別で用意する必要があります。企業であれば作るべきものがありますから、その点でも打ってつけですね。独習の方は、特にやりたい領域があればその部分の知識は他の本や資料で補う必要があります。それでもこの本はTypeScript本体部分の説明に関しては右に出る物がないはずです。
まとめ
この記事では『プロを目指す人のためのTypeScript入門』の魅力を紹介しました。TypeScript入門者がプロのレベルへと上るための土台となる一冊に仕上がっています。すでにプロレベルの方もよければ読んでいただいて、これはいいと思ったらぜひ入門者に薦めていただけると嬉しいです。