Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
React & Next.js研修
Search
techtekt
August 23, 2023
Programming
0
4.6k
React & Next.js研修
パーソルキャリア株式会社 テクノロジー本部 エンジニアリング統括部 サービス開発部
※本資料は2023年3月時点の情報であり、当該部門における2023年新卒の研修教材です。
techtekt
August 23, 2023
Tweet
Share
More Decks by techtekt
See All by techtekt
大規模サイトリビルドの現場から:成功と失敗のリアルな教訓 / Site Rebuild,Real Lessons Learned from Successes and Failures_JJUG Fall 2024
techtekt
0
240
VSMを活用したFindy Team+の運用促進 / promoting-operation-of-findy-team-plus-using-vsm
techtekt
0
240
ハッピーになる機械学習モデル開発 〜なるべく手間をかけずにコードの品質向上を目指す 〜
techtekt
0
110
Power BI 活用推進の歩み
techtekt
0
73
_microCMS_を使ってNext.jsアプリ開発しよう_.pdf
techtekt
0
1.5k
スクラム研修
techtekt
0
4.6k
データベース研修
techtekt
7
6k
良いコードとは 研修
techtekt
2
4.8k
Git研修1
techtekt
0
4.7k
Other Decks in Programming
See All in Programming
数十万行のプロジェクトを Scala 2から3に完全移行した
xuwei_k
0
270
モバイルアプリにおける自動テストの導入戦略
ostk0069
0
110
StarlingMonkeyを触ってみた話 - 2024冬
syumai
3
270
Асинхронность неизбежна: как мы проектировали сервис уведомлений
lamodatech
0
700
Mermaid x AST x 生成AI = コードとドキュメントの完全同期への道
shibuyamizuho
0
160
KMP와 kotlinx.rpc로 서버와 클라이언트 동기화
kwakeuijin
0
140
SymfonyCon Vienna 2025: Twig, still relevant in 2025?
fabpot
3
1.2k
これが俺の”自分戦略” プロセスを楽しんでいこう! - Developers CAREER Boost 2024
niftycorp
PRO
0
190
14 Years of iOS: Lessons and Key Points
seyfoyun
1
770
生成AIでGitHubソースコード取得して仕様書を作成
shukob
0
310
ゆるやかにgolangci-lintのルールを強くする / Kyoto.go #56
utgwkk
1
370
競技プログラミングへのお誘い@阪大BOOSTセミナー
kotamanegi
0
360
Featured
See All Featured
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
232
17k
Being A Developer After 40
akosma
87
590k
A designer walks into a library…
pauljervisheath
204
24k
Learning to Love Humans: Emotional Interface Design
aarron
273
40k
Become a Pro
speakerdeck
PRO
26
5k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
48
2.2k
What's in a price? How to price your products and services
michaelherold
243
12k
Designing Experiences People Love
moore
138
23k
A Modern Web Designer's Workflow
chriscoyier
693
190k
Keith and Marios Guide to Fast Websites
keithpitt
410
22k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
2
290
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
28
9.1k
Transcript
React & Next.js パーソルキャリア株式会社 テクノロジー本部 エンジニアリング統括部 サービス開発部 ※本資料は2023年3月時点の情報であり、2023年新卒の研修教材です。
- React - ライブラリ - Next.js - フレームワーク - Vue.js
- フレームワーク - Nuxt.js - フレームワーク
要するにプログラムの雛形
正直 世の中のシステムは 似たようなものが多い
共通関数をまとめておこう! → ライブラリ(React) 雛形を作っておいて、穴埋め方式! → フレームワーク(Next.js, Vue.js, Nuxt.js)
Reactとは - JavaScript ライブラリの一つ - UIを構築するために使われます。 - よく比較されるものに、Angular.js, Vue.js などがあります。
実際に使ってみた方が早い
Reactを使ってみましょう 以降のコードは*1を参考としています *1 Next.js by Vercel - The React
Framework. Introduction | Learn Next.js. https://nextjs.org/learn/foundations/about-nextjs . 2023-06-22
Hello React まずは適当にhtmlファイルを作成しましょう。 <!-- index.html --> <html> <body> <div
id="app"></div> <script type="text/javascript"> const app = document.getElementById('app'); </script> </body> </html>
Hello React … <script type="text/javascript"> const app = document.getElementById('app'); const
header = document.createElement('h1'); const headerContent = document.createTextNode('Develop. Preview. Ship. 🚀'); header.appendChild(headerContent); app.appendChild(header); </script> </body> </html> DOMをいじってみます。
Hello React <!-- index.html --> <html> <body> <div id="app"></div> <script
src="https://unpkg.com/react@18/umd/react.development.js"></script> <script src="https://unpkg.com/react-dom@18/umd/react-dom.development.js"></script> <script type="text/javascript"> const app = document.getElementById('app'); </script> </body> </html> React の導入です。
Hello React コンポーネントで分けて開発するぞ! function Header() { return <h1>Develop. Preview. Ship.
🚀</h1>; } function HomePage() { return ( <div> <Header /> </div> ); } ReactDOM.render(<HomePage />, app);
Hello React <props> Propsってなんぞや? // 追加↓ function createTitle(title) { if
(title) { return title; } else { return 'Default title'; } } // 編集↓ function Header({ title }) { return <h1>{createTitle(title)}</h1>; } function HomePage() { return ( <div> <Header title="React 💙" /> <Header title="A new title" /> </div> ); } 自由度が高い、コンポーネントの再利用が可能
Hello React <リストの繰り返し> function HomePage() { const names = ['A','B','C']
return ( <div> <Header title="Develop. Preview. Ship. 🚀" /> <ul> {names.map((name) => ( <li key={name}>{name}</li> ))} </ul> </div> ); }
Hello React <イベントの実行> function HomePage() { // ... function handleClick()
{ console.log('クリックされたよ!'); } return ( <div> {/* ... */} <button onClick={handleClick}>Like</button> </div> ); }
Hello React <状態1> function HomePage() { // ... let likes
= 0 function handleClick() { likes = likes + 1; } return ( <div> {/* ... */} <button onClick={handleClick}>Likes({likes})</button> </div> ); }
Hello React <状態2> function HomePage() { // ... const [likes,
setLikes] = React.useState(0); function handleClick() { setLikes(likes + 1); } return ( <div> {/* ... */} <button onClick={handleClick}>Likes ({likes})</button> </div> ); } useStateで作成した変数が変更されると再描画される
React で使われる小技 function Display({disp}) { return ( <div> { disp
&& <p>この文章が見えます。<p> } </div> ); } function Display({isChild}) { return ( <p> あの方は{isChild? '子供' : '大人' }です </p> ); } 式と演算子
[小課題] ディレクティブ [1, 10, 5, 400, 6]の配列から、 下記のように表示させてください。
さて
Next.js
Next.js Next.js = React + よく使われるライブラリ ・SSRを手軽にReact.jsベースで実装できる
・ルーティングの自動生成 などのメリットがあり、サービス開発部ではReactを直接使うのではなく、 Next.js を使うことが多いです。
Next.jsはサーバーサイドでも動く Reactはクライアント側(ブラウザ)で動いていた Next.jsはサーバーサイドでNode.jsエンジンの上で動く(target: server)
Node.jsとは
JavaScriptの特徴 JavaScriptはChromeやFirefoxといったブラウザ上で動きます。 PythonやRubyのような一般的なプログラミング言語は通常OS上で動作します。
ブラウザ上で動くと? OS上で動くプログラムはOSの機能へとアクセスできます。 OSの機能とは例えばファイルの読み書きや、ネットワーク通信などを指します。 ブラウザ上で動くプログラムはユーザーの許可なく OSの機能へアクセスできません。 もし、ブラウザ上で動くプログラムがOSにアクセス出来てしまうと、悪意のあるサイト にアクセスしただけで、パソコン上のファイルを勝手に書き換えられてしまうような可 能性があるからです。
Node.jsとは? サーバもJavaScriptで開発がしたぁい! Node.jsはOS上で動くJavaScript実行環境です。 OSの機能にアクセスするプログラムを組むことができます。 ブラウザ上で動作していたときは出来なかったファイルの読み書きやネットワーク通 信ができるようになります。 (Node.jsもChromeと同じJavaScriptエンジン使ってます)
Node.jsをインストールする 実務ではnodenvを使ってNode.jsのバージョンを管理することが多いので、nodenvを 使ってみましょう。 anyenv + nodenvでバージョン管理するのがオススメです https://qiita.com/kyosuke5_20/items/eece817eb283fc9d214f
npmとは
Node.jsと一緒にインストールされるnpm Node.jsをインストールすると、同様にnpmもインストールされます。 デフォルトでインストールされることから分かる通り、Node.jsと関連がとても深いで す。 業務でよく使います。
If I have seen further it is by standing on
the shoulders of Giants. 「巨人の肩の上に立つ」という言葉は有名ですが、エンジニアの間では「車輪の再 発明をするな」の文脈でよく使われます。 必ずしも「車輪の再発明をするな」が正しいわけでは有りませんが、以下のようなメ リットがあります。 - すでに動いていて、製品の品質保証が取れている - 開発コストが下がる 世の中にはソフトウェアをパッケージやライブラリといった単位で配布されていま す。こういったライブラリをうまく活用していくことで「巨人の肩の上に立つ」ことがで きます。
パッケージ管理 他者が配布しているライブラリがインターネット上の様々な場所に散らばっていた ら、検索が面倒です。 一つのソフトが複数のソフトを利用するため、「ソフトAをアップデートしたらソフトB、 ソフトCが動かなくなった「という状況が発生します。「ソフトB 5.0にはソフトA 2.0以上 が必要「といった関係があるためです。これをソフトの依存関係と言います。 このような依存関係を気にしながら ライブラリを手動でインストールするのは
大変です。
パッケージ管理システム そこでパッケージを管理するシステムを使います。パッケージ管理システムは以下 の動作をおこないます。 - リポジトリと呼ばれる場所に集約し、検索やインストールしやすくします。 - 取得したいパッケージにどのパッケージのバージョン何以上が必要か必要か 確認し、必要に応じてパッケージを勝手にダウンロードしてきてインストールし てくれます。
Node.jsのパッケージ管理システム - npm npmはNode Package Managerの略で、Node.jsで動く、ライブラリを管理するソフト ウェアです。 - パッケージのインストール(npm install
〇〇) - パッケージのアンインストール(npm uninstall 〇〇) - パッケージの実行(npm run 〇〇) などを行うことができます。
yarn とは • npmと同じく、Node.jsで動作するパッケージマネージャー • npmは2010年, yarnは2016年にリリースされた(yarnの方が新しい) • npmと比較して、インストールが速い、セキュリティが高い •
yarn.lockファイルにより、バージョン違いのパッケージのインストールが発生し ないようになっている • サビ開でもyarnの方が使われています • $ brew install yarn cf. https://qiita.com/Hai-dozo/items/90b852ac29b79a7ea02b
Next.jsをインストール
create next app $ yarn create next-app •
project name → my-app(default) • typescript → YES(default) • ESLint → YES(default) • src/ → YES (default) • app/ → No(default) • import alias → YES(default) • パッケージはYarnで管理 • レンダリングはSPA • デプロイ先はServer
hello-next $ yarn dev
ディレクトリを見てみる
node_modules • npmやyarn経由でインストールされたパッケージは ここに保存されます。 • 追加や修正を行うことはほぼ有りません。 • gitを使っている場合はgitignoreします。
package.json • npm/yarnで管理してるパッケージの中身を 表しているファイル • dependencies, devDependenciesは依存パッ ケージを表す • scriptsはyarn
〇〇などで呼び出すコマンド を設定している
pages/index.tsx .tsxファイルはReactのコンポーネントです。 (TypeScriptで書かれています) 構成は右図のようにすることが多いです。 pagesのように場所と名前が合ってないと動かない ものもあるので注意
[小課題] ページ作成とルーティング pagesディレクトリに「test-page」という名のディレクトリを作成した後、以下にアクセ スできるようにしてください。 http://localhost:3000/test-page
Next.jsではreact-router-domの面倒な設定は不要 無事新規に作成したファイルが表示されたと思います。 Reactを使っている場合はreact-router-domと呼ばれるライブラリを使って、このよう にURLとページを紐づける必要がありますが、 Next.jsの場合pagesディレクトリの構造のままルート定義を自動で作成してくれま す。 page/[id].tsxのように”[]”を.tsxファイルにつけることで動的ルーティングも可能で す。 https://nextjs-ja-translation-docs.vercel.app/docs/routing/dynamic-routes
[小課題] ページ遷移 pagesディレクトリの中に新しいtsxファイルを作成し、index.tsxからリンクして、遷移 できるようにしてください。 下の参考資料を読んで実装してみてください。 これ
public/ 画像などの静的なものを入れる場所です。 「/」からの記述で読み込みできます。
[小課題] publicの参照 適当な画像をpublicから参照し、ページに表示してください。 参考資料
[小課題] コンポーネントの作成 新規でcomponentsに.tsxファイルを作成し、propsを活用してコンポーネントに値を 渡して表示してください。 参考資料 Displaying Data with Props
next.config.js Next.jsの設定を行う場所です。以下のような設定ができます。 - グローバルで利用したいCSSファイルの設定 - build時の設定の拡張 - headerの設定 - pluginの設定
ビルドについて
tsxファイルはブラウザでは動かない? tsxファイルはブラウザでは動かないです。 基本的にブラウザで動くのはJavaScript, HTML, CSSなどの静的ファイルのみとなり ます。
yarn devして動くのはなぜ? 内部的にはtsxファイルをjsファイルに変換してReact ライブラリに紐づけています。 そのため、ブラウザ側からjsファイルを読み取り動いています。 tsx ファイル js ファイル
変換とは? この時行っているtsxファイルからjsファイルへの変換をコンパイルと呼びます。 コンパイル tsx ファイル js ファイル
紐付けとは 変換されたjsファイルはReactライブラリを使って動くように変換されているので、 Reactライブラリに紐付けをおこないます。これをリンクと呼びます。 コンパイル リンク tsx ファイル js ファイル
ビルドとは このコンパイルとリンクのまとめてビルドと呼びます。意味合いとしては実行可能 ファイルを作成することです。 ビルド コンパイル リンク tsx ファイル js
ファイル