この広告は、90日以上更新していないブログに表示しています。
しばらく前のエントリで書きましたがReact+TypeScript回りを学んだので、一緒に読んだ本の感想エントリです。技術同人誌界隈では非常に高評価、なんと累計1.5万部も売れた3部構成のReact入門書。作者はフリーランスのエンジニアの大岡由佳さん。
React推しの技術同人誌なので前書きからすでにアツく、最近はVue.jsが採用されたり書籍が多いのにもどかしさを感じたり、実際のプロジェクトで見てきたひどいコードをもっと良くしたいと思った…などなど、現場のエンジニアの技や思いがたっぷり詰まっています。ReactってJavaScriptぢからの高い優秀な人が使ってそうな勝手なイメージがあったのですが、そうではない場合もあるのですかねえ。
技術が出てくる経緯、歴史と思想にも踏み込み、仕事で使えるReact本を目指したとのことで、実際にそれを実現した本となっています。
作中の架空の会社に勤めている設定の2人の登場人物によって話は進んでいきます。
この2人の会話形式で進むのですが、後輩からの質問やツッコミが、他言語なら分かるReact初心者の立場に立っていて理解しやすいです。

1-1. 基本環境の構築
Node.jsがなぜ必要なのかを解説しています。Node.jsのインストール方法を解説しています。VSCode一択。Live Shareの体験が圧倒的とのこと。本書に載っているおすすめ拡張機能リストは、使っている人ならだいたい知っている定番ものが中心でした。1-2. プロジェクトを作成する
(JavaScript Fatigue)が問題になっていた経緯を説明し、そこでCreate React Appが登場したことを中身含めて解説しています。一緒に自動で入るパッケージでreact, react-domはReact本体としてreact-scriptsが重要な役割を果たしているのは初めて知りました。CRA(Create React App)して実際にHello Worldするまで、1つ1つのファイルの中身まで含めて解説しています。新人さんがpublic/index.html とReactコンポーネントがどう結びつくのかを疑問に思っているのが偉い…!static/js/*.jsファイルが読み込まれるようDOM要素が追加されてるんですよね。1-3. アプリを管理するためのコマンドやスクリプト
Yarnコマンド、package.jsonの中に定義されるnpm scriptsの中に生成されているコマンド、そしてreact-scriptsでできることも開発者目線で解説されています。実行するとCreate React Appの庇護から抜けて自由な設定が可能になるejectコマンドの存在を初めて知りました。ejectは使わないことを推奨しています。まあここはそうなんだろうなあと。2-1. あらためてJavaScript ってどんな言語?
JavaScriptを悪いプログラミング言語だと考えるプログラマーが多いのは何故ですか?
LiveScriptという名前だったのが昔のブラウザのNetscape経営陣がJavaScriptと名前を変えた小噺は割と有名ですが、このへんがかなり詳しく解説されています。ああネスケ...懐かスィ...2-2. 変数の宣言
(Hoisting)の話も丁寧にしながら、変数宣言でvarはマズい話を解説しています。本書ではまずは常にconst、どうしても再代入がいるときだけletにせよとしていますね。実際にReactのコードを書いているとだいたいconstで用が足りるのがだんだんわかってきます。2-3.JavaScript のデータ型
BigInt型、ES2015のSymbol型は余り使うシーンがないのでBoolean/Number/String/Null/Undefined型を主に使う話。{}が「狭義のオブジェクト」。2-4. 関数の定義
function twice()で宣言する関数宣言文と、const twice = function() {..}で行う関数式が結果は同じだが違いがあることも改めて説明しています。const addOne = (n) => のやり方がPrettierでも2020年からデフォルトになり、作中設定の会社でもこれを支持するとのこと。自分もUdemyの講座でやりましたが、やっぱり合ったほうがわかりやすいですね…2-5. クラスを表現する
2-6. 配列やオブジェクトの便利な構文
parseし直す方法も紹介してくれています。2-7. 式と演算子で短く書く
||や&&が左から評価されることを利用したショートサーキット評価Optional Chainingnullかundefinedだったら右辺のデフォルト値を入れたりできるのがNullish Coalescing() (Null合体演算子、ヌリッシュ・コアレッシング)2-8.JavaScript の鬼門、this を理解する
selfを宣言、RubyのselfやJavaのthisが暗黙的なのを例に挙げながら解説しています。本書にあるように直感的にスッとは理解できなかったのですが(笑)、ややこしいところなのでありがたい。2-9. モジュールを読み込む
3-1.関数型プログラミングは何がうれしい?
(Imperative Programming)と宣言型プログラミング(Declative Programming)がある。(Procedual Programming)とオブジェクト指向プログラミング(Object-Oriented Program)。JavaやRubyやC#など多くの言語でおなじみ。手続き型とオブジェクト指向は言語では両方取り入れられつつある。(Immutability)が高まり安全性が高まる。3-2. コレクションの反復処理
Arrayオブジェクトの様々な反復処理の紹介。丁寧に解説されているのでもっと活用しないとな~と思いました。forEachとfor...ofは非推奨、特にfor...ofはAirbnbのスタイルでも非推奨なんですね。Object.keys(), .values(), entries()がよいという話。3-3.JavaScript で本格関数型プログラミング
High Order Function)、無名関数があること、=> のアロー関数式があるJavaScriptの特徴を踏まえながら、改めて関数型プログラミングの話。今までの記述を踏まえると整理できてありがたいです。Clojure、JavaScriptの機能一つなのがClosure。関数が作られた周囲の環境も一緒に閉じ込めて、中に変数を持たせたりできるもの。クラスインスタンスと似てるしなんでこんなのあるんねんと思うのですが、Reactの関数コンポーネントに繋がっているわけですね。Kakeru saved となっていて、これは2012年別冊マーガレットで連載開始~2016年にアニメにもなった『orange』の救出対象ヒロインの成瀬翔のネタのような気がします……3-4.JavaScript での非同期処理
Promiseでコールバック地獄がやや楽になり、今はasync/awaitが推奨という話。発音は「エイシンク」が正しいそうです。自分もつい「あしんく」と読んでます……(平伏)
柴崎雪菜先輩の世代設定が気になる3章でしたが、後輩の秋谷香苗氏も『超時空要塞マクロス』のヴァルキリーのガウォーク形態を知っていたり、2007年スタートの『機動戦士ガンダム00』シリーズのパワーワード「俺がガンダムだ!」ネタを知っているらしき描写があり、人物設定が気になります(笑) 2010年代後半入社と思われる新卒2年目にしてはガチな気がする……!
4-1. TypeScript はイケイケの人気言語?
CoffeeScriptが結局廃れてしまった過去があり、AltJSに良い印象がなかったのではないか……という文化的な考察は興味深いです。4-2. TypeScript の基本的な型
ts-nodeを使ってTypeScriptの動きを見ていく節。型定義もフレキシブルにできることに秋谷さんが感心していてなかなか鋭いですね。Enumは本書でも非推奨、文字列リテラルの列挙型を推奨しています。never型は必ずエラーがスローされる関数ぐらいしか使わないのかなと思っていたのですが、本書ではswitch文のcase定義漏れに使うという、現場の高度な技も紹介されています。4-3. 関数とクラスの型
functionキーワード、アロー関数式でもどれでもいける関数宣言の話。Composition over Inheritance の話が載っています。interfaceでメソッドを定義する場合にアロー構文を使うとオーバーロードができなくなるのは知りませんでした。アロー構文好きの柴埼パイセンはこちらが好みとのこと。オライリー本の『プログラミングTypeScript』ですとここは普通にinterfaceもtypeも両方定義していた気がします。extendsできたりする挙動の話。4-4. 型の名前と型合成
TSが登場したころはnull安全を保証していなかったのは、過去との互換性を考えたのではないか……という考察は腑に落ちます。現在はunion型でlet foo: string | null のように書くのが分かりやすいとのこと。
4章はTypeScriptの重要な解説なのでコード内のお遊びはあまり出てこないのですが、『新メイプルタウン物語』の主人公キャラらしき名前が隠されていたり。また変数friendsに入れる文字列に列挙型でサーバル|カラカル|チーター が出てくるので、これは『けものフレンズ』ネタではないかという電波を受信しました……。すっごーい!たーのしー!
4-5. さらに高度な型表現
typeof varname; などとすると変数から型を抽出できる話、for...in やfor...of、 オブジェクトの型からキーを抜き出してくれるkeyof、定数として型注釈を明示できるas const の話。inferキーワードの話で、SQL文を発行するORMライブラリなどへの応用の話が出てきます。まったく思いつかなかったのですがこういう方面でも可能性がある訳ですね。Partial<T>などの高度な組み込みユーティリティ型の話では、関数の引数の型や戻り値の型を抽出してくれるParameters<T>、ReturnType<T>は今のReact開発ではあまり使わないがReduxなどではよく使われていたとのこと。function transform() .. のように宣言文で書いた方が、アロー関数式より確かにオーバーロード宣言に関しては分かりやすいですね。アロー関数派の柴埼パイセンもここでは認めています。4-6. 型アサーションと型ガード
const aaa = data as User; のように開発者が型を断定してコンパイラに押し付けるのが「型アサーション」で、これは最後の手段。typeof、クラスインスタンスならinstanceofで判定しながら安全に処理させていく型ガードを使う方がよい。高度なユーザー定義の型ガードも実例が紹介されています。"With great power comes great responsibility"(大いなる力には大いなる責任が伴う)の格言も出てきます。"This is my gift, my curse. Who am I? I'm Spider-Man." でグッとくるエンディングでした。この2人アメコミネタも押さえてるのか……4-7. モジュールと型定義
import文の探索手順があるので、パスに拡張子を指定しないのが正解。export type {型名},import type {型名} from.. とできる。*.d.tsの型定義ファイルを一緒にして公開する例もセーラームーンの変身プロセスの関数とクラスを例にして解説されています。このへんも実践的ですね。4-8. TypeScript の環境設定
Create React Appで作るとまとめたオプションstrict: trueで諸々が有効化されて厳密になっているので、これに従う。baseUrl とイテレーター回りの変換を最初からONにしておくdownlevelIterationは変えた方がよいという、お役立ち情報も載っています。セーラームーン世代と思われる柴崎雪菜パイセンに比べると秋谷香苗さんは下の世代と思われますが、ガンダムネタにもセラムンネタにも自然に対応しており、守備範囲が広いのが伺えます。これが……フルスタックってやつか……(違)
【Ⅰ. 言語・環境編】は入口なのでReact本体が出てくるのは最初だけ、メインはフロントエンド全体とJavaScriptとTypeScriptなのですが、これだけでもう既にめっさ学びになります。これで電子版1200円というとコスパも抜群ですね。
柴埼パイセンと秋谷さんの世代設定の謎を追いつつ、我々はアマゾンじゃなかったFacebookの奥地へと向かった…...

本書のサンプルコードのリポジトリ。github.com
頒布時のtogetterまとめ。togetter.com
りあクト! TypeScriptで始めるつらくないReact開発 第3.1版【Ⅰ. 言語・環境編】oukayuka.booth.pmりあクト! TypeScriptで始めるつらくないReact開発 第3.1版【Ⅱ. React基礎編】oukayuka.booth.pmりあクト! TypeScriptで始めるつらくないReact開発 第3.1版【Ⅲ. React応用編】oukayuka.booth.pm
りあクト! TypeScriptで極める現場のReact開発booth.pmりあクト! Firebaseで始めるサーバーレスReact開発booth.pm
Reactをはじめとするフロントエンドフレームワークの入門本まとめ記事最新版が、このブログ内のこちらにあります。
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
引用をストックしました
引用するにはまずログインしてください
引用をストックできませんでした。再度お試しください
限定公開記事のため引用できません。