Closed65

TypeScriptとReact/Next.jsで作る実践Webアプリケーション開発メモ

ながたいちこながたいちこ

歴史というか前提というか。
読書感想文的なメモなので精査とかしないでね

jQueryのデメリット

  • グローバルスコープを汚染する
  • DOM操作の実装が複雑になりがち
  • ルーティングなど、複数ページのWebアプリケーションを実装する仕組みがない

イメージとしてJavaScriptでも結構いろいろできるじゃん。

jQueryめっちゃ便利

デスクトップアプリみたいな大規模なものを作るのにはさすがに不便

SPAの時代が到来

ながたいちこながたいちこ

MVC/MVVMフレームワークの時代
サーバーからViewとしてHTMLを読み込む方式

Java Structs
Ruby on Rails
Web系以外の開発でもよく見る形式なのでとっつきやすそう。

ながたいちこながたいちこ

MVC系とReactなどの違い

フレームワーク フロント バック
MVC 補助など MVCすべて行う
React Viewの構築 IFを提供しJSONを返却する
ながたいちこながたいちこ

React系のようにJSONを返却するほうだとフロント部分の交換が簡単。
モバイルやデスクトップでもバックを流用できる。

ながたいちこながたいちこ

メリット

  • フロントとバックの分業が簡単
  • 疎結合な設計がしやすい
  • Web、モバイル、デスクトップでバックを共有できる
ながたいちこながたいちこ

デメリット

  • 初回読み込みと描画に時間がかかる
  • フロントエンドの学習コストが高い
  • フロントのコード量が増える
ながたいちこながたいちこ

技術要素

  • URLとルーティングの管理
  • クライアントでのブラウザ履歴管理による繊維
  • 非同期データ通信
  • Viewレンダリング
  • モジュール化されたコードの管理
ながたいちこながたいちこ

Reactはフェイスブックが作ったUIライブラリ。
可読性が高いコードとなるように設計されている。

  • 仮想DOM
  • 宣言的UI
  • 単一方向のデータ受け渡し
  • コンポーネント指向・関数コンポーネント
  • Fluxアーキテクチャとの親和性
ながたいちこながたいちこ

SSR
サーバーサイドレンダリング
サーバーでJavascriptを実行しHtmlをフロントに返却する。
Nodeによりサーバー側でJavascriptが実行できるようになったことで実現。

メリット

  • サーバーで描画するので早い
  • サーバーでコンテンツを生成するのでSPAでは弱かったSEOを向上させることができる

デメリット

  • NodeなどのサーバーでのJavascript実行環境が必要
  • サーバーの負荷が増える
ながたいちこながたいちこ

コンポーネント設計
モダンフロントエンドの基本的な考え方
UIを再利用可能な部品として設計する

  • 再利用が簡単
  • グローバルを汚染しない
  • 可読性が上がる
  • テストが簡単
ながたいちこながたいちこ

AtomicDesign
UIをページ単位で関g萎えるのは大きすぎる。
もっと小さい単位、原子の単位で考えるべきといった考え方。

  • Atoms:最小単位、これ以上分解
  • Molecules:1つ以上のAtomを使っている。検索フォームなど
  • organisms:1つ以上のMoleculesを使用している
  • templates:organismsを組み合わせて1つの画面として成り立つもの
  • pages:Templateにアプリケーションとして動作するデータが注ぎ込まれたもの
ながたいちこながたいちこ

Storybook
コンポーネントをカタログ化して管理できるツール
WPFをもうちょっと便利にした余蘊漢字

  • コンポーネント設計を強制できる
  • UIの確認が簡単
  • 開発者間の分業が簡単
  • デザイナーとエンジニアの認識整合に便利
  • コンポーネントのテストが簡単
ながたいちこながたいちこ

モダンなフロントエンド開発には求められることが多く、フルスクラッチで開発することが難しい。
そのためNextやNuxtなど多機能な古スタックフレームワークが必要になった。

ながたいちこながたいちこ

TypeScript

  • 生産性の高い静的型付け言語
  • JavaScriptの文法をそのまま使える
ながたいちこながたいちこ

  • インターフェースと暮らす
  • Null/Undefined安全
  • ジェネリック

デメリット

  • コンパイル時間
  • 経験者がいないと導入コストが高くなりがち
ながたいちこながたいちこ

DOM要素を取得する場合、型推定がうまく動作しない。
アサーションを使用してうまいこと具体的な型を指定する

変数 = 値 as 型
ながたいちこながたいちこ

Interface
思ったのと違う。。。。
ほぼ型エイリアスと同じ機能。
使う側で正しい使い方をしてあげないといけない。
強制力がない。

型エイリアス:オブジェクト
インターフェース:関数インプットや振る舞いの定義を行う。

ながたいちこながたいちこ

と思ったらインターフェースいつも通りつかえるんだ、やったー!
オブジェクトに対するIFと関数に対するIF

ながたいちこながたいちこ

Union型
型の組み合わせ。
NumberかStringで動作する関数

fuction hogehoge(id: number | string)

エイリアス同士を掛け合わせて新たな型を作成できる

Intersection型
複数の型をマージして1つにし、新しい型を生成できる

このあたりがよくわからない。
型を定義して順守することで得た保守性がというか可読性がなくなっちゃうのでは?
どういったけーすで使うのか知りたい。

マージされたクラスやタイプを定義したほうがよい気がしてたけど、
その場合、プロパティ1つ1つに代入が必要になる
Intersectionならそれが不要で生産性が高いと思う。

hoge.id = id
hoge.str = str
hoge.number =number
Type mergehoge = hoge & sub
ながたいちこながたいちこ

never型
決して発生しない値の種類を指定する。
never型に代入すると、コードの網羅性を担保できる。
Swich文などに条件漏れがあった場合、コンパイルエラーとできる。

ながたいちこながたいちこ

Optional Chaining
ネストされたオブジェクトのプロパティが存在するかどうかの条件分岐を簡単に記述できる。
?をつける

console. log( user. social?. facebook)
手島 拓也; 吉田 健人; 高林 佳稀. TypeScriptとReact/Next.jsでつくる実践Webアプリケーション開発 (p.125). 株式会社技術評論社. Kindle 版. 
ながたいちこながたいちこ

Non-null Assertion Operator
Nullとなりえるオブジェクトがある場合、コンパイルエラーとなるが、!をつけることで抑制できる。
こちらは実行時にエラーが発生する。
Optional ChainingはNullチェックのコードが生成されるため、実行時にエラーが発生しない。

ながたいちこながたいちこ

インデックス型
オブジェクトのプロパティが可変の場合、まとめて型を定義できる。

ながたいちこながたいちこ

Unknown
どんな型でも代入できるが、型を安全なUnknown以外に変更しないと関数やプロパティにアクセスできない

ながたいちこながたいちこ

tsconfig.json
設定ファイル

Prettier
インデントなどコードのフォーマットをそろえる

ESLint
コードの静的解析

ながたいちこながたいちこ

コンポーネント
React要素やほかのコンポーネントを組み合わせたもの。

ながたいちこながたいちこ

Reactにおいてのコンポーネントは見た目と振る舞いをセットにしたUIの部品単位
コンポーネントは関数やクラスを用いて実装する。現在は関数コンポーネントがはやり。

コンポーネントは大文字から始めるパスカルケースである必要がある。

ながたいちこながたいちこ

コンポーネントに外部から値を渡すに葉propsを使用する。コンストラクタとかUI要素に渡すイメージ

ながたいちこながたいちこ

Propsからの値の取り出し方が微妙に気持ちわるい。

const { content } = props
手島 拓也; 吉田 健人; 高林 佳稀. TypeScriptとReact/Next.jsでつくる実践Webアプリケーション開発 (p.169). 株式会社技術評論社. Kindle 版. 
ながたいちこながたいちこ

Hook
関数コンポーネントにて状態やライフサイクルを扱うための機能

ながたいちこながたいちこ

useCallbackとuseMemo
メモ化のフック
メモ化コンポーネントとは、親コンポーネントが再描画されたとしても、メモ化コンポーネントの状態に変更がなければ再描画を行わない

ながたいちこながたいちこ

useEffect
副作用をじっこうするフック
再描画が終わったときや特定のデータが変化したときだけ処理を実行できる。

ながたいちこながたいちこ

コンポーネントのユニットテスト
React Testing Libraryを使用sるう。
コンポーネントを実際に描画して結果が正しいかテストできる。

ながたいちこながたいちこ

アプリケーション開発1

  • フォルダ構成変わっとる。。。
  • 実行時の環境調べないと手順通りできなさそう
ながたいちこながたいちこ

NodeModule間違って削除したら以下で再インストールできる

npm i

npm run devとか動かなくてびっくりした

このスクラップは2023/02/02にクローズされました