Skip to content

Commit 8a138af

Browse files
committed
finish chapter 1
1 parent c8252fe commit 8a138af

12 files changed

+206
-36
lines changed

.markdownlint.json

-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
"commands-show-output": false,
44
"fenced-code-language": false,
55
"first-line-heading": false,
6-
"heading-style": "atx",
76
"heading-increment": false,
87
"line-length": false,
98
"no-bare-urls": false,

01-hello/01-env/.vscode/extensions.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,9 @@
66
"recommendations": [
77
"coenraads.bracket-pair-colorizer",
88
"dbaeumer.vscode-eslint",
9+
"donjayamanne.githistory",
910
"esbenp.prettier-vscode",
1011
"msjsdiag.debugger-for-chrome",
11-
"ms-vsliveshare.vsliveshare",
1212
"oderwat.indent-rainbow",
1313
"stylelint.vscode-stylelint",
1414
"VisualStudioExptTeam.vscodeintellicode",

01-hello/01-env/.vscode/settings.json

+4-13
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,11 @@
11
{
2-
"css.validate": false,
3-
"less.validate": false,
4-
"scss.validate": false,
5-
"editor.codeActionsOnSave": {
6-
"source.fixAll.eslint": true,
7-
"source.fixAll.stylelint": true
8-
},
92
"editor.formatOnSave": false,
103
"editor.tabSize": 2,
4+
"editor.tokenColorCustomizations": {
5+
"semanticHighlighting": true
6+
},
117
"editor.wordWrap": "on",
12-
"eslint.enable": true,
13-
"eslint.packageManager": "yarn",
148
"files.insertFinalNewline": true,
159
"files.trimTrailingWhitespace": true,
16-
"typescript.tsdk": "node_modules/typescript/lib",
17-
"[markdown]": {
18-
"files.trimTrailingWhitespace": false
19-
}
10+
"npm.packageManager": "yarn"
2011
}

01-hello/02-hello-world/.vscode/extensions.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,9 @@
66
"recommendations": [
77
"coenraads.bracket-pair-colorizer",
88
"dbaeumer.vscode-eslint",
9+
"donjayamanne.githistory",
910
"esbenp.prettier-vscode",
1011
"msjsdiag.debugger-for-chrome",
11-
"ms-vsliveshare.vsliveshare",
1212
"oderwat.indent-rainbow",
1313
"stylelint.vscode-stylelint",
1414
"VisualStudioExptTeam.vscodeintellicode",

01-hello/02-hello-world/.vscode/settings.json

+1-2
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,5 @@
77
"editor.wordWrap": "on",
88
"files.insertFinalNewline": true,
99
"files.trimTrailingWhitespace": true,
10-
"npm.packageManager": "yarn",
11-
"typescript.tsdk": "./node_modules/typescript/lib"
10+
"npm.packageManager": "yarn"
1211
}

01-hello/02-hello-world/tsconfig.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
"resolveJsonModule": true,
1919
"isolatedModules": true,
2020
"noEmit": true,
21-
"jsx": "react-jsx"
21+
"jsx": "react"
2222
},
2323
"include": [
2424
"src"

CHANGELOG.md

+26-16
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,29 @@
1+
<!-- markdownlint-disable MD024 -->
12
# 各版における内容の変更
23

4+
## 第3.1版(2020-12-24)
5+
6+
### 全体
7+
8+
- 「Visual Studio Code」の略称表記を「VSCode」から「VS Code」に修正
9+
- 「Mac OS」と表記していたものを「macOS」に修正
10+
- サンプルコードで採用していた UI キットを [Semantic UI React](https://react.semantic-ui.com/) から [Chakra UI](https://chakra-ui.com/) に変更
11+
12+
### 第1章&nbsp; こんにちは React
13+
14+
- 従来 Mac のみで説明していた環境作成を Windows についても言及、WSL をベースにした手順を[オンラインドキュメント](../extract/build-win-wnv.md)として追加した
15+
316
## 第3版(2020-08-20)
417

5-
#### 第1章&nbsp; こんにちは React
18+
### 第1章&nbsp; こんにちは React
619

720
- 「1-1. 基本環境の構築」にて Node.js そのものと、インストールが必要な理由についての説明を追加
821
- 同じく「1-1. 基本環境の構築」にて、非推奨になった [ndenv](https://github.com/riywo/ndenv)[nodenv](https://github.com/nodenv/nodenv) に置き換えた。併せて、[anyenv-update](https://github.com/znz/anyenv-update)[nodenv-default-packages](https://github.com/nodenv/nodenv-default-packages) のふたつのプラグインを導入
922
- 同じく「1-1. 環境構築」にて、`yarn upgrade-interactive` コマンドの説明を追加
1023
- 「1-2. Hello, World!」を「1-2. プロジェクトを作成する」に再編成。Create React App についての詳細な説明を追加し、Yarn コマンドの説明については次の節に委譲した
1124
- 「1-3. アプリを管理するためのコマンドやスクリプト」節を新規に追加。Yarn コマンドに加え、npm-scripts や react-scripts についても詳細に説明
1225

13-
#### 第2章&nbsp; エッジでディープな JavaScript の世界
26+
### 第2章&nbsp; エッジでディープな JavaScript の世界
1427

1528
- 章題を「ナウでモダンな JavaScript」から変更し、内容を全体的に再構成。ボリュームも従来の 5 倍以上に
1629
- 「2-1. あらためて JavaScript ってどんな言語?」で JavaScript の成り立ちから立ち戻って概要の説明を追加
@@ -21,66 +34,65 @@
2134
- 「2-8. JavaScript の鬼門、this を理解する」を新規に追加
2235
- 「2-9. モジュールのインポート/エクスポート」を追加。`import``export` の使い方に加え、ESM 周辺の特殊事情についても説明
2336

24-
#### 第3章&nbsp; 関数型プログラミングでいこう
37+
### 第3章&nbsp; 関数型プログラミングでいこう
2538

2639
- 「3-1. 関数型プログラミングは何がうれしい?」にて、実際のサンプルコードを使った説明を追加
2740
- 「3-2. コレクションの反復処理」にて、`Array.prototype.reduce()``Array.prototype.sort()` についての説明を別途詳細に。またオブジェクトの反復処理についても新規に項を設けて説明
2841
- 「3-3. 関数型プログラミングの概要」「3-4. 高階関数」「3-5. クロージャ」の節を「3-3. JavaScript で本格関数型プログラミング」として統合
2942
- 旧「3-6. ジェネレータ」の節を削除、簡略化した説明を第11章の「自走式重対空砲 redux-saga」にあらためて記述
3043
- 2章から内容を移動した「3-4. JavaScript での非同期処理」にて、説明とサンプルコードを全て刷新。`Promise` オブジェクトの作成法から始まり、通信ライブラリが返す `Promise` オブジェクトを扱う実践的な内容に
3144

32-
#### 第4章&nbsp; TypeScript で型を強める
45+
### 第4章&nbsp; TypeScript で型を強める
3346

3447
- 章題を「型のある TypeScript は開発者の味方」から変更し、内容を全面的に再構成。ボリュームも従来の3倍以上に
3548
- 旧「4-3. 配列とオブジェクト」の内容は「4-4. 型の名前と型合成」に吸収
3649
- 旧「4-5. コンパイル設定」の内容は「4-8. TypeScript の環境設定」に吸収
3750
- 「4-3. 関数とクラスの型」「4-5. さらに高度な型表現」「4-6. 型アサーションと型ガード」「4-7. モジュールと型定義」の4つの節を新規に追加
3851

39-
#### 第5章&nbsp; 強力な拡張記法 JSX
52+
### 第5章&nbsp; 強力な拡張記法 JSX
4053

4154
- 「5-1. JSX とは何であるか、何ではないのか」で引用している統計指標をアップデートし、説明をよりくわしく拡充
4255

43-
#### 第6章&nbsp; Linter とフォーマッタでコード美人に
56+
### 第6章&nbsp; Linter とフォーマッタでコード美人に
4457

4558
- 「6-1. ESLint」で JavaScript および TypeScript における linter の歴史を紹介。さらに `yarn eslint --init` から始める設定ファイル作成の方法、各プラグインや共有設定、カスタマイズしているルール、ESLint を無効化するコメントの書き方についても新しく追加
4659
- 「6-2. Prettier」で Prettier の登場背景を紹介。インストールの方法の説明を追加。設定の内容も紹介
4760
- 「6-3. stylelint」として stylelint についての説明を独立させた
4861

49-
#### 第7章&nbsp; React をめぐるフロントエンドの歴史
62+
### 第7章&nbsp; React をめぐるフロントエンドの歴史
5063

5164
- 章として新しく追加。
5265

53-
#### 第8章&nbsp; 何はなくともコンポーネント
66+
### 第8章&nbsp; 何はなくともコンポーネント
5467

5568
- 従来の「7-1. React の基本思想」の内容を第7章に吸収、新しく「8-1. コンポーネントのメンタルモデル」に差し替えた
5669
- 章全体で関数コンポーネントをベースにして、クラスコンポーネントをその対比で説明するという形に変更したため、「7-5. 関数コンポーネント」節を削除
5770

58-
#### 第9章&nbsp; Hooks、関数コンポーネントの合体強化パーツ
71+
### 第9章&nbsp; Hooks、関数コンポーネントの合体強化パーツ
5972

6073
- 「9-1. Hooks に至るまでの物語」を追加。mixins、HOC、render props と順を追ってロジックの再利用の歴史を説明。
6174
- 「9-4. Hooks におけるメモ化を理解する」を追加、Hooks のメモ化について 1 節をさいて説明。
6275

63-
#### 第10章&nbsp; React におけるルーティング
76+
### 第10章&nbsp; React におけるルーティング
6477

6578
- 「10-2. ルーティングライブラリの選定」で Reach Router についての説明を追加。さらに将来の React Router との統合プランについて記述
6679
- 旧版「10-3. React Router の使い方」の、サンプルコードを利用した説明の部分を「10-4. React Router をアプリケーションで使う」として独立させた
6780
- 「10-5. React Router バージョン 5 から 6 への移行」節を新規に追加
6881

69-
#### 第11章&nbsp; Redux でグローバルな状態を扱う
82+
### 第11章&nbsp; Redux でグローバルな状態を扱う
7083

7184
- 「11-1. Redux の歴史」で、Redux 登場時の状況の描写をより詳細に
7285
- 「11-2. Redux の使い方」の内容とサンプルコードを HOC から Hooks インターフェースを使ったものに更新
7386
- 「11-3. Redux 公式スタイルガイド」「11-4. Redux Toolkit を使って楽をしよう」「11-5. Redux と useReducer」を新規に追加
7487

75-
#### 第12章&nbsp; React は非同期処理とどう戦ってきたか
88+
### 第12章&nbsp; React は非同期処理とどう戦ってきたか
7689

7790
- 第12章を「React は非同期処理とどう戦ってきたか」に改題。前版の内容を書き直した上で、新しく「12-2. Effect Hook で非同期処理を書く」「12-3. Redux 不要論を検証する」節を追加
7891

79-
#### 第13章&nbsp; データ取得の次世代標準 Suspense
92+
### 第13章&nbsp; データ取得の次世代標準 Suspense
8093

8194
- 章として新しく追加
8295

83-
8496
<br />
8597

8698
## 第2版(2019-04-14)
@@ -100,5 +112,3 @@
100112
- 「10-5. Redux DevTools」の内容を[『りあクト! TypeScriptで極める現場のReact開発』](https://oukayuka.booth.pm/items/1312815)に委譲
101113
- 「第11章 Reduxで非同期処理を扱う」の内容を追加
102114
- その他使用している主なパッケージを、2019年3月時点の最新バージョンにアップデート
103-
104-

extra/build-win-env.md

+172-1
Original file line numberDiff line numberDiff line change
@@ -1 +1,172 @@
1-
TODO: リリースまでに作成する
1+
# Windows でフロントエンドの開発環境を作る手順
2+
3+
Windows に Node.js を直接インストールするのではなく、[WSL](https://docs.microsoft.com/ja-jp/windows/wsl/install-win10) で Ubuntu を入れてそこに必要な環境を作っていきます。
4+
5+
なお Windows 側にインストールするアプリはエディタとして Visual Studio Code、ターミナルとして Windows Terminal を使いますが、すでにインストールされている場合は手順を飛ばしてください。
6+
7+
## 1. WSL のインストールとアップグレード
8+
9+
参考:[Windows Subsystem for Linux (WSL) を Windows 10 にインストールする](https://docs.microsoft.com/ja-jp/windows/wsl/install-win10)
10+
11+
### WSL のインストール
12+
13+
- PowerShell を「管理者として実行」して開く
14+
- 以下のコマンドを実行して WSL を有効にする
15+
16+
```powershell
17+
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
18+
```
19+
20+
### WSL2 へアップグレード
21+
22+
- 以下のコマンドを実行して仮想マシンの機能を有効にする
23+
24+
```powershell
25+
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
26+
```
27+
28+
- いったんマシンを再起動する
29+
- [x64 マシン用 WSL2 Linux カーネル更新プログラム パッケージ(wsl_update_x64.msi)](https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msi)をダウンロードして実行する
30+
- PowerShell を管理者権限で開いて以下のコマンドを実行し、WSL2 を規定のバージョンとして設定する
31+
32+
```powershell
33+
wsl --set-default-version 2
34+
```
35+
36+
## 2. Linux ディストリビューションをインストールする
37+
38+
### Ubuntu のインストール
39+
40+
- Microsoft Store から [Ubuntu](https://www.microsoft.com/ja-jp/p/ubuntu/9nblggh4msv6) をインストールする
41+
- インストールした Ubuntu を起動。最初の起動時にユーザー名とパスワードを入力するよう促されるので、任意のものに設定する。ここで作成されたアカウントが管理者になる
42+
- そのままでは WSL 環境で作られたファイルにすべて実行権限が付与されてしまうため、設定を変更する。以下の内容のファイルを `/etc/wsl.conf` として作成する
43+
44+
```shell
45+
sudo vi /etc/wsl.conf
46+
```
47+
48+
```conf
49+
[automount]
50+
options = "metadata,umask=22,fmask=11"
51+
```
52+
53+
### 各種パッケージ
54+
55+
- Ubuntu のウィンドウで以下のコマンドを実行して、APT とインストール済みのパッケージを最新にする。さらに Git をインストールしておく
56+
57+
```shell
58+
sudo apt update
59+
sudo apt -y upgrade
60+
sudo apt-get install -y git
61+
```
62+
63+
- Bash 以外のシェルを使いたい場合は以下のようにする(ZSH の場合)
64+
65+
```shell
66+
sudo apt-get install -y zsh
67+
chsh -s /usr/bin/zsh
68+
```
69+
70+
## 3. Windows Terminal をインストールする
71+
72+
- Microsoft Store で [Windows Terminal](https://www.microsoft.com/ja-jp/p/windows-terminal/9n0dx20hk701) をインストール
73+
- Windows Terminal を起動、「設定」をクリックして設定ファイル `settings.json` を開く。以下のように編集して、デフォルトで WSL のタブが開きホームディレクトリで起動するに変更。なお各環境の GUID は同ファイル内の `"profiles" > "list"` 要素の `"guid"` に記述されている。
74+
75+
```diff
76+
{
77+
"$schema": "https://aka.ms/terminal-profiles-schema",
78+
79+
- "defaultProfile": "{Windows PowerShell の GUID}",
80+
+ "defaultProfile": "{Windows.Terminal.Wsl の GUID}",
81+
82+
"profiles":
83+
{
84+
"list":
85+
[
86+
87+
{
88+
"guid": "{Windows.Terminal.Wsl の GUID}",
89+
"hidden": false,
90+
"name": "Ubuntu",
91+
"source": "Windows.Terminal.Wsl",
92+
+ "startingDirectory": "//wsl$/Ubuntu/home/ユーザー名"
93+
```
94+
95+
## 4. Node.js のインストール
96+
97+
- anyenv のソースを取得
98+
99+
```shell
100+
git clone https://github.com/anyenv/anyenv ~/.anyenv
101+
```
102+
103+
- シェルに anyenv の設定を追加する(ZSH の場合)
104+
105+
```shell
106+
echo 'eval "$(~/.anyenv/bin/anyenv init -)"' >> ~/.zshrc
107+
```
108+
109+
- nodenv のインストール
110+
111+
```shell
112+
exec $SHELL -l
113+
anyenv install nodenv
114+
exec $SHELL -l
115+
```
116+
117+
- 以降は「1-1. 基本環境の構築」の「Node.js をインストールする」に沿って各種プラグインをインストールする
118+
119+
## 5. Visual Studio Code のインストールと設定
120+
121+
参考:[Windows Subsystem for Linux で VS Code の使用を開始する](https://docs.microsoft.com/ja-jp/windows/wsl/tutorials/wsl-VSCode)
122+
123+
### Visual Studio Code のインストール
124+
125+
- [公式サイトのダウンロードページ](https://code.visualstudio.com/download)から、 Visual Studio Code のインストーラをダウンロードして実行する
126+
127+
- スタートメニューから Visual Studio Code を起動し、`File > Prefenrence > Setting Sync` から GitHub アカウントまたは Microsoft アカウントで [Setting Sync](https://code.visualstudio.com/docs/editor/settings-sync) を有効にしておく
128+
129+
```
130+
File > Prefenrence > Setting Sync
131+
```
132+
133+
### WSL 上のプロジェクトを編集できるようにする
134+
135+
- VS Code で [Remote - WSL 拡張](https://marketplace.visualstudio.com/items?itemName=ms-VSCode-remote.remote-wsl)をインストールする
136+
137+
- VS Code を終了する
138+
139+
- Windows Terminal を開き、必要なパッケージをインストールして SSL 接続ができるようにする
140+
141+
```shell
142+
sudo apt-get install -y wget ca-certificates
143+
```
144+
145+
- 適当なプロジェクトをローカルに用意する
146+
147+
```shell
148+
git clone [email protected]:oukayuka/Riakuto-StartingReact-ja3.1.git
149+
```
150+
151+
- WSL 側からコマンドラインでプロジェクトを VS Code で開く。すると初回起動時に WSL 接続に必要なパッケージが自動的にインストールされる
152+
153+
```shell
154+
cd ./Riakuto-StartingReact-ja3.1.git/01-hello/02-hello-world
155+
code .
156+
```
157+
158+
- 完了したら VS Code を終了し、もう一度スタートメニューから起動し直す。ウィンドウの左下に「Open a Remote Window」のアイコンが表示されているはずなのでそれをクリック
159+
160+
![Open a Remote Window](./open-remote.png)
161+
162+
- ウィンドウ中央上に WSL 上のプロジェクトを開くためのセレクトボックスが開くので、「Remote-WSL: Open Folder in WSL...」を選択し、先ほどの `Riakuto-StartingReact-ja3.1.git/01-hello/02-hello-world` フォルダーを開く
163+
164+
![Open a Remote Window](./remote-wsl.png)
165+
166+
- WSL の接続に成功すれば、左下のアイコン表示が「WSL: Ubuntu」のようになる
167+
168+
![Open a Remote Window](./wsl-connected.png)
169+
170+
- VS Code 拡張には WSL 上で動作するために WSL 側にインストールの必要があるものも多い。ローカルにインストール済みで WSL 側にインストールする必要のあるものは「Install in WSL: Ubuntu ⚠️ 」というボタンが表示されるので、それをクリックすればインストールできる
171+
172+
![Open a Remote Window](./wsl-extensions.png)

extra/open-remote.png

4.74 KB
Loading

extra/remote-wsl.png

8.22 KB
Loading

extra/wsl-connected.png

7.49 KB
Loading

extra/wsl-extensions.png

66.1 KB
Loading

0 commit comments

Comments
 (0)