この広告は、90日以上更新していないブログに表示しています。
2022/4/22に発売された新刊です。物理本はなんと965ページのボリューム、TypeScriptを基本からみっちり解説した本となっています。
インパクトのある表紙も時々ある技術書関連では、Ruby界隈ではご高名な伊藤 淳一さん【give IT a try】の『プロを目指す人のためのRuby入門』が「チェリー本」という愛称がついているのは割と有名な話。
瑞々しいブルーベリーがどどんと載っている本書『プロを目指す人のためのTypeScript入門』は、習って「ブルーベリー本」もしくは「ベリー本」という愛称がついたそうです。TypeScriptが学べてさらに目もよくなりそうでおトクです。
著者はLINEでフロントエンドエンジニアとしてご活躍中のuhyoこと鈴木僚太さん。「OSS活動にも積極的だが自作のライブラリはあまり流行っていない。」というプロフィールの締めがじわりときます。
自分はTypeScriptは本を読んだりUdemyの講座と一緒に実際に書いてみたりで基本はわかっている(はずw)レベルです。業務で大規模なバックエンドをTypeScriptで作りこむような機会はなさそうですが、ReactかVue+TypeScriptは新規プロジェクトの機会には導入したいと思っています。
これを機にがっちりした本で深堀りしようと思って拝読しました。

★アイキャッチ画像右側のフォントは、TS公式ロゴに使われているっぽいSegoe UIに似たNoto Sansです
TypeScriptとはなんぞやというところをしっかりやっていく章。
enumやModuleなど独自の構文には触れず、今は気にしてなくて良いとバッサリ切り捨てています。以前にJavaScriptの本を読んだときによくわからなかったSymbol形も、本書では出てこなかったりします。npxを使っています。const 変数名= 式 のようにその中に「式」があり、結果があるのが式でないのが文。constを使ってletを避けようという話があり、だいたい9割はconstで済むという話があります。イミュータブルな変数をメインに使う言語もありますし、プロフェッショナルとして使うならconstなんだなあと。BigInt形も説明あり。コード中で型を書く場合は全部小文字でbignum: bigint なんですね。nullとundefined、TSの言語仕様上はサポートが手厚いことを理由にundefinedを推奨しています。なんとなく他言語から来るとnullを優先してしまいそうなので注意が必要ですね。===推奨で、==はもう使うなとはっきり明言。使ってもいいのは== null の場合のみで、「nullかundefinedである」を判定できるから。TSだと型があるからほぼ===になるんですね。?? も解説に入っています。デフォルト値に使う時に使うもの。&&=||=??= もあり。一見タイプミスに見えそうな構文ですが、JSはどんどん進化しますね...for-of文も言及されていますが、for-inは利用機会が低いのでほぼ要らないとあります。オブジェクト=連想配列である というところから始まり、オブジェクトを論じていく章。
type文とinterface宣言がありややこしいですが、本書ではほとんどの場合でtype文で済むとあります。確かにネット上の古い情報だとinterfaceの時もあるので注意ですね。type T = typeof num; のように型のtypeofとtypeof演算子は全く別であることも解説されています。忘れていました...型のほうのtypeofは乱用すべきでないこともしっかりコラムで解説してあります。arr[10]のように位置にアクセスするときの危険性で、インデックスアクセスは極力使わないという回避方法が解説。このへん言語によって対処法は様々ですが、なるほどこういう時にfor-of文なのだなあと。filter関数などを駆使した別解は分かりにくく感じてしまいました。確かに別解はすっきりするけどどっちらがいいのでしょう...従来の関数宣言でやるところから、関数の話をきっちりと論じています。
<T>のジェネリクスについても型引数がどう推論されるのかコラムで深く追及。uhyoさんオブジェクトのheightプロパティを見ると180cmを超えていて背高い!と思ってしまいました。(笑)クラスは必須ではないが、ミュータブルな使い方をするオブジェクトやメソッドを持つオブジェクトをたくさん作っていくときにはよく使われる...ということで、クラスを深堀りしていきます。
staticで宣言するクラス内の静的プロパティはあまり使うシーンはないとのこと。const User = class { }; で書く「クラス式」というやり方は初めて知りました。privateで宣言する以外に#で書くやり方もあるんですね。こちらはES2015の機能なのでより厳格、どちらかいうとこの#を推奨とのこと。こうした背景も書いてあるのはありがたいです。あとの方で継承を使うときに実はこの2つに差があるという話も出てきます。this! という感じですが本書は例を元にしっかり解説。結局はアロー関数が優位であり、applyやcall関数にも軽く触れて終了となっています。throwはnullなど何でも投げられるというのは知りませんでした。Userクラスを用いた書き方に置き換え、次に関数のみを使ったやり方で書き直しています。この流れで関数の中にデータが内包されているものを「クロージャ」と呼ぶ...と解説があると理解しやすいです。ここまで学んできた型システムは序の口である...!とハードルを上げつつ、TypeScriptの特徴である型の話を深堀していく章。どんどん難しくなってきます。
obj?.foo のようなオプショナルチェインもここで登場。"foo"という文字のみを許すような方が「リテラル型」。定数で持てばいいんじゃない?とつい思ってしまうのですが、ユニオン型と併用すると本書の例のように関数の引数が"plus"か"minus"の文字列のみを許したい時に補完がシュッと出てくれるわけですね。なるほど...=== で比較するやり方、typeof演算子を使うやり方。ここでnullが"object"と判定されるという挙動は確かに不自然に見えます。tagというプロパティをそれぞれの型にもって絞り込んでいくやり方は初見でした。うーん高度だ。Human["age"]のように辿ってその型を使う「lookup型」。asも紹介されていますが、使いどころは限定的となっています。対してas const は使用を推奨。any型はTSの中で最強の危険性を誇る最終兵器ということで、本書でも大いに警戒を発しています。存在理由もちゃんと論じているのがありがたい。unknown型は何が来るか分からない時には使用を推奨ということで、意外な気がしました。object型やnever型、ややこしい機能のmapped typeなども解説してあります。このあたりはやっぱり難しく感じますね~!JavaScript関連を語るとよく出てくるところではありますが、改めて本書で最近の状況を踏まえて解説してあります。
increment関数を定義、そのモジュール内で使うローカル変数も一緒にエクスポートする話が載っています。letで宣言した変数は外側から弄れてしまいそうに見えるんですが、TSだとコンパイルエラーで守られるんですね。こういうカプセル化の手法もあるんですね。export default [関数や変数]; してimport [好きな変数] from "./hogeAge.js" のようにするdefaultエクスポートとやインポート。モジュールの代表的な値をエクスポートするために用意されていて使用必須ではない、あまり使わない場合も多い...とあり納得しました。import * するやり方もあるんですね。基本的には非同期処理とは裏で行われる時間がかかる処理である...と定義して、本書最後の難関と記された非同期処理を論じていく章。
Promiseも出てきて、ログを出しながらどういう順番で実行されるのか、その中身をしっかり解説。Promiseの話がけっこう長いのですが、その上で実際によく使うのはasync/awaitということで後半はこちらに。top-level awaitという機能もあるのですね。Promise版にし、さらにタイムアウトの機能を追加するものとなっていました。 最後はTSの進化と共に微妙に変化がある設定ファイルtsconfig.jsonを深堀りした章となっています。
/src/**/*.tsの*やは「globパターン」と呼ぶ名前があるんですね。strict: true は強く推奨。strictNullChecksもtrueにしない理由がないと強く推奨。noImplicitAnyもtrueを強く推奨。noUnchecedIndexedAccessもtrueを推奨。なお巻末の著者プロフィールによると、TypeScriptを極めるにはインコの使い魔を従えるのが必須のようです。(うそ)

まだTypeScriptが初めての人にも読める、プロを目指す人のための入門書...という位置づけでしたが内容はかなり深く、途中からどんどん難しくなり、みっちりと学ぶことができます。言語仕様としての用語はすべて英語のカッコ書き付き、脚注も豊富で、目の前の事象がなぜそうなるのか、なぜこうなっているかの背景もかなりきっちり解説してあります。TypeScriptという言語自体に造詣がかなり深い方なのだなあと思います。他の言語の話も時々出てきます。合計38個あるコラムもかなり深く、今まで知らなかったお役立ち情報を知ることができました。
意外に思ったのですがJS/TSの様々なワードに関する歴史的経緯周りの話も逐一語られているのかと思いきや、「現在は気にしなくて大丈夫です」のような感じでけっこうスパッと切り捨てているんですね。変化の速い領域ではアンラーンも必要なのだなと思いました。
けっこう分厚い本なのでJavaScriptに入門したばかりのような初学者には後半がハードルが高めですが、しっかり入門できるかと思います。
なお本の特徴なので仕方ないですが表類は少なめ、長い文章でみっちり論じてあるスタイルなので、長い本を読むのが苦手な人にはやや抵抗があるかもしれません。個人的にはもうちょっと文章に改行が多いほうが読みやすいかな...とも思ったのですが、このボリュームでそうするとさらにページ数が増えてしまいそうですね。
またKindle版は機能で呼び出せるリンクが章だけでその下の節がないのがちょっと大変でした。(先頭の目次からは節にも飛べました。)
またこれも本書の冒頭に書いてありますが、Node.jsの使い方やtsconfig.jsonの解説は登場しますが、TypeScriptの言語機能をフル活用したバックエンドのアプリ作成例の長いコードとか、ReactやVue.jsにTypeScriptを適用とかの話はありません。そのあたりは本書の知識をもって別の情報リソースをということでしょう。この調子で応用的な続編の本も出していただけたら凄いなあと思ったり。
時々サンプルコードに出てくるuhyoさんなオブジェクトのage: 26(number型)が気になって、お若いのに凄いな...!と見るたびに思ってしまいました。フロントエンド界隈は年齢層が若めというのもありますが、いやはや、ソフトウェアエンジニアリングにはもう年齢は関係ないですね。
著者のuhyoさんのブログによる記事。
uhyoさんへのインタビュー記事もあります。
id:iwasiman引退した元TRPGゲーマー。COBOLでもなくPL/Iの金融系レガシー紙駆動開発から脱出→国産メーカー系総合ITベンダーのITエンジニア。所謂SIerのSEだけど仕事はほぼソフトウェアエンジニア/ソフトウェアアーキテクトとして、Web開発でコードを書いたり技術を追ったり時々イベントに行ったり、楽しいエンジニアリングを目指しています。Views are my own.
お気軽にどうぞ~
リンク集:https://lit.link/iwasiman
AIイラスト関連の活動はこちら↓
https://www.chichi-pui.com/users/iwasiman/
https://pixiv.me/iwasiman
引用をストックしました
引用するにはまずログインしてください
引用をストックできませんでした。再度お試しください
限定公開記事のため引用できません。