【書評】「実践TypeScript」のレビューに携わって

本日、6/26 に発売開始された吉井 健文さんの「実践TypeScript ~ BFFとNext.js&Nuxt.jsの型定義~」の執筆に、レビュアーという形で協力させていただきました。

書籍内に Vue / Nuxt.js における TypeScript の項が存在したためそこからスタートし、それ以外の部分についても一通り読んだ形です。

献本もいただいたので折角なので書評として書籍からうける印象をまとめたいと思います。

どういう本?

間口は広いが完走辛し。本気で TypeScript を書く人のための本

この書籍の印象はこの章題のとおりです。

初学者の人にもわかりやすい入り口を提供していますが、書籍タイトルの「実践TypeScript」の通り、本気で TypeScript を書こう、学ぼうという人のための知識がぎっしりと詰まっています。

古い静的型付けしか知らない人にはぜひ読んでほしい、一番早いスタートダッシュ

たとえばフロントエンド開発者や、LL 言語でのバックエンドのみの経験のあるかたは、そもそも静的型付け言語が教科書的に進めた C や Java だけという人も多いのではないでしょうか。

そういった開発者の方にとっては、例えば「引数の型が違うけれど同名で呼びたいメソッド」があった場合、オーバーロードを駆使して逐次型とメソッドの中身を記述していくようにイメージすると思います。

ですが、教科書的でない実践的な Java や、TypeScript を含むモダンな静的型付け言語では、型を抽象化して扱うことのできる Generics という機能があったりします。 「例えば任意の型を受け取って、その上でフラグ情報を付与して返す関数を作りたい」みたいな抽象的な要件にも、 TypeScript は以下のようなコードで応えてくれます。

function withExistFlag<T>(v: T): (T & { exist: boolean }) {
    const value = {
        ...v,
        exist: true
    }
    return value
}

type User = {
    id: number
    name: string
}

const user: User = {
    id: 1,
    name: 'potato4d'
}

console.log(
    withExistFlag(user)
)

www.typescriptlang.org

もしこういった機能に馴染みのない開発者のかたの場合は、この書籍はこのような新しい型の概念を一気にインプットできる、スタートダッシュの強い味方になるはずです。

高度な型を学ぶためには強い意志が必要

一方で、 Conditional Types による複雑な型の表現(TypeScript の読み書きに慣れている人ならば、初学者につらいことはわかるはずです)など、 Generics のような簡単な構文ではなく、読み書き両方にある程度の慣れを表現する技術もたくさん出てきます。

TypeScript には any という、全ての型を許容する甘い誘惑があります。軽く TypeScript を触ったことがあるというかたの場合、特にそうしてしまうことの楽さを体験してしまっていることだと思います。

そういった中、この一冊はそういった妥協は一切せず、ただどこまでも型を正しくアノテーションしていくことに専念しています。

もしかしたら途中で一旦休みたくなるかもしれません。そういったときは、少し時間をおいて、現場で導入を進めてみて、それから必要になったときにこの書籍にまた戻ってくる。そういった読み方を進めるのも一つの手だと思います。

最終的にはこの書籍に存在する知識は全て必要となるはずですが、TypeScript 自身がそうであるように、少しずつ改善していくのも一つの手です。

界隈における TypeScript の盛り上がりとこれから

まだ TypeScript を学ばないで良いと考えているかたも、これからは事情が変わるかもしれません。

グローバルな事例では、今年リリースを控えている Vue.js 3.0 は TypeScript で全てが書き直されます。おそらく日本で一番使われているであろう JavaScript フレームワークが、 TypeScript の世界を中心として回るように変化します。

また、ローカルの事例では、 TypeScript のコミュニティイベントである TypeScript meetup vol.1 は、参加枠 130 に対して、執筆時点で 600 をこえる参加者が控えている状況であり、国内におけるプレゼンスも確実に高まりつつあります。

もちろんこの世の全てのプロジェクトが TypeScript になるということはありませんが、 SPA 開発におけるデファクトとして変化していく未来へは、少しずつ、しかしながら確実に近づいています。

そんな時代の先端に追いつくきっかけにもなる一冊だと感じました。

おわりに

この本をレビューさせてもらったとき、これは TypeScript を愛する人が TypeScript を学びたい人のために送る、 TypeScript のための本であるということを強く感じました。

フレームワークの事例を載せながらもあくまでも主眼は TypeScript であり、そこで得られる型の概念や考え方は、きっと数年後に React や Vue がなくなったとしてももちこせる「資産」ともいえる技術と知識であることをあらためて実感。この書籍が本当にフォーカスしたいのは、 BFF、特に Nuxt という型が複雑になりやすい技術を倒すべき課題として、TypeScript という武器の魅力をいかに表現するかであり、そこを吉井さんは伝えたかったのではないかというのが、私の中での所感です。

これからも「フロントエンドエンジニア」として仕事を続けていきたい人、そして自社の「フロントエンド」の開発組織自体を強く意識したい人、どちらのケースにも大きく貢献できる著者渾身の一冊ですので、ぜひ一度読んでみることをおすすめします。

私は部署向けにも追加で発注しました。