事前知識
crate react app でreactアプリの雛形をつくることができる。
上記はfacebookが提供しておりtypescriptでの構築も可能。
調査
create react app(以下CRA)はなにをしてくれている?
参考記事①
create-react-app が裏で何をやっているか理解する - Qiita
npm run ejectを行いファイルを比較している。
npm run ejectってなにいい??
npm run eject
引用
npm run eject で create-react-app はアプリケーションの長寿を保証する - valid,invalid
create-react-app の裏側で react-script を介して使われている諸々のツール・スクリプトをコピーしたり、依存関係を package.json に書き込んだりして、自分で用意したのと同じ状態にするコマンド。実行以降、好きにカスタマイズし放題となる。
これがいつでも出来るのでロックインを回避できる、create-react-app が死んでもアプリケーション側で自前でこれらのツールを制御することが出来る。
つまり、create-react-app はこのツールよりも、アプリケーションの方が長いライフサイクルを持てることを保証するということ。
わかったこと
→ 様々な依存関係をいい感じに設定してくれるもの。ロックインのデメリットもあるが回避可能なコマンドが用意されている。
参考記事②(WebpackやBabelってなに)
Facebook公式のcreate-react-appコマンドを使ってReact.jsアプリを爆速で作成する - Qiita
CRAが出るまで(2016/07/22)と出たあとでの変化
アプリを作る際はWebpackやBabelなどの設定をいじる必要があり、導入障壁が高かったのですが、create-react-appを使えばそれらのステップをすっ飛ばせます。
CRAが出た背景
JSXやES6を使うにはBabelやWebpack、ESLintなどのツールが必要不可欠なので、学習コストが増加した。どのパッケージを入れればいいか悩んだり、依存管理が面倒になる
派生疑問
裏では何が使われている?(公開当時)
- webpack、webpack-dev-server、html-webpack-plugin、style-loader
- Babel (ES6/ES2015)
- Autoprefixer
- ESLint
(公開時点で)入ってないもの
- サーバーサイドレンダリング
- テスト用のスクリプト
- ES7が使えるようになるBabelの設定
- LESS, Sass, CSS Modules
- ホットリロード
わかったこと
→ JSXやES6からの手法として加わったconstやアロー構文に対応するために、WebpackやBabelがReactでも必要だったが個人で行うには参入難易度が高くなっていた。それらの問題を解決するべきCRAが誕生し、全てをいい感じにしてくれる。
参考記事③(SSG/SSRってなに)
Dan氏によるCreate React Appの将来、およびReactとフレームワークの関係性についてのコメントの翻訳
内容が難しいかつ分量が多いので、断片的にしか読めていません、、、
ただ今後のReact、CRAについて詳しくまとめられているようだったので頑張って全部読もう!(To 自分)
CRAが出る以前
CRAをリリースする以前は自分で一連のツールをインストールして(中略)JSXを使うための正しいプリセットの設定や開発環境と本番環境で異なる設定、アセットのキャッシュのための正しい設定、linterの設定などがありました。
当初のCRAの目的
- 設定なしで新規のReactプロジェクトを始めるための簡単な方法を提供する
- コンパイル関連の依存関係を統合し、簡単にアップデートできるようにする
- Reactチームがツールのアップデートをできるだけ広く展開できるようにする(例えば、Fast RefreshやHooksのlintルール)
CRAの問題
- 代替品より遅い(viteとかのこと?)
- 次世代バンドルツールについて
- Turbopack、Vite
- こちらも回り道がすぎるので調査は略。簡単にwebpackよりめちゃくちゃ早い
- 定番のツールをサポートしていない
関連参考記事(引用)
脱 create-react-app! webpackでReact ×TypeScrip開発環境構築からHello World!まで
- 重要な設定部分がブラックボックス化してしまう: 本来しっかりと理解して運用すべきであるバンドルの設定の箇所が見えなくなり、カスタマイズ等がやりづらい
- 不必要なdependenciesが生まれる(バンドルサイズが膨らむ)
- 依存関係の問題で新しい機能(新しいverがサポートされていない)が使えない。
分かったこと
当初の目的以外の様々な問題(動作の軽さ・ツールのサポート)がCRAに生じてきている。ただ、webpackなどの設定に頭を使わずReactを使えう分にはとても優秀である。CRAで困ったら他の候補について調べるくらいで良いのかも、、、ただCRAに生じている問題点を解消するために?それらを中心に?新たな開発ツールが出てきている。
派生疑問
記事に度々出てきていた単語が分からなかったので、、
公式ドキュメントを読む
https://github.com/facebook/create-react-app
CRA以外のreactアプリの構築方法
Babel、webpackを自力で導入する。
参考サイト
webpackからviteなどに移行する。
参考サイト
今回色々調べたたが、
今回学ぶ主題としているのはReactの基礎的な構文や触れて学ぶことなので、CRAで行う。またCRAで作成したプロジェクトをyarn ejectやreact-app-rewiredにより拡張しviteなどに移行できるみたいなので、今後の課題として行いたいと思う。
構築(今回はCRA)
myPCの環境の確認とコマンドの確認
構築
さいごに
追記
State of JavaScript 2022: フロントエンドフレームワーク