React.js

React 19 と TypeScriptで作る最新Todoアプリの開発手順

ⓘ本ページはプロモーションが含まれています

もっとスキルを活かしたいエンジニアへ

スポンサードリンク
働き方から選べる

無料で使えて良質な案件の情報収集ができるサービス

エンジニアの世界では、「いつでも動ける状態を作っておけ」とよく言われます。
技術やポートフォリオがあっても、自分に合う案件情報を日常的に見れていないと、いざ動こうと思った時に比較や判断が難しくなってしまいます。
普段から案件情報が集まる環境を作っておくと、良い案件が出た時にすぐ動きやすくなりますよ。
筆者自身も、メガベンチャー勤務時代に年収1,500万円を超えた経験があります。振り返ると、技術だけでなく「どんな案件や働き方があるか」を日頃から見ていたことが、キャリアの選択肢を広げるきっかけになりました。
このブログを読んでくれた方に感謝を込めて、実際に使っている情報収集サービスを紹介します。

フルリモート・週3日・高単価、どんな条件も妥協したくないなら

フリーランスボードに無料会員登録する

利用者10万人以上。業界最大規模45万件の案件。AIマッチ機能や無料の相場情報が人気。

年収800万円以上のキャリアアップ・ハイクラス正社員を視野に入れているなら

Beyond Careerに無料相談する

内定獲得率90%以上。紹介先企業とは役員クラスのコネクションがある安心と信頼できるエージェント。


スポンサードリンク

開発環境の準備とプロジェクト作成

このセクションでは、2026 年時点で「実務レベルの」React + TypeScript アプリをすぐに始められるように、必要なツールのインストールから雛形生成までの手順をまとめます。正しいバージョン情報は公式サイトで随時確認し、ローカル環境と CI 環境の両方で同一になることがトラブル防止につながります。

Node.js とパッケージマネージャー

Node.js は LTS 系列を利用することで長期サポートと安定性が保証されます。2026 年 7 月現在、公式サイト(https://nodejs.org/ja)で公開されている最新の LTS バージョンは v20.x 系 です。インストール後にバージョンを確認し、npm または Yarn が正しく動作することを確かめましょう。

ポイントnvm(Node Version Manager)を併用すると、プロジェクトごとに Node バージョンを切り替えられるため便利です。

Vite + React + TypeScript テンプレートの生成

Vite は開発サーバの高速起動と最適化ビルドが特徴で、公式テンプレートから React + TypeScript の雛形を即座に作成できます。以下のコマンドはプロジェクト名 my-todo を例にしています。

生成直後に npm run dev(または yarn dev)を実行すると、http://localhost:5173 で Vite のデフォルトページが表示されます。

Tailwind CSS の導入

Tailwind CSS はユーティリティファーストの CSS フレームワークで、React コンポーネントと相性が良く、モダン UI 開発の事実上の標準となっています。2026 年時点では Tailwind CSS v3.x が LTS として提供されており、公式ドキュメント(https://tailwindcss.com/docs/installation)に従ってインストールします。

tailwind.config.cjs に Vite のソースディレクトリ全体を対象にする設定を書き込みます。

次に src/index.css に Tailwind のベース・コンポーネント・ユーティリティをインポートし、エントリポイントで読み込むだけです。

まとめ:Node.js LTS → Vite + React/TS テンプレート → Tailwind CSS の順にセットアップすれば、2026 年版のフロントエンド開発環境が整います。次章ではこの土台上で利用できる最新の React API と TypeScript 活用法を見ていきます。


React 18/19 の基礎と TypeScript 活用

React 19 が正式にリリースされるかどうかは2026年時点でも未確定ですが、React 18(2022 年リリース)で導入された Concurrent Mode、useTransitionuseId などの機能はすでに安定版として利用可能です。本章ではこれらの API の実装例と、TypeScript で安全に型付けするベストプラクティスを紹介します。

Concurrent Mode と useTransition

useTransition は UI 更新と副作用(データフェッチなど)を分離し、ユーザー操作がブロックされないようにするためのフックです。React 18 から利用でき、React 19 が出たとしても基本的な挙動は変わりません。

ポイントstartTransition のコールバックは必ず非同期関数にし、エラーハンドリングは内部で行うか try/catch で包みます。

一意な ID 生成 useId

SSR(サーバーサイドレンダリング)環境でも衝突しない一意の文字列を取得できるフックです。ラベルと入力要素の紐付けやアクセシビリティ向上に活用します。

Props・State の型定義ベストプラクティス

項目 推奨手法 補足
Props インターフェースまたは type エイリアスで明示的に定義。必須とオプションは ? で分離 React.FC は暗黙の children が付与されるため、コンポーネントごとに型を自前で書く方が安全
State useReducer と discriminated union を組み合わせて状態遷移を型安全に管理 大規模なロジックは immer 等のミュータブルヘルパーと併用しても可
ユーティリティ型 Partial<T>, Pick<T, K> で部分的型取得、Record<string, unknown> で汎用オブジェクトを表現 API のリクエスト/レスポンスの差分管理に便利

Props の具体例

State と Action の型安全な定義例

まとめuseTransitionuseId は React 18 が提供する重要な Concurrent 機能です。これらを正しく使い、Props/State を TypeScript の型システムで厳密に定義すれば、開発中のバグ検出率が大幅に向上します。


Next.js App Router(13+)と Server Components / Server Actions

Next.js 13 系からは App Router がデフォルトとなり、app/ ディレクトリ配下でページ・レイアウトを宣言的に管理できます。さらに Server ComponentServer Action を組み合わせることで、クライアント側の JavaScript バンドルサイズを削減しながらサーバーロジックを書けます。この章では正しいディレクトリ構成と、実装上の落とし穴('use server' の位置など)を踏まえたコード例をご紹介します。

ディレクトリ構成の指針

以下は Todo アプリに最小限必要なファイル構造です。コメントで役割を補足しています。

  • layout.tsx は全ページ共通の HTML 構造を提供し、<html><body> タグを書き換える唯一の場所です。
  • page.tsxapp/ の直下にある場合はデフォルトで Server Component になるため、クライアント側で状態管理が必要なときだけ 'use client' を付けます。

Server Component の実装例

サーバーサイドでデータ取得し、HTML だけを返すシンプルなコンポーネントです。React の Suspense と相性が良く、初回ロードが高速になります。

注意fetchTodos はサーバー専用のヘルパー(例: node-fetch または Next.js の fetch)で実装し、クライアント側に不要な依存を持ち込まないようにします。

正しい Server Action の書き方

Server Action は ファイルトップレベル にエクスポートされた関数として定義し、関数内部の最初行で 'use server' を宣言します。クライアント側コンポーネントからは通常通り import して呼び出すだけです。

次に、クライアントコンポーネント側でこの Action を呼び出す例です。

重要'use client' が付いたファイルはクライアントバンドルに含まれ、そこで import { addTodo } from './actions' としても サーバー側ロジックは切り離されて実行 されます。逆に Server Component に 'use server' を書く必要はありません。

まとめ:App Router のディレクトリ規則と、Server Action を「トップレベル関数+'use server'」という形で記述すれば、クライアントコードはシンプルに保ちつつサーバーロジックを安全に呼び出せます。次章ではローカル UI 状態とサーバーデータ取得の統合パターンを見ていきましょう。


状態管理とデータフェッチング

Todo アプリは「ユーザー操作による即時状態」と「バックエンドから取得する永続データ」の二層構造が典型的です。本章では useReducer でローカル UI を管理し、 TanStack Query v5(旧 React Query)でサーバーデータのフェッチ・キャッシュを行う実装例を示します。両者を組み合わせることで、リアクティブかつスケーラブルな状態ツリーが構築できます。

useReducer でローカル UI を管理

useReducer は状態遷移が明確になるため、Todo の「完了/未完了」や「削除」など複数アクションが絡む場面に適しています。以下は型安全な reducer とその使用例です。

TanStack Query v5 の基本パターン

TanStack Query v5 は createQueryClientuseSuspenseQuery / useQuery を中心に構成され、React の Suspense と自然に連携できます。以下は Todo リストを取得し、キャッシュとリフェッチ戦略を設定した例です。

補足fetchTodosexport async function fetchTodos() { return await fetch(...).then(r => r.json()); } のようにサーバー専用のロジックで実装し、クライアント側には露出させません。

Reducer と Query を統合したハイブリッド例

サーバーから取得したデータをローカル useReducer に流し込み、完了フラグだけはクライアント側で即時に切り替えるパターンです。これにより 楽観的 UI 更新 が容易になります。

まとめuseReducer が UI の即時反応性を担い、TanStack Query がサーバーデータの取得・キャッシュ・再検証を統括します。両者を組み合わせることで「データは常に最新」「UI は瞬間的に変化」する理想的な Todo アプリが完成します。


テスト環境構築・CI/CD デプロイ

高品質なアプリを維持するには ユニットテスト継続的デリバリー が不可欠です。この章では Jest と React Testing Library のセットアップ、主要コンポーネントのテスト例、そして Vercel と Netlify への自動デプロイフローを具体的に示します。

Jest と React Testing Library の設定

まずは開発依存として以下パッケージをインストールします。ts-jest は TypeScript ファイルのトランスパイルに必要です。

jest.config.ts(基本設定)

jest.setup.ts(マッチャー有効化)

コンポーネントテストの具体例

以下は先ほど定義した TodoItem コンポーネントに対する 2 パターンのテストです。型安全アクセシビリティ の観点からも確認できます。

テストは npm test(package.json の "test": "jest" エイリアス)で実行できます。CI 環境では GitHub ActionsGitLab CI に同コマンドを組み込んで、プルリクエストごとに自動検証させます。

Vercel と Netlify へのデプロイ手順

  1. リポジトリの接続
  2. GitHub(または GitLab)へコードを push → Vercel のダッシュボードで「Import Project」→対象リポジトリを選択。Netlify でも同様に「New site from Git」を選びます。

  3. ビルド設定

  4. ビルドコマンド: npm run build(Vite が vite build を内部で呼び出す)
  5. 出力ディレクトリ: dist (Vite のデフォルト)

  6. 環境変数の登録

  7. API エンドポイントやシークレットキーはプラットフォーム側の「Environment Variables」画面に設定。Next.js の .env.local と同名で登録すれば自動的に注入されます。

  8. プレビューと本番デプロイ

  9. プッシュごとにプレビュー URL が発行され、マージ時に本番環境へ自動デプロイ。Vercel の場合は vercel.json でキャッシュ制御やリダイレクト設定が可能です。

Vercel 用サンプル vercel.json

まとめ:Jest + React Testing Library によるテスト基盤と、Vercel/Netlify の Git 連携 CI/CD を組み合わせれば、コード品質の担保とデプロイ自動化がシームレスに実現します。これで開発フロー全体が「ローカル → テスト → 本番」へと一貫したパイプラインになります。


この記事の要点

  • 環境構築:公式サイトで最新 LTS の Node.js を確認し、Vite + React/TS テンプレート+Tailwind CSS v3.x で開発基盤を作る。
  • React APIuseTransitionuseId は React 18 から利用可能。TypeScript で Props/State を厳密に型付けすればバグ抑止効果が高まる。
  • Next.js App Routerapp/ 配下のディレクトリ構成と、Server Action は「トップレベル関数+'use server'」で実装する点を守る。
  • 状態管理useReducer が UI の即時反応性を担い、TanStack Query v5 がサーバーデータの取得・キャッシュを統括。二者統合で楽観的 UI 更新が可能になる。
  • テスト & デプロイ:Jest + React Testing Library によるユニットテストと、Git 連携の Vercel / Netlify CI/CD が実務レベルの品質保証を提供する。

上記の流れに沿ってハンズオンすれば、2026 年版 「Node.js LTS → Vite + React/TS → Tailwind CSS → Next.js App Router」 のスタックで、スケーラブルかつテストカバーされた Todo アプリを自信を持って本番にリリースできます。


参考文献

  1. Node.js 公式サイト – LTS リリース情報(https://nodejs.org/ja)
  2. Vite ドキュメント – React + TypeScript テンプレート(https://vitejs.dev/guide/#scaffolding-your-first-vite-project)
  3. Tailwind CSS インストールガイド(https://tailwindcss.com/docs/installation)
  4. React 公式ブログ – Concurrent Mode と useTransition(2022 年リリースノート)
  5. Next.js ドキュメント – App Router & Server Actions(https://nextjs.org/docs/app/building-your-application/routing)
  6. TanStack Query v5 リファレンス(https://tanstack.com/query/v5)
  7. Jest 公式サイト – TypeScript 設定例(https://jestjs.io/docs/getting-started)

本稿の情報は執筆時点(2026 年 7 月)に基づくものであり、バージョンや API の変更がある場合は各公式ドキュメントをご確認ください。

スポンサードリンク

もっとスキルを活かしたいエンジニアへ

スポンサードリンク
働き方から選べる

無料で使えて良質な案件の情報収集ができるサービス

エンジニアの世界では、「いつでも動ける状態を作っておけ」とよく言われます。
技術やポートフォリオがあっても、自分に合う案件情報を日常的に見れていないと、いざ動こうと思った時に比較や判断が難しくなってしまいます。
普段から案件情報が集まる環境を作っておくと、良い案件が出た時にすぐ動きやすくなりますよ。
筆者自身も、メガベンチャー勤務時代に年収1,500万円を超えた経験があります。振り返ると、技術だけでなく「どんな案件や働き方があるか」を日頃から見ていたことが、キャリアの選択肢を広げるきっかけになりました。
このブログを読んでくれた方に感謝を込めて、実際に使っている情報収集サービスを紹介します。

フルリモート・週3日・高単価、どんな条件も妥協したくないなら

フリーランスボードに無料会員登録する

利用者10万人以上。業界最大規模45万件の案件。AIマッチ機能や無料の相場情報が人気。

年収800万円以上のキャリアアップ・ハイクラス正社員を視野に入れているなら

Beyond Careerに無料相談する

内定獲得率90%以上。紹介先企業とは役員クラスのコネクションがある安心と信頼できるエージェント。


-React.js