ここまでで「できるようになったこと」
この講座、かなりのボリュームを一気に駆け抜けました。
まずは、あなたが今もう「できるようになっていること」を、あえて言語化しておきます。
Reactまわりでできること
コンポーネントという「小さな部品」を作り、組み合わせて画面を作れるようになっています。
props で親から子へ値を渡し、子コンポーネントを「部品」として再利用する感覚も掴めています。
useState で状態を持ち、イベント(onClick / onChange / onSubmit)と組み合わせて、フォーム・カウンタ・TODO のような「動くUI」を作れるようになりました。
useEffect を使って「初回だけ処理」「状態が変わったときの副作用」というタイミングのコントロールも経験しています。
Next.jsまわりでできること
App Router 前提で、app ディレクトリ構成と「URL=フォルダ構造」の対応関係を理解できています。page.tsx ごとに画面を作り、Link コンポーネントで画面遷移する「SPA っぽいサイト」が作れます。layout.tsx で共通ヘッダーやレイアウトを定義し、「ページ共通部分」と「ページ固有部分」を分ける設計を体験しました。Image コンポーネントや metadata(title / description)で、Next.js らしい最適化と最低限の SEO 対応も触れています。
動的ルーティング([id])を使って、「一覧 → 詳細」のページ構造を作るイメージも持てています。
実用的なアプリとしてできること
API から fetch で JSON データを取得し、useState に入れて一覧表示する一連の流れを理解しています。
ローディング中・エラー時・成功時を状態として分けて、それぞれに違う UI を出す「実務っぽい画面」が作れます。
フォーム(input / textarea)を制御コンポーネントとして扱い、送信処理・入力チェック(必須/形式)まで含めた基本的なフォーム画面も実装できます。
TODO アプリのような「配列 state を追加・削除・更新する」パターンを自力で書けるようになりました。
小さなミニアプリを設計→実装→動作確認→修正の流れで「アプリとして育てる」経験もしています。
React理解の整理(頭の中を一度きれいにする)
ここからは、一度頭の中を整理するつもりで、「Reactとは何をやるツールなのか」を短くまとめます。
Reactは「状態からUIを作るエンジン」
React の本質は、「状態(state)から UI を作る関数」を定義することです。
コンポーネントはただの関数で、
今の state と props を入力にして
「どういう見た目にすべきか」を JSX で返す
という役割を担っています。
useState は、そのコンポーネントが「覚えておきたい値」を保持する仕組み。
ユーザーの操作で setState を呼ぶと、React が「もう一度コンポーネントを呼び直す(再レンダリング)」ことで UI を最新状態に保ちます。
つまり、
状態(データ)
↓
コンポーネント(状態→見た目の定義)
↓
画面(実際の UI)
という一本の流れを作るのが React です。
状態は「最も近い共通の親」に置く
state の持ち場所については、すでに実感があると思いますが、改めて整理します。
複数のコンポーネントで共有したい状態は、
それらの「最も近い共通の親」に置く
というのが基本ルールです。
例として、
LessonFilter と LessonList が「選択中のレベル」を共有したいなら、
その親である LessonsPage が selectedLevel を持つべき
という考え方です。
「どこでその状態を見たいのか」「どこでそれを書き換えたいのか」を丁寧に考えることが、
React の状態設計の基礎になっていきます。
副作用は useEffect に閉じ込める
UI を描く以外の処理(ログ、API 呼び出し、ローカルストレージ操作など)は、「副作用」として useEffect に閉じ込める、という分離も重要です。
初回だけ一度実行したい → 依存配列 []
特定の state が変わるたびに何かしたい → 依存配列 [value]
というパターンを意識することで、
コンポーネント本体:状態→UI
useEffect:状態→外部への影響
という役割分担が明確になってきます。
次に学ぶべき技術(いきなり全部じゃなくていい)
ここから先、「何をやればいいの?」問題が出てきます。
一気に全部やる必要はないので、段階別に候補を整理します。
まずはNext.js × Reactを「もう一段」深くする
この講座の延長として、次はこのあたりが良いステップです。
サーバーコンポーネントとクライアントコンポーネントの違い
サーバー側でのデータ取得(fetch in Server Component)loading.tsx / error.tsx によるルート単位のローディング・エラー画面
動的ルーティング+generateStaticParams などによる静的生成
すべてを一度にやるのではなく、
今作った「講座管理ミニアプリ」に一つずつ取り入れていく形が一番身につきます。
型の世界を少しだけ広げる(TypeScript)
TypeScript も、必要な範囲で少しずつ広げていくと良いです。
API レスポンスの型を定義して、fetch の戻り値に使う
フォーム入力用の型(FormValues など)を定義する
ユニオン型(”初級” | “中級” | “上級”)をもっと積極的に使う
「型で表現できれば、その分だけ安心してコードを書ける」
この感覚を意識しながら、少しずつ型を追加していくと、TypeScript がどんどん味方になっていきます。
UIライブラリ・スタイリングの強化
見た目をもっと楽に整えるために、スタイリング周りを学ぶのも有効です。
Tailwind CSS(ユーティリティクラスでサクサク組む)
あるいは、Mantine / MUI / Chakra UI などのコンポーネントライブラリ
自分で CSS を書ける土台はできているので、「スピードと統一感」を強化するフェーズに入れます。
実務・ポートフォリオへの道(ここからどう現場につなげるか)
ポートフォリオとして「1つのアプリ」を整える
まず一番現実的で効果が大きいのは、
今まで作ってきたミニアプリたちをベースにして、「これを見せられる」という 1 つのアプリを仕上げることです。
例えば、こんな流れが考えられます。
講座管理アプリを、「自分の学習記録アプリ」に寄せて作り直す
講座/章/完了状態/メモ/お気に入り など、自分が本当に使いたい機能を足す
見た目・UX・エラーハンドリングまで含めて、「自分で触って気持ちいい」レベルまで磨く
これを GitHub に上げておき、README に
何を意識して設計したか
どういう技術スタックか(Next.js / React / TypeScript / Tailwind など)
工夫したポイント(状態設計・エラー処理・UI/UX)
を書いておくと、それだけでかなり「語れるポートフォリオ」になります。
実務に近づくために意識したいポイント
実務では、技術力だけでなく、
他人のコードを読めるか
仕様の意図を汲み取れるか
バグを冷静に切り分けられるか
といった部分も重要になります。
この講座でやってきた、
エラーメッセージをちゃんと読む
状態の流れを図や文章で整理する
「とりあえず書く」前に「どう分割するか」考える
という習慣は、そのまま現場で効き始めます。
小さな一歩として、
オープンソースの簡単な Next.js プロジェクトを読んでみる
自分のアプリに Issue を立てる感覚で「改善点リスト」を作ってみる
他の人の作例(ポートフォリオ)を見て、「自分ならどう設計するか」を考えてみる
あたりから始めると、実務目線が少しずつ身につきます。
これからの学習を「自分のもの」にするために
ここまでの学びは、まだ「チュートリアル」と「あなた」の間にあります。
それを本当に自分のものにするには、
自分のテーマで
自分の設計で
自分のペースで
アプリを一つ育ててみることが、一番の近道です。
そのとき、意識してほしいのはこんな問いです。
この画面は、どんな人が、何のために使う?
状態はどこに置くと一番シンプルか?
エラーになったとき、ユーザーにはどう伝えるのが優しいか?
もし、次に作りたいアプリのアイデアが少しでもあるなら、それを教えてほしい。
「それなら、こんな構成が考えられるね」とか
「その機能を入れるなら、この技術が刺さりそう」みたいな話も、一緒に具体化できます。
ここから先は、もう「教材の世界」じゃなくて、
あなた自身のプロダクトと、あなた自身の物語の世界です。
React と Next.js は、そのための道具として、もう十分あなたの手の中に入り始めています。

